접근 제어자의 종류엔 어떤게 있는지 설명하시오.
Swift iOSInterviewquestions
접근수준
- 접근수준(Acecess Level) 키워드를 통해 구현
- 각 타입(클래스, 구조체, 열거형 등)에 특정 접근수준을 지정할 수 있고, 타입 내부의 프로퍼티, 메서드, 이니셜라이저, 서브스크립트 각각에도 접근수준을 지정할 수 있음
- 상위 요소보다 하위 요소가 더 높은 접근수준을 가질 수 없음
개방 접근수준 - open
public
이상으로 높은 접근수준이며, 클래스와 클래스의 멤버에서만 사용 가능
기본적으로 public
과 비슷하지만 다음과 같은 차이점이 있음
open
을 제외한 다른 모든 접근수준의 클래스는 그 클래스가 정의된 모듈 안에서만 상속할 수 있음open
을 제외한 다른 모든 접근수준의 클래스 멤버는 해당 멤버가 정의된 모듈 안에서만 재정의할 수 있음open
으로 정의한 클래스는 그 클래스가 정의된 모듈 밖의 다른 모듈에서도 상속할 수 있음open
클래스 멤버는 해당 멤버가 정의된 모듈 밖의 다른 모듈에서도 재정의할 수 있음
클래스를 open
으로 명시하는 것은 그 클래스를 다른 모듈에서도 부모클래스로 사용하겠다는 목적으로 클래스를 설계하고 코드를 작성했음을 의미
공개 접근수준 - public
자신이 구현된 소스 파일, 그 소스파일이 속해 있는 모듈, 그 모듈을 가져다 쓰는 모듈 등 모든 곳에서 사용할 수 있음
주로 프레임워크에서 외부와 연결될 인터페이스를 구현하는데 많이 쓰임. 우리가 사용하는 스위프트의 기본 요소는 모두 공개 접근수준으로 구현되어 있음
내부 접근수준 - internal
기본적으로 모든 요소에 암묵적으로 지정하는 기본 접근수준
소스파일이 속해 있는 모듈 어디에서든 사용 가능, 다만 그 모듈을 가져다 쓰는 외부 모듈에서 접근 불가
기본 지정이므로 굳이 표기할 필요 없음
파일외부비공개 접근수준 - fileprivate
구현된 소스파일 내부에서만 사용할 수 있음.
해당 소스파일 외부에서 값이 변경되거나 함수를 호출하면 부작용이 생길 수 있는 경우에 사용하면 좋음
비공개 접근수준 - private
기능을 정의하고 구현한 범위 내에서만 사용할 수 있음
같은 소스파일 안에 구현한 다른 타입이나 기능에서도 사용할 수 없음
읽기 전용 구현
Setter만 더 낮은 접근수준을 갖도록 제한할 수 있음
private(set) var property: Type
접근은 public이지만 설정은 비공개로 할 수 있음
public private(set) var property: Type