전체 글 58

[iOS] 2026.01.06 Dictionary

딕셔너리를 옵셔널 바인딩 해보려다가 막혔던 부분. var dictionary: [Int: Int] = [:]// 딕셔너리의 값을 꺼낼 때 기본적으로 모두 Optional.// 그래서 옵셔널 바인딩을 하려고 시도.guard let tempValue = dictionary[1] else { return } // 첫번째 방법 : 값이 없으므로 nil이 반환되어 return됨.let tempValue = dictionary[1] ?? 0 // 두번째 방법 : 값이 없지만 default로 0이 반환됨 but 실제 값은 없음.-> 두 방법 모두 옵셔널은 제거가 되지만 해당 키에는 실제 값이 없음.// 딕셔너리의 서브스크립트 활용let tempValue = dictionary[1, default: 0] // key1..

iOS 2026.01.06

[iOS] 2026.01.02 xib, nib, storyboard

XIB, NIB, Storyboard는 파일형태로 되어있고, 화면을 구성할 때 사용되는 리소스. - 이들은 코드로 직접 UI를 작성하지 않아도, 런타임에 UIKit이 이를 해석하여 실제 화면 객체를 생성할 수 있도록 한다. XIB란?Xcode Interface Builder의 약자로, Xcode에서 제공하는 시각적 에디터를 통해 생성되는 UI 설계 파일을 의미함. - 화면을 구성하는 클래스(UIView, UIButton, UILabel, UIViewController 등)들의 객체 구조를 XML 문법에 맞춰 저장한 파일 - 확장자 : .xib - 사람이 읽을 수 있는 텍스트(XML) 파일 NIB란?NeXT Interface Builder의 약자로 XIB가 빌드 시 컴파일된 결과물을 의미함. - 확장자 :..

iOS 2026.01.02

[iOS] 2026.01.01 ABI Stability

ABI Stability는 Swift 5 부터 도입되었음. 여기서 ABI(Application Binary Interface)란,앱과 운영체제가 바이너리 레벨에서 소통하는 규칙 / 약속 을 의미함.(API가 앱과 서버간의 통신 규칙이라면, ABI는 앱과 운영체제와의 통신 규칙) 즉, 컴파일이 끝난 후 런타임 시점에 실행 가능한 기계어(binary) 기준에서의 인터페이스 설계임.(소스레벨 규칙은 API, 바이너리레벨 규칙은 ABI)ex) 메모리 구조, 함수 호출 방식, 타입 정보 등. Swift 5 이전에는언어 자체가 계속 변화하면서 ABI가 지속적으로 변경되어 버전 간 바이너리 호환이 어려웠음.그래서 앱 실행에 필요한 Swift 런타임과 표준 라이브러리를 앱 번들에 직접 포함해야 했음.-> 앱 용량 증가..

iOS 2026.01.02

[iOS] 2025.12.31 raw string

기존 Swift 문자열 리터럴에서는 \(백슬래시) 기반 이스케이프 시퀀스를 사용하며, 특수 문자나 따옴표 등을 포함할 때 많은 이스케이프가 필요했었음. 이러한 이스케이프는 코드 가독성을 떨어뜨리고 유지보수를 어렵게함.Swift 5 부터 문자열 양쪽에 # 문자를 붙여 구분자를 확장할 수 있게 됨.let text = #"This is "raw" text\n"#print(text) // This is "raw" text\n 출력 문자열 보간(Stirng Interpolation)이나 멀티라인 문자열과 결합할 때도 사용 가능// 문자열 보간let name = "Tom"let s1 = "Hello, \(name)"let s2 = #"Hello, \#(name)"#let s3 = ##"Hello, \##(name..

iOS 2025.12.31

[Algorithm] 2025.12.30 nonZeroBitCount

항상 이진법에 대한 고민이 있었는데, 새로 알고리즘 문제를 풀다가 새로운 키워드를 알게 되었음. nonZeroBitCount: 이진수 값에서 1의 개수를 표현 bitWidth: 비트 길이 // 이진수로 바꾼 뒤 0의 개수 세기let n = 31let number = nlet binaryZeroCount = String(n, radix: 2).filter { $0 == "0" }.count // 0// 비트 연산으로 직접 0 개수 세기(고정 폭 기준)// 64비트 기준(Int64)let n = 31let zeroCountInFixedWidth = n.bitWidth - n.nonZeroBitCount // 64 - 5 = 59// 유효 비트(선행 0 제외) 기준으로 0의 개수 세기let n = 40let ..

Algorithm 2025.12.30

[iOS]2025.06.09 모의면접

대답의 기승전결을 만들자.정의 - 특성 - iOS 접목 - 다뤄본 경험 1. stack 과 queue의 차이점stack은 후입선출 구조를 가진 자료구조입니다. 나중에 온 데이터가 위에 쌓이는 방식이며 iOS에서는 내비게이션 스택처럼 다음화면이 순차적으로 쌓이는 형태를 띕니다. 화면 전환 시 push, pop과 같은 메서드를 통해 쌓여있는 데이터를 후입선출 방식으로 다룰 수 있습니다.queue는 선입선출 구조를 가진 자료구조입니다. 먼저 들어온 데이터를 먼저 처리하는 방식이며 iOS에서는 DispatchQueue와 같이 순서대로 처리하는 형태를 띕니다. 2. optionaloptional은 값이 있을 수도 없을 수도 있는 경우를 나타내는 타입입니다. 옵셔널 처리를 통해 개발자가 해당 값을 사용할 때 유의..

카테고리 없음 2025.06.09

[iOS]2025.06.04 Stack을 왜 쓸까?

함수 호출 시 지역 변수, 매개 변수, 리턴 주소 등이 왜 스택에 저장될까? 1. 함수 호출의 구조적 특성과 후입선출이 잘 맞기 때문func a() { b()}func b() { c()}func c() { print("Hello")}호출 순서는 a->b->c 이지만, 복귀 순서는 c->b->a마지막에 호출된 함수가 가장 먼저 종료되는 구조 -> 스택의 후입선출과 일치 2. 지역 변수와 매개변수는 호출될 때마다 새로 생성되고, 호출이 끝나면 사라지기 때문3. 리턴 주소를 저장해서 함수가 끝난 뒤 어디로 돌아갈지를 알려주기 위해func multiply(x: Int, y: Int) -> Int { let result = x * y return result}func main() { ..

iOS 2025.06.04