본문 바로가기

FRONT-END/iOS39

Swift 클로저(Closure) 클로저란? 이름이 없는 함수를 의미함 왜 이름이 불필요할까? 함수를 실행하는 형태가 아닌 전달하는 형태로 사용하기 때문에 이름이 불필요함 ex) 파라미터 전달 등 함수가 필요한 순간 클로저로 정의해서 전달 함수와 클로저 형태의 비교 // 함수의 형태 func myFunction() -> Int { return ... } // 클로저의 형태 {() -> Int in return } 함수를 1급 객체로 취급함, 함수는 타입! 함수를 변수에 할당할 수 있음 함수를 호출할 때, 함수를 파라미터로 전달할 수 있음 함수에서 함수를 반환할 수 있음 중괄호는 함수 // 아래 두 코드는 동일함을 인지할 수 있어야 함 var sample = { print("closure") } var sample = { () -> () .. 2023. 8. 4.
iOS 앱이 만들어지는 원리 (Web과 비교) iOS는 내부적으로 아주 복잡한 메커니즘이 있지만, 실제로 잘 알지 못해도 쉽게 구현 가능하도록 설계되어 있다. 내부적인 매커니즘(앱의 생명주기, 뷰컨트롤러의 생명주기, Drawing Cycle 등)에 의해 완벽하게 통제된다. 웹은 상단부터 아래로, 영역을 나눠 그린다. 화면을 그리는 메커니즘과 내부 동작 매커니즘이 완전 분리된다. 운영체제와 독립적이고, 브라우저의 엔진에 의해 돌아간다 iOS는 오브젝트(대부분 클래스)들을 올려놓고 배치한다. 배치방법에는 프레임 방식과 오토레이아웃 방식 2가지가 있다. 내부 속성/동작들이 이미 내장되어 있다. 하나의 클래스 내에 그리는 매커니즘과 동작에 대한 매커니즘이 공존한다. 그래서 클래스와 객체지향 개념에서 출발할 수 밖에 없다. 앱을 만드는 것은 운영체제와 밀접한.. 2023. 8. 2.
Swift의 self vs Self 이해하기 Swift에서의 self와 Self의 차이 이해하기! self self는 인스턴스를 가리킴 인스턴스 내부에서 인스턴스의 속성을 더 명확하게 가리키기 위해 사용 self.name = name 값 타입에서 인스턴스 자체의 값을 치환할 때 사용 가능 self = Calculator() | 단, 클래스에서는 사용 불가 타입속성/메서드에서 사용하면, 타입 자체를 가리킴 static func sample() { print("\(self.name)") } 타입 인스턴스를 가리킬 때, 타입 자체의 뒤에 붙여서 사용 let a: MyClass.Type = MyClass.self Self Self는 타입을 가리킴 특정 타입 내부에서 타입을 선언하는 위치에 사용 extension Int { static let zero: S.. 2023. 8. 2.
Swift 중첩 타입 (Nested Types) 중첩 타입 타입 내부에 타입을 선언하는 것 사용하는 이유 특정 타입 내에서만 사용 (하위 타입은 상위 타입과 관계가 있어, 상위 타입 없이는 의미가 없는 경우 범위를 명확히 한정지음) 타입 간의 연관성을 명확히 구분하고, 내부 구조를 디테일하게 설계할 수 있음 사용 시에는 중첩타입 전체를 쓰거나 타입이 명확히 정의되어 있는 경우 타입추론이 가능해 줄여서 사용 가능함 class AClass { struct BStruct { enum CEnum { case aCase case bCase struct DStruct { } } var name: CEnum } } let aClass:AClass = AClass() let bStruct:AClass.BStruct = AClass.BStruct(name: .bCas.. 2023. 8. 2.
Swift Method Dispatch 클래스와 프로토콜의 메서드가 실행되는 방식에 대한 이해 스위프트가 함수를 실행시키는 방법 컴파일 타임 : 소스코드가 기계어코드로 변환되는 시점 Direct Dispatch | Static Dispatch 컴파일 시점에 코드 자체에 함수의 메모리 주소 삽입 또는 함수의 명령 코드를 해당 위치에 코드를 심음 가장 빠름 (0.0 - 2.13ns) 밸류 타입(구조체/열거형)에 사용 상속과 다형성의 장점을 누릴 수 없음 런타임 : 사용자에 의해 앱이 실행되는 시점 Table Dispatch | Dynamic Dispatch 함수의 포인터를 배열 형태로 보관 후 실행 중간 (3.23ns) 클래스, 프로토콜 테이블에서 사용 Witness Table : 프로토콜 테이블 Virtual Table : 클래스 테이블 Mes.. 2023. 8. 1.
Swift 프로토콜(Protocols) 클래스와 상속의 단점 하나의 클래스만 상속이 가능함. 즉, 다중 상속 불가능 기본적인 상위클래스의 메모리 구조를 따라갈 수 밖에 없음 (필요하지 않은 속성과 메서드도 상속됨) 클래스(레퍼런스 타입)에서만 가능 프로토콜 위 클래스에만 가능한 상속의 여러 문제를 해결하기 위해 나온 문법 실생활에서는 자격증의 개념으로 이해하면 쉬움 구체적인 구현을 하지 않음, 요구사항을 정의함. 구체적인 구현은 프로토콜을 채택한 곳에서 구현 class에서는 상속도 프로토콜도 채택하고 싶은 경우 상속하고자 하는 상위클래스를 먼저쓰고 프로토콜을 적으면 됨 상속과 달리 프로토콜은 다중 채택이 가능함으로 ,로 구분해 적으면 됨 protocol CanFly { func fly() } struct Bird: CanFly { func f.. 2023. 8. 1.