소피it블로그

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

개발_iOS/스위프트

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

sophie_l 2022. 3. 28. 23:43

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

 

Day 10 – 100 Days of Swift

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

www.hackingwithswift.com

1. 클래스의 경우 구조체 다르게 memberwise initializer이 없어서, 프라퍼티에 디폴트 값이 설정되어 있지 않은 경우 이니셜라이저를 직접 만들어줘야 함

 

2. 클래스는 구조체와 다르게 상속이 가능하다.

class childClass: parentClass { }

// 안에서 부모 클래스의 이니셜라이저를 언급할 경우 super.init()으로 써줘야 함

3. 자식클래스는 부모클래스의 메서드를 overriding할 수 있다.

override func funcName() { }

4. 다른 클래스에서 상속하지 않기를 원하는 경우 final 키워드를 사용해줌

final class className { }

5. 구조체의 경우, 인스턴스를 카피하면 두 개가 서로 별개의 인스턴스로 취급되어 하나를 변경해도 다른 것에 영향이 없다. 반면 클래스의 경우, 인스턴스를 카피하면 두 인스턴스가 같은 것을 "가리키게" 되어 하나를 바꾸면 나머지 하나도 동일하게 바뀐다.

 

6. deinitializer: 클래스가 destroy될 때 작동하는 코드

deinit { }

// 주의 () 안 씀

7. 클래스는 구조체와 다르게 mutating 키워드를 쓰지 않는다. 구조체에서는 구조체 그 자체가 상수면 그 안의 프라퍼티가 변수여도 바꿀 수 없었다. 반면 클래스의 경우, 클래스가 상수로 선언되었다 해도 그 안의 프라퍼티는 변수가 될 수 있다. 즉, 값이 바뀔 수 있다. 그게 싫다면 프라퍼티를 상수로 선언해야 함.