본문은 야곰 아카데미 커리어 스타터 캠프를 통해 학습한 내용을 회고한 글입니다.
접근제어
캡슐화
객체의 속성과 행위(메서드)를 하나로 묶는 것을 의미한다.
은닉화
내부 데이터나 연산을 외부에서 접근하지 못하도록 감추는 것을 말한다. 변수에 접근지정자를 private으로 지정한다. 이를 통해 어떤 효과를 얻을 수 있을까?
접근수준
은닉화의 효과를 알기 위해서는 private가 어떤 효력을 가지는 접근수준인지 알아야할 것이다.
키워드 | 접근수준 | 접근도 | 범위 |
open | 개방 접근수준 | 높음 . . . 낮음 |
모듈 외부까지 |
public | 공개 접근수준 | 모듈 외부까지 | |
internal | 내부 접근수준 | 모듈 내부 | |
fileprivate | 파일 외부 비공개 접근 수준 | 파일 내부 | |
private | 비공개 접근 수준 | 기능 정의 내부 |
open
- 가장 높은 수준의 접근 수준이다.
- 공개 접근수준(public)과 비슷하지만 다음과 같은 차이가 있다.
- 개방 접근수준(open)을 제외한 다른 모든 접근수준의 클래스는 그 클래스가 정의된 모듈 안에서만 상속할 수 있다.
- 개방 접근수준(open)을 제외한 다른 모든 접근수준의 클래스 멤버는 해당 멤버가 정의된 모듈 안에서만 재정의할 수 있다.
- 개방 접근수준(open)의 클래스는 그 클래스가 정의된 모듈 밖의 다른 모듈에서도 상속할 수 있다.
- 개방 접근수준(open)의 클래스는 해당 멤버가 정의된 모듈 밖의 다른 모듈에서도 재정의할 수 있다.
public
- 자신이 구현된 소스파일은 물론, 그 소스파일이 속해 있는 모듈, 그 모듈을 가져다 쓰는 모듈 등 어디서든 그것을 사용할 수 있다.
- 주로 프레임워크에서 외부와 연결될 인터페이스를 구현하는데에 많이 쓰인다.
- swift의 기본 요소들은 모두 공개 접근 수준으로 구현되어있다.
internal
- 기본적으로 모든 요소에 암묵적으로 지정하는 기본 접근 수준이다.
- 내부 접근수준(internal)으로 지정된 요소는 소스파일이 속해있는 모듈 어디든 쓸수 있지만, 그 모듈을 가져다 쓰는 외부 모듈에서는 접근할 수 없다.
- internal 키워드는 생략해도 무관하다.
fileprivate
- 파일 외부 비공개 접근 수준(file private)으로 지정된 요소는 그 요소가 구현된 소스파일 내부에서만 사용할 수 있다.
- 해당 소스파일 외부에서 값이 변경되거나 함수를 호출하면 부작용이 생길 수 있다.
비공개 접근 수준 private
- 가장 제한된 수준의 접근 수준이다.
- private 키워드로 지정된 요소는 그 요소가 구현된 소스파일 내부에서만 사용가능하다.
- 심지어 같은 소스파일 안에 구현한 다른 타입이나 기능에서도 사용이 불가하다.
이를 통해 private을 사용해 은닉화를 한다면, 같은 소스파일 안에 구현한 다른 타입이나 기능에서도 해당 메소드 등을 사용할 수 없게 만든다는 것을 알 수 있다.
참조
http://www.yes24.com/Product/Goods/78907450
스위프트 프로그래밍 - YES24
문법을 넘어 프로그래밍 패러다임도 익히는 스위프트 5스위프트 5의 핵심 키워드는 ‘안정화’다. ABI 안정화 덕분에 버전과 환경에 크게 영향받지 않고 더 유연하게 스위프트를 사용할 수 있게
www.yes24.com
게으름 피우고 욕심부리다가 월요일 TIL(지금 이 게시물)을 야아 캠핑사이트에 못 올렸다..ㅠㅠ 다음엔 좀 더 빨리빨리 써서 올려야지..
'YAGOM CAREER STARTER' 카테고리의 다른 글
[TIL] 20221229: H.I.G, Extension, Enum (0) | 2022.12.29 |
---|---|
[TIL] 20221227: git reset --hard, namespace, Implicitly Assigned Raw Values (0) | 2022.12.28 |
[토요스터디A반] 20221224: Optional, throws-throw, do-catch, try-try?-try!, Result (0) | 2022.12.24 |
[TIL] 20221223: Magic literal/number, Tuple, Recursive Function (0) | 2022.12.24 |
[TIL] 20221222: Optional (0) | 2022.12.22 |