애플 스위프트 언어 개발 가이드를 기반으로 초기화 관련된 내용을 정리했습니다. 초기화가 복잡합니다. 크게 복잡하지 않을 수도 있는 내용이지만 언어마다 조금씩 다른 부분을 잘 정리했습니다.
http://cafe.naver.com/architect1 에서 스터디 진행중입니다.
기본적인 뼈대는 http://swift.leantra.kr/ 를 기반으로 합니다.
12. public class SomePublicClass {}
internal class SomeInternalClass {}
private class SomePrivateClass {}
public var somePublicVariable = 0
internal let someInternalConstant = 0
private func somePrivateFunction() {}
접근 제한 문법
13. 가장 낮은 수준의 접근 수준에 따라서 튜플의 접근 수준이 정해진다
커스텀 타입 - 튜플
14. 함수의 입력 파라메터와 반환 값 중 가장 접근 수준이 낮은 접근 수준을
따른다.
커스텀 타입 - 함수
16. 중첩 타입은 private 타입안에서는 자동으로 private을 받고,
public이나 internal은 자동으로 internal을 받는다.
만약, public 타입에서 중첩해서 public으로 쓰려면 반드시 명시적으로
public으로 선언해줘야 한다.
커스텀 타입 - 중첩
17. 서브 클래싱한 클래스는 부모보다 더 높은 접근수준을 가질 수 없다.
그 접근 수준에서 볼 수 있는 모든 클래스 멤버를 오버라이딩 할 수 있다
.
서브 클래싱
18. public class A {
private func someMethod() {}
}
internal class B: A {
override internal func someMethod() {
super.someMethod()
}
}
서브 클래싱
19. Getters and Setters
상수, 변수, 속성, 서브스크립트는 자동으로 속해 있는 곳의 접근 수준을 갖는다.
Setters Getters는 각각 다른 접근 수준을 갖도록 할 수 있다.
상수 변수 속성 서브스크립트
21. memberwise 초기자의 접근 수준은 구조체의 속성에 private이 있으면 private이고, 아니면 internal이
다.
그리고, public 타입의 구조체가 다른 모듈에서 memberwise 초기화하길 바란다면, public memberwise
초기자를 정의해야 한다.
memberwise 초기자
22. 프로토콜 내부에 있는 요구사항들은 모두 같은 접근 수준을 갖는다. 다르게 설정 할 수 없다.
상속 할 때는 가장 낮은 접근 수준을 상속 한다.
프로토콜은 상속 받더라도, 자신의 접근 수준을 유지 한다.
예를 들어서 public class가 internal protocol을 상속하면 internal protocol에 해당하는 요구사항
들은
internal로 유지한다.
프로토콜
23. 클래스, 구조체, 열거형 모두 확장 할 수 있다.
확장에서 추가하는 모든 멤버들은 타입의 기본적인 접근 권한을 따른다. 예를 들어서 public타입을 확장 한
다면, 새로운 멤버들은 internal이다.
그렇지않으면 private extension같은 형태로 추가하는 확장 안에 있는 모든 멤버의 접근 수준을 수정 할
수 있다.
확장
24. 프로토콜의 규칙을 추가 하기 위해서 확장을 사용 한다면 접근 수준을 명시 할 수 없다.
대신 확장 하려는 프로토콜의 기본적인 접근 수준을 가진다.
확장
26. 타입 alias는 alias하려는 타입보다 더 높은 접근 수준을 가질 수 없다.
private 접근 수준의 alias는 private, internal, public 수준의 type을 alias 할 수 있지만,
public 접근 수준의 alias는 public 수준의 type만 alias 할 수 있다.
타입 alias