오늘은 Swift 문법 심화 강의를 보았다.
확실히 심화과정이라 그런지 어려웠다.
프로퍼티를 관찰하여 특정 프로퍼티의 값 변경 전, 후에 추가동작을 수행할 수 있게 해준다.
변수에 프로퍼티 옵저버를 정의하여 프로퍼티 값의 변경 사항을 모니터링하고, 미리 구현한 코드로 이에 대응할 수 있다.
해당 프퍼티를 관찰(observe)하면서 변경 사항이 발생할 때 실행된다.
willSet 과 didSet이 있는데, didSet이 더 많이 사용된다.
willSet 과 didSet을 둘 다 작성했을 경우 willSet이 먼저 실행 된다.
추가 할 수 있는경우
a. 저장 프로퍼티
b. 연산 프로퍼티
타입 캐스팅은 인스턴스의 "타입"을 확인 하거나, 해당 인스턴스를 슈퍼 클래스(부모 클래스)나 하위 클래스(자식 클래스)로 취급하는 방법이다.
접근 제한자는 다른 소스파일이나 모듈의 코드 일부에 대한 접근을 제한한다.
[제약이 적음] < open < public < internal < fileprivate < private <[제약이 많음]
-open: 모든 소스파일에서 해당 level 접근 가능 + 모든 곳에서 서브클래싱(상속) 가능
-public: 모든 소스파일에서 해당 level 접근 가능 + 같은 모듈 내에서만 서브클래싱(상속) 가능
-internal: 같은 모듈 내에서만 접근 가능
-fileprivate: 같은 소스 파일 내에서만 접근 가능
-private: 클래스 내부에서만 접근 가능
접근 제한자를 사용하지 않으면 internal로 판단 합니다.
상위 요소보다 하위요소가 더 높은 접근수준을 가질 수 없습니다.
모듈
- 배포할 코드의 한 묶음 단위 입니다.
- 하나의 프레임워크/라이브러리/어플리케이션이 모듈 단위가 될 수 있습니다.
- import 키워드를 통해 불러올 수 있습니다.
소스파일
- 하나의 Swift 소스코드 파일을 의미합니다.
open , public
- 둘 다 모듈 외부까지 접근할 수 있습니다.
- open은 클래스와 클래스 맴버에서만 사용할 수 있고 다른 모듈에서는 서브클래싱이 가능하지만, publicdms 그렇지 않습니다.
- open으로 클래스를 개방 접근 수준으로 명시하는것은 그 클래스를 다른 모듈에서도 슈퍼클래스로 사용하겠다는 의미로 해당 클래스를 설계하고 만들었다는 것을 의미 합니다. (다른 모듈에서 상속을 허용함)
- public 은 주로 프레임워크에서 외부와 연결될 인터페이스를 구현하는데 많이 사용합니다.
internal
- 모든 요소에 암묵적으로 지정하는 디폴트 접근제어자 입니다.
- 소스파일에 속해있는 모듈 어디에든 접근할 수 있지만 외부 모듈에서는 접근할 수 없습니다.
fileprivate
- 소스파일 내부에서만 접근할 수 있습니다.
- 서로 다른 클래스가 같은 하나의 소스파일에 정의되어 있고 fileprivate로 선언되어 있다면 두 클래스는 접근할 수 있습니다.
private
- 가장 제한적인 접근제어자 입니다.
- fileprivate 와 달리 같은 파일안에 있어도 서로 다른 클래스이고 private로 선언되어 있다면 두 요소는 서로 접근할 수 없습니다.