오늘은 Swift 문법 심화 강의를 보았다.
확실히 심화과정이라 그런지 어려웠다.

1. 프로퍼티 옵저버

프로퍼티를 관찰하여 특정 프로퍼티의 값 변경 전, 후에 추가동작을 수행할 수 있게 해준다.

  • 변수에 프로퍼티 옵저버를 정의하여 프로퍼티 값의 변경 사항을 모니터링하고, 미리 구현한 코드로 이에 대응할 수 있다.

  • 해당 프퍼티를 관찰(observe)하면서 변경 사항이 발생할 때 실행된다.

  • willSet 과 didSet이 있는데, didSet이 더 많이 사용된다.

  • willSet 과 didSet을 둘 다 작성했을 경우 willSet이 먼저 실행 된다.

  • 추가 할 수 있는경우
    a. 저장 프로퍼티
    b. 연산 프로퍼티

willSet

  • willSet은 값이 저장되기 직전에 호출된다.
  • 새로운 프로퍼티의 값이 newValue로 제공된다.

didSet

  • didSet은 새 값이 저장된 직후에 호출된다.
  • 이전 프로퍼티의 값이 oldValue로 제공된다.

타입 캐스팅

타입 캐스팅은 인스턴스의 "타입"을 확인 하거나, 해당 인스턴스를 슈퍼 클래스(부모 클래스)나 하위 클래스(자식 클래스)로 취급하는 방법이다.

is

  • is 연산자는 타입을 체크하는 연산자로, 비교결과를 Bool 타입으로 반환한다. (타입 체킹)

as, as?, as!

  • as 연산자는 해당 인스턴스를 슈퍼클래스(부모 클래스)나 하위클래스(자식 클래스)로 취급하는 방법이다.

접근제한자

  • 접근 제한자는 다른 소스파일이나 모듈의 코드 일부에 대한 접근을 제한한다.

  • [제약이 적음] < 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로 선언되어 있다면 두 요소는 서로 접근할 수 없습니다.
profile
유민우

0개의 댓글