Archive
Reflections on design and notes from learning to code.
Why different shapes can still feel like one whole
Thinking about coherence in design systems through the colors and materials of a city.
Network: JWT(JSON Web Token)
두 개체 사이에서 정보를 안전하게 전송하기 위한 자체 검증된 JSON 문자열웹 애플리케이션의 초기에는 HTTP가 상태를 유지하지 않는(Stateless) 프로토콜이었기 때문에 사용자의 상태나 정보를 유지하기 위해 쿠키와 세션이 도입되었다.사용자의 브라우저에 저장되는 작
OS: File System
데이터를 파일로 저장하고 조직화하는 방법과 구조를 정의하는 시스템연속된 바이트의 집합으로 표현되며,데이터를 영구적으로 저장하기 위한 논리적 단위이다.컴퓨터에서 사용하는 모든 정보(문서, 프로그램, 이미지, 동영상)는 파일로 저장된다.파일에 수행할 수 있는 다양한 동작을
Concurrency: Continuation
기존의 콜백 기반 API나 다른 비동기 메커니즘을 async/await 패턴으로 래핑하기 위한 기능completionHandler같이 async/await 패턴이 도입되기 전 비동기 처리에 대한 패턴들을 async/await 패턴으로 사용할 수 있도록 변환한다.asyn
Swift: Strong, Weak, Unowned
Strong, Weak, Unowned Swift의 메모리 관리 시스템에서 참조를 정의할 때 사용되는 키워드 순환 참조 A가 B를 참조하고 B가 A를 참조하는 경우 같이 두 객체가 서로를 참조하면 순환 참조가 발생한다. 순환 참조가 발생하면 ARC의 Reference
Swift: ARC(Automatic Reference Counting)
iOS에서 사용되는 참조 카운팅 방식 기반의 메모리 관리 기법Swift에서 참조(Reference) 타입의 인스턴스는 Heap 영역에 할당된다.Heap 영역에 저장된 메모리는 개발자나 메모리 관리 시스템이 명시적으로 해제하기 전까지는 계속해서 남아있기 때문에, 사용하고
OS: Memory Management
Memory Management 프로그램 성능 최적화, 자원 활용도 향상, 시스템 안정성을 위해 효율적인 메모리 관리가 필요 프로세스와 메모리 프로세스의 실행과 관련된 메모리 관리는 시스템의 성능과 안정성을 결정하는 핵심적인 부분이다. 프로세스 실행 중인 프로그램을
Concurrency: Download Image with Async/Await
세 가지 비동기 처리 방법인 @escaping, Combine, Async/Await을 통해 각각 이미지를 다운로드하는 예시비동기 처리를 위해 completionHandler를 사용하는 가장 전통적인 방법이다.\[weak self] 등의 방법으로 클로저 내에서 참조 타
OS: Deadlock
Deadlock 멀티프로세싱 환경에서 두 개 이상의 프로세스가 다른 프로세스가 점유하고 있는 자원을 서로 기다리며 무한 대기에 빠지는 상황 시스템이 자원을 획득하는 과정 1. 자원 요청(Resource Request) 프로세스가 필요한 자원을 사용하기 위해 시스템에
Swift: Throw, Try, Do-Catch
함수에서 발생할 수 있는 에러를 식별, 처리하는 과정을 관리함수 내에서 특정 조건에 따라 에러를 발생시키기 위해 사용한다.발생될 에러의 종류를 enum과 Error 프로토콜을 활용하여 먼저 정의한다.함수가 에러를 던질 수 있다는 것을 throws를 통해 명시한다.함수
SwiftUI: UIViewRepresentable
UIViewRepresentable UIKit의 UIView를 SwiftUI 뷰로 래핑하기 위한 프로토콜 UIViewRepresentable Protocol SwiftUI는 기본적으로 UIKit을 대체하는 새로운 프레임워크이지만, UIKit에서 제공하는 커스텀 뷰를
SwiftUI: MatchedGeometryEffect
서로 다른 두 뷰 사이에 애니메이션 효과를 줄 수 있는 기능일반적인 애니메이션 효과는 단일 뷰의 변화를 감지하여 그 변화에 애니메이션을 적용한다.matchedGeometryEffect를 이용하여 두 뷰 사이의 변화에 애니메이션 효과를 적용할 수 있다.matchedGeo
Swift: Generic
일반적인 타입이나 함수를 추상화하여 타입에 의존하지 않고 재사용성을 높이는 기능함수를 선언할 때 제네릭을 사용하여 타입에 의존하지 않는 범용 코드를 작성할 수 있다.<T>와 같은 형태의 타입 매개변수(type parameter)를 사용하여 임의의 타입 T를 정의할
Swift: In-Out
함수 내에서 파라미터로 전달된 변수의 값을 수정할 수 있도록 하는 키워드Swift에서 함수의 파라미터는 기본적으로 값(Value)으로 복사되어 전달되어, 함수 내부의 파라미터에 대한 변경은 함수 외부에 영향을 주지 않는다.inout 키워드를 통해 해당 변수의 참조(Re
SwiftUI: SafeAreaInset
디바이스 화면 SafeArea에 콘텐츠 뷰 추가디바이스 화면의 가장자리 등 SafeArea에 여백을 추가하여 뷰를 배치할 수 있다.navigationTitle이 존재하는 상황에서 상단에 뷰를 추가할 경우, navigationTitle 영역을 포함한다.그러나 추가하는 뷰
SwiftUI: Resizable Sheet
presentationDetents를 이용해 sheet의 사이즈 조정presentationDetents를 이용하여 원하는 크기로 sheet의 사이즈를 조정할 수 있다.사용자가 조정 가능한 사이즈의 범위를 set 형태로 지정한다.가능한 사이즈의 범위가 2개 이상일 경우
Algorithm: Quick Sort
대표적인 정렬 알고리즘 중 하나로, 분할 정복(Divide and Conquer) 기법을 사용하여 리스트를 정렬배열을 기준값(pivot)을 기준으로 두 개의 하위 배열로 분할하고, 분할된 하위 배열을 재귀적으로 정렬한 뒤, 결합하여 최종적으로 정렬된 배열을 얻는 방식이
Algorithm: Bubble Sort
가장 간단하고 기본적인 정렬 알고리즘으로 두 인접한 원소를 비교하여 순서대로 정렬하는 방식두 인접한 원소를 비교하고 필요한 경우 위치를 교환함으로써 정렬을 수행한다.간단한 알고리즘이지만 최악, 평균, 최선의 경우 시간 복잡도는 모두 O(n^2)로 비효율적이다.첫 번째
Algorithm: Time Complexity
알고리즘이 문제를 해결하는 데 걸리는 시간의 증가율을 나타내는 개념 알고리즘의 수행 시간을 분석하는 방법으로, 입력 크기에 따라 알고리즘의 실행 시간이 어떻게 증가하는지를 나타낸다. 시간 복잡도를 통해 주어진
SwiftUI: Publishers, Subscribers
데이터의 흐름을 관찰하고 반응하는 데에 주로 사용되며, 변화하는 데이터를 생성하고 해당 데이터에 대한 응답을 처리Publisher는 데이터 스트림을 생성하는 타입으로, 특정 데이터 소스에서 새로운 값이나 이벤트를 발생시킬 수 있다.Subscriber는 Publisher
Swift: @escaping
클로저가 함수의 파라미터로 전달될 때 함수를 벗어나서(함수의 실행이 종료된 후) 실행되는 클로저일반적으로 함수의 파라미터로 전달된 클로저는 함수 내에서만 실행되며, 함수의 범위를 벗어나면 자동으로 소멸한다.@escaping 속성이 지정된 클로저는 함수의 범위를 벗어나도
SwiftUI: @State
값의 변화를 추적하고 해당 값이 변경될 때마다 뷰를 자동으로 업데이트하는 프로퍼티 래퍼Struct에서만 사용되며, 선언된 변수의 값을 관찰하고 값의 변화가 있을 때 해당 뷰를 업데이트 한다.뷰의 body에서만 접근해야되기 때문에 private으로 선언하는 것을 권장한다
SwiftUI: @EnvironmentObject
앱 전역에서 공유되는 객체 데이터를 설정할 수 있는 프로퍼티 래퍼ObservableObject를 채택한 객체 데이터를 @StateObject와 @ObservedObject를 통해 뷰 간에 공유할 수 있다.하지만 이 방법은 직접적으로 데이터를 사용하지 않더라도 전달만을
SwiftUI: ObservableObject, @Published, @ObservedObject, @StateObject
@ObservableObject, @StateObject 외부 객체의 상태를 관찰하고 업데이트할 수 있는 프로퍼티 래퍼 코드 분리의 필요성 코드의 양이 많아지고 복잡해짐에 따라 협업과 유지보수, 확장성 측면에서 코드를 분리하여 관리해야 한다. 코드의 각 목적에 따라
SwiftUI: Custom Model
Struct를 활용하여 사용자 인터페이스를 작성하는 데에 필요한 데이터 모델을 관리Array 형식으로 동일한 타입의 데이터를 선형적으로(순서대로) 정리할 수 있다.index를 통해 개별 요소에 접근할 수 있다.struct 형식으로 여러가지 타입의 데이터를 캡슐화하여 정
SwiftUI: GeometryReader
GeometryReader 부모 뷰의 크기 및 좌표 시스템을 활용하여 하위 뷰의 레이아웃과 위치를 제어할 수 있는 컨테이너 뷰 UIScreen UIScreen을 활용하여 화면의 너비에 따라 레이아웃이나 위치를 지정할 수 있지만, Landscape모드 등 유동적으로 적
SwiftUI: ScrollViewReader
스크롤 뷰의 위치를 제어하고 특정 뷰로 스크롤 할 수 있는 뷰일반적으로 ScrollView 내부의 포함되는 뷰의 식별자를 사용하여 특정 뷰로 스크롤할 수 있다.id값을 지정하여 해당 위치의 뷰로 스크롤할 수 있고, anchor를 통해 스크롤된 뷰의 위치를 지정할 수 있
SwiftUI: NavigationStack
NavigationStack 화면 간의 이동과 탐색 기록을 관리하는 데 사용되는 스택(stack) 개념의 컨테이너 뷰 NavigationLink 다른 화면으로 이동하며 네비게이션 스택에 새로운 뷰를 푸시(push)하고 이전 뷰로 돌아갈 수 있는 탐색 기능을 제공한다.
SwiftUI: @AppStorage
사용자 설정과 같은 간단한 데이터를 저장하고 검색할 수 있는 프로퍼티 래퍼앱의 설정 데이터, 사용자 기본값 같은 간단한 상태 정보 등을 저장하고 검색하는 데 사용되는 인터페이스이다.key-value 형식으로 데이터를 저장하며, 각 데이터 항목에는 유일한 키와 해당 데이
iOS: 한글 조사 입력하기
입력된 한글 문자열의 받침 유무에 따라 '이' 또는 '가'를 입력하는 함수한글 음절에 대한 유니코드는 0xAC00(가)부터 0xD7AF(힣)까지 총 11172개의 코드 포인트가 있다.각 음절은 초성 + 중성 + 종성(optional)으로 이루어져 있다.한글은 초성, 중
SwiftUI: OnTapGesture
뷰에 탭 제스처를 설정하여 사용자가 화면을 탭 했을 때 설정한 코드 실행사용자가 특정 뷰를 탭하면 실행할 코드를 지정하여, 제스처가 인식되면 지정된 코드 블럭을 실행한다.일반 버튼과 다르게 뷰가 탭 됐을 때 하이라이트 되지 않는다.count 파라미터를 통해 인식될 탭
Swift: If Let, Guard Let
옵셔널 값을 안전하게 추출하는 옵셔널 바인딩 방법조건문 안의 옵셔널 값이 nil인지 체크하고, 각 경우에 대한 처리를 안전하게 수행한다.보통 각 조건에 따른 처리를 위해 사용되지만, else문을 생략하고 사용할 수 있다.옵셔널 바인딩 된 상수 if문 안에서만 사용할 수
OS: Kernel
인터페이스와 함께 운영체제의 한 구성으로, 프로세스 관리, 메모리 관리, 저장장치 관리와 같은 운영체제의 핵심 기능을 구현한 프로그램커널은 운영체제의 핵심 부분으로, 하드웨어와 소프트웨어 사이의 중개자 역할을 합니다.프로그램이 하드웨어를 직접적으로 접근할 수 없기 때문
SwfitUI: Transition
뷰가 화면에서 등장하거나 사라질 때의 전환 효과먼저 뷰에 애니메이션을 적용시킨 후, 조건문을 활용하여 뷰에 전환 효과를 적용시킬 수 있다.AnyTransition의 다양한 전환 효과를 적용시킬 수 있다.asymmetric을 활용하여 등장과 퇴장할 때의 전환 효과를 다르
SwiftUI: OnAppear, OnDisappear
onAppear, onDisappear 뷰가 나타나거나 사라질 때 입력된 코드를 실행 onAppear 뷰가 화면 상에 나타날 때 입력된 코드를 실행한다.
OS: Operating System
컴퓨터 자원을 효율적으로 관리하는 소프트웨어응용 프로그램 : 특정 작업을 위해 사용되는 프로그램ex) 포토샵, 일러스트시스템 소프트웨어 : 컴퓨터 하드웨어와 응용 프로그램을 관리하기 위한 소프트웨어ex) 운영체제, 유틸리티컴퓨터를 관리하기 위한 기본적인 규칙과 절차를
SwiftUI: ActionSheet
사용자에게 선택지를 제공하는 팝업 형태의 뷰iOS 14를 끝으로 더이상 사용되지 않지만, iOS 13과 14를 지원하기 위해서는 ActionSheet로 구현해야한다.일반적으로 두 개 이상의 선택지가 있고, 사용자가 선택을 하면 ActionSheet는 사라지고 해당 액션
SwiftUI: Alert
사용자에게 경고, 에러, 성공 등과 같은 메시지를 전달하고 확인 및 선택을 요청하는 뷰Alert 메시지를 표시하고, 사용자는 메시지를 확인할 수 있다.Alert 메시지를 표시하고, 사용자는 다음 액션에 대해 선택할 수 있다.primaryButton는 주 버튼으로 설정되
SwiftUI: List
데이터를 목록 형태로 보여주는 뷰List 생성자에 뷰를 전달하면, 뷰 하나의 row 하나씩 표현한다.id로 식별할 수 있는 데이터를 받아 ForEach를 활용하여 동적으로 뷰를 생성할 수 있다.Section을 활용하여 List 내의 데이터를 그룹핑하고 header와 f
SwiftUI: Conditional Statements(if-else)
조건문을 사용하여 뷰의 내용을 동적으로 결정if 혹은 else if 뒤의 조건이 true일 경우 해당 코드를 실행하고 그렇지 않다면(false)일 경우 else의 코드가 실행된다.조건식에는 Bool타입의 값만 들어와야 한다.현재 조건에 따라 어떤 코드를 실행할 지 결정
SwiftUI: @Binding
데이터의 값을 변경하고 다른 뷰와 동기화하는 프로퍼티 래퍼(property wrapper)@State에서 저장된 뷰의 상태를 다른 뷰와 공유하고 변경할 수 있게 한다.@State는 값이 변경될 때 뷰를 다시 그리고, @Binding은 값이 변경될 때 뷰 간의 데이터를
SwiftUI: LazyStack
LazyStack 스택 내의 아이템들이 화면에 렌더링 될 때 생성 LazyV(H)Stack 일반 Stack뷰의 경우 화면에 나타나기 전 모든 데이터를 로드하지만, LazyStack뷰의 경우 화면에 나타난 후에 데이터를 로드한다.
SwiftUI: ScrollView
내부의 여러 뷰들을 스크롤 가능하게 담는 뷰ScrollView는 기본적으로 수직 방향이다.VStack, ForEach를 활용하여 반복되는 동일한 뷰를 표현할 수 있다.axes 파라미터를 전달하여 ScrollView를 수평 방형으로 변경할 수 있다.showsIndicat
SwiftUI: ForEach
한 개 이상의 뷰를 반복할 수 있는 뷰반복할 범위(횟수)를 지정해주고 반복할 뷰를 작성하여 원하는 만큼 뷰를 반복한다.Array를 활용하여 반복할 횟수와 반복할 데이터를 전달합니다..indices는 컬렉션의 인덱스 범위를 나타내는 Range<Int>를 반환한다.
SwiftUI: Init, Enum
뷰 내부에 변수를 생성하고, Enum을 활용하여 초기화하여 뷰의 재사용성 향상뷰(구조체)의 재사용성을 높이기 위해 title, backgroundColor이라는 변수(프로퍼티)를 생성한다.생성한 프로퍼티에 기본값을 할당한다.프로퍼티 기본값을 지정하지 않을 경우, 이니셜
SwiftUI: Image
이미지를 추가할 수 있는 뷰이미지를 frame을 기준으로 사이즈를 조정할 수 있다.원본 이미지 비율을 유지하면서 이미지 사이즈를 조정할 수 있다.업로드중..업로드중..이미지를 원하는 모양으로 클리핑 마스크를 씌울 수 있다.이미지의 불투명 영역의 색상을 임의로 변경할 수
SwiftUI: Padding, Spacer
뷰 자체 혹은 뷰 간의 여백 추가뷰 자체의 수직, 수평 방향으로 여백을 추가 할 수 있다.Stack뷰 안에 여백(빈 공간)을 추가할 수 있다.Spacer는 크기는 유동적으로 조정되며, 가능한 많은 공간을 차지한다.minLength 파라미터를 통해 최소 여백을 설정할 수
SwiftUI: Stack
한 개 이상의 뷰를 묶어서 배치한 개 이상의 뷰를 수평 방향으로 배치할 수 있다.수직 방향으로 정렬할 수 있다.뷰간의 간격을 조절할 수 있다.(기본값 8)한 개 이상의 뷰를 수직 방향으로 배치할 수 있다.수평 방향으로 정렬할 수 있다.뷰간의 간격을 조절할 수 있다.(기
SwiftUI: Backgrounds, Overlays
요소 뒷면 혹은 앞면에 다양한 요소를 추가할 수 있는 modifier요소 뒷면에 다양한 요소들을 추가할 수 있다.여러개를 복수로 추가할 수 있다.(Overlays도 동일)요소 앞면에 다양한 요소들을 추가할 수 있다.Overlay안의 요소에 Overlay를 추가할 수 있
SwiftUI: Frame
화면의 여러 요소들을 감싸는 사각형의 영역frame 영역을 지정해주지 않으면 콘텐츠 자체가 차지하는 영역이 기본 영역이다.frame 영역을 지정해주면 지정해준 넓이만큼 화면의 공간을 차지하게된다.frame 영역을 기준으로 frame 내부의 요소들을 정렬할 수 있다.fr
SwiftUI: Icons
Image를 이용해 원하는 아이콘 생성Apple의 SF Symbols를 활용해 기본 시스템 아이콘을 사용할 수 있다.SF Symbols의 아이콘 이름을 systemName으로 입력하여 사용할 수 있다.SF Symbols (https://developer.app
SwiftUI: Gradients
Component의 색상을 그라디언트로 변경선형 그라디언트를 추가할 수 있다.원형 그라디언트를 추가할 수 있다.회전형 그라디언트를 추가할 수 있다.
SwiftUI: Color
Components의 색상을 변경시스템에서 미리 지정된 색상을 사용할 수 있다.원하는 색상을 미리 지정하고 색상 이름으로 적용할 수 있다.Assets 폴더의 새로운 Color Set 추가 및 이름 지정inspector에서 Appearance별 색상 지정(디스플레이 모드
SwiftUI: Shape
여러가지 모양의 도형을 생성할 수 있는 componentmodifiers를 통해 shape의 다양한 속성을 추가할 수 있다.shape의 모든 종류는 관련된 modifiers를 동일하게 적용할 수 있다.
SwiftUI: Text
텍스트 입력하고 표시할 수 있는 componetmodifiers를 통해 components의 여러 속성들을 추가 및 변경할 수 있다.modifiers를 통해 text의 다양한 속성을 추가할 수 있다..font modifier를 통해 시스템 폰트를 활용할 수 있다.크기
20221031
if-else조건을 지정하고 해당 조건이 true이면 코드 실행조건 값에는 Bool 타입의 값만 위치해야하고, 조건을 감싸는 소괄호는 생략 가능만약 확인한 조건이 true가 아니라면 else를 실행switch각 case 별로 다른 코드를 실행시킬 때 사용각 case 내
20221028
enum같은 주제로 연관된 데이터들을 멤버로 구성하여 나타내는 자료형열거형은 Int, Double, String과 같은 Type의 일종으로 대문자로 시작(함수 등에서) 입력받을 값을 제한하고 싶을 때 사용각 케이스는 한 줄에 한 개씩, 혹은 여러개씩도 정의 가능원시값(
20221027
비교연산자 Bool(True/False)A==B // 값이 같다.A!=B // 값이 같지 않다.A>=B // 값이 크거나 같다.A<=B // 값이 작거나 같다.A>B // 값이 크다.A<B // 값이 작다.논리연산자(AND/OR)논리곱(Conditional
20221026
for-infor-in 구문의 기본 형태컬렉션 타입을 활용한 for-in 구문튜플 타입(Tuple) : 여러가지 타입의 복수 값들을 그룹화한 단일 값whilewhile 구문의 기본 형태컬렉션 타입을 활용한 while 구문repeat-whilerepeat-while 구문
20221025
Array순서(인덱스)가 있는 멤버를 가진 리스트 형태의 컬렉션 타입메소드 등 여러가지 형태로 Array 활용Dictionary키(key)와 값(value)의 쌍으로 이루어진 컬렉션 타입메소드 등 여러가지 형태로 Dictionary 활용Set순서가 없고, 중복된 멤버가
20221024
Any모든 타입 지칭AnyObject모든 클래스 타입을 지칭하는 프로토콜AnyObject는 클래스의 인스턴스만 수용 가능nil값이 없음을 의미.1\. 매개변수 기본값함수의 매개변수에 기본값을 미리 지정 가능기본값을 갖는 매개변수는 매개변수 목록 중 뒤쪽에 위치하는 것이
20221023
프로그램 소스 코드의 정보를 남기기 위한 목적으로 작성되는 메모1\. 한 줄 주석// (주석) 로 표현여러 줄 주석/ (주석) / 로 표현.1\. 정수 타입Int : +, -를 포함한 정수UInt : -를 포함하지 않고 0을 포함한 양의 정수불리언 타입Bool : tr
20221022
변수(variable)프로그램에서 사용할 값을 저장하는 공간(컴퓨터 메모리에 공간 생성)변수에 할당한 값은 언제든지 변경 가능상수(constant)변수와 마찬가지로 프로그램에서 사용할 값을 저장하는 공간(컴퓨터 메모리에 공간 생성)상수에 할당한 값은 추후에 변경 불가능
20221019
함수특정 기능을 수행하는 코드의 묶음함수는 인수(argument)를 전달하여 일을 처리한 후 반환 값(return value)을 출력한다.반환값이 없을 경우 반환값 타입을 Void로 지정, 혹은 생략 가능매개변수가 없을 경우 생략 매개변수 생략반복문(for-in)특정
20221018
ForkFork란 개발자들이 하나의 소프트웨어 소스 코드를 통째로 복사하여 독립적인 새로운 소프트웨어를 개발하는 것이다.미션 repository를 내 repository로 Fork 해왔다.https://s3.ap-northeast-2.amazonaws.com/
20221017
이진수컴퓨터는 0과 1 이진수로 작동한다. 숫자, 문자, 색상, 이미지, 소리, 심지어 동영상까지.이러한 이진수 코드들을 우리가 이해할 수 있는 데이터의 형태로 변환하는 약속들이 존재한다.(ex. ASCII, UTF-8, …)이전에 웹 코딩을 할 때 문서 속성을 'UT