소피it블로그

[Swift] 100 Days of Swift - Day 15 정리 본문

개발_iOS/스위프트

[Swift] 100 Days of Swift - Day 15 정리

sophie_l 2022. 4. 2. 17:26

https://www.hackingwithswift.com/100/15

 

Day 15 – 100 Days of Swift

Follow the 100 Days of Swift and learn to build apps for free.

www.hackingwithswift.com

1. 프라퍼티 옵저버: 구조체와 클래스는 자기만의 변수와 상수를 가질 수 있는데, 이를 프라퍼티라고 한다. 프라퍼티 옵저버는 프라퍼티의 값이 바뀌기 전이나 바뀐 직후에 실행되는 코드로, willSet과 didSet이 있음.

 

2. computed property: 만들려면 프라퍼티 뒤에 중괄호를 열고 적절한 시간에 적절한 액션을 취하게 해줄 get이나 set을 써준다.

 

3. Static property: 스위프트에서는 타입의 인스턴스가 아닌 타입 자체에 속하는 프라퍼티와 메서드를 만들어줄 수 있는데, 이 중 타입 자체에 속하는 프라퍼티를 static property라고 한다. 여러 인스턴스들 간에 공통되는/공유되는 데이터를 저장하기에 유용하다. static 키워드를 사용하여 생성한다.

 

4. 액세스 컨트롤: 구조체와 클래스 안의 데이터 중 어떤 것이 노출되어도 좋은지 결정하는 것. 단계에 따라 public, internal, fileprivate, private가 있다.

 

5. polymorphism: 부모 클래스와 자식 클래스의 관계에서, 자식 클래스의 모든 인스턴스는 부모 클래스를 상속하기 때문에 부모 클래스, 자식 클래스 둘 다로 여겨질 수 있다. 부모 클래스의 인스턴스들을 묶은 배열 내부에 자식 클래스의 인스턴스도 속할 수 있음. 

 

6. 타입캐스팅: 한 타입의 객체를 다른 타입으로 변환시키는 것. 진짜 변환하는 것은 아니고 스위프트가 해당 객체를 어떻게 다루는지를 변환하는 것이라고 보면 됨. 스위프트에게 "네가 타입 A라고 생각한 객체가 실은 타입 E야"라고 말해주는 것. 종류는 as? as! 두 가지가 있고, ?와 !의 의미는 옵셔널에서와 비슷하다.

 

      (1) as? (optional downcasting): "이 변환이 true일 수도 있지만 실패할 수도 있겠다" 싶을 때 사용. 옵셔널 반환값을 자동으로 언래핑해주기 위해 if let과 함께 써준다.

 

      (2) as! (forced downcasting): "이 변환은 무조건 맞고, 만약 내가 틀렸으면 앱이 crash해도 된다" 싶을 때 사용. 옵셔널 값을 리턴하지 않는다.

 

7. 클로저: 클로저는 코드를 포함하는 변수라고 생각해도 된다. int가 0이나 500을 홀드한다면, 클로저는 스위프트 코드 라인을 홀드하는 셈. 클로저는 또한 자신이 생성된 환경을 capture할 수 있는데, 이는 자신 안에서 사용된 값들의 복사값을 갖는다는 것이다. 이게 정확히 어떤 의미인지는 사실 아직 모르겠음.