CHAPTER 12 접근제어
__12.1 접근제어란
접근제어를 통해 코드의 상세 구현은 숨기고 허용된 기능만 사용하는 인터페이스를 제공
12.1.2 모듈과 소스파일
모듈
모듈은 배포할 코드의 묶음 단위
하나의 프레임워크나 라이브러리 또는 애플리케이션이 모듈 단뒤
import 키워드를 사용
소스파일
소스파일 하나에 여러 타입(여러 개의 클래스나 구조체, 열거형 등)이나 함수 등 많은 것을 정의하거나 구현할 수도 있습니다.
__12.2 접근수준
각 타입(클래스, 구조체, 열거형 등)에 특정 접근수준을 지정
타입 내부의 프로퍼티, 메서드, 이니셜라이저, 서브스크립트 각각에도 접근수준을 지정
…
12.2.1 공개 접근수준, public
자신이 구현된 소스파일은 물론, 그 소스파일이 속해 있는 모듈, 그 모듈을 가져다 쓰는 모듈 등 모든 곳에서 사용
프레임워크에서 외부와 연결될 인터페이스를 구현하는데 많이 쓰입니다.
12.2.2 개방 접근수준, open
클래스와 클래스의 멤버에서만 사용
public 과의 차이점
개방 접근수준을 제외한 다른 모든 접근수준의 클래스는 그 클래스가 정의된 모듈 안에서만 상속할 수 있습니다.
개방 접근수준을 제외한 다른 모든 접근수준의 클래스 멤버는 해당 멤버가 정의된 모듈 안에서만 재정의할 수 있습니다.
개방 접근수준의 클래스는 그 클래스가 정의된 모듈 밖의 다른 모듈에서도 상속할 수 있습니다.
개방 접근수준의 클래스 멤버는 해당 멤버가 정의된 모듈 밖의 다른 모듈에서도 재정의할 수 있습니다.
클래스를 개방 접근수준으로 명시하는 것은 그 클래스를 다른 모듈에서도 부모클래스로 사용하겠다는 목적으로 클래스를 설계하고 코드를 작성했음을 의미
12.2.3 내부 접근수준, internal
기본적으로 모든 요소에 암묵적으로 지정하는 기본 접근수준
소스파일이 속해 있는 모듈 어디에서든 쓰일 수 있습니다
외부에서 사용할 클래스나 구조체가 아니며, 모듈 내부에서 광역적으로 사용할 경우
12.2.4 파일외부비공개 접근수준, fileprivate
그 요소가 구현된 소스파일 내부에서만 사용
해당 소스파일 외부에서 값이 변경되거나 함수를 호출하면 부작용이 생길 수 있는 경우
12.2.5 비공개 접근수준, private
그 기능을 정의하고 구현한 범위 내에서만 사용
__12.3 접근제어 구현
__12.4 접근제어 구현 참고사항
‘상위 요소보다 하위 요소가 더 높은 접근수준을 가질 수 없다’
함수의 매개변수로 특정 접근수준이 부여된 타입이 전달되거나 반환된다면, 그 타입의 접근수준보다 함수의 접근수준이 높게 설정될 수 없습니다.
프레임워크를 만들 때는 다른 모듈에서 특정 기능에 접근할 수 있도록 API로 사용할 기능을 공개 접근수준(public)으로 지정해주어야 합니다.
열거형 내부의 각 case별로 따로 접근수준을 부여할 수는 없습니다.
열거형의 원시 값 타입으로 열거형의 접근수준보다 낮은 접근수준의 타입이 올 수는 없습니다.
__12.5 private와 fileprivate
같은 타입의 익스텐션에서는 private 요소에 접근 가능
자신을 확장하는 익스텐션 코드가 같은 파일에 존재하는 경우에는 접근할 수 있습니다.
__12.6 읽기 전용 구현
값을 변경할 수 없도록 구현하고 싶다면 어떻게 해야 할까
“접근수준” (set) 처럼 표현하면 설정자의 접근수준만 더 낮도록 지정해줄 수 있습니다.
참고
야곰의 스위프트 프로그래밍 https://book.naver.com/bookdb/book_detail.nhn?bid=12571019
댓글