티스토리 뷰

Swift/야곰의 스위프트

12장 접근제어

할루루 2018. 2. 5. 15:14

[시작]


- 객체 지향 프로그래밍 패러다임의 '은닉화'와 관련됨



[접근제어]


- 파일 간 / 모듈 간 접근을 제한

- 코드의 상세 구현은 숨기고 허용된 기능만 사용하는 인터페이스를 제공함


- 모듈 : 배포할 코드의 묶음 단위

 : 하나의 프레임워크나 라이브러리 또는 애플리케이션

 : import 키워드를 사용해 불러오는 것

- 소스파일 : 하나의 Swift 소스 코드 파일



[접근수준]


- 각 타입(클래스, 구조체, 열거형 등)에 특정 접근수준을 지정할 수 있음

- 타입 내부의 프로퍼티, 메서드, 생성자, 서브스크립트 각각에 접근수준을 지정할 수 있음

- open / public / internal / fileprivate / private


1. public : 공개 접근 수준

 : 어디서든 쓰일 수 있음

 : 주로 프레임워크에서 외부와 연결될 인터페이스를 구현하는 데 사용됨


2. open : 개방 접근 수준

 : public 이상으로 높은 접근수준

  - 다른 모듈에서 해당 클래스를 상속하여 사용할 수 있음

  - 다른 모듈에서 해당 클래스 멤버를 재정의하여 사용할 수 있음

 : 클래스와 클래스의 멤버에서만 사용 가능


3. internal : 내부 접근수준

 : 기본 접근수준

 : 소스파일이 속해 있는 모듈 어디서든 쓰일 수 있음


4. fileprivate : 파일외부비공개 접근수준

 : 해당 요소가 구현된 소스파일 내부에서만 사용 가능


5. private : 비공개 접근수준

 : 해당 기능을 정의하고 구현한 범위 내에서만 사용 가능



[접근제어 구현 참고사항]


- 상위 요소보다 하위 요소가 더 높은 접근수준을 가질 수 없음

- 같은 타입의 익스텐션에서는 private 요소에 접근 가능

- 프로퍼티에서 set 메서드의 접근수준을 낮추어 읽기 전용 프로퍼티를 구현할 수 있음

- 요소의 접근수준 키워드 뒤에 [접근수준](set) 과 같이 표현함

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public struct SomeType{
    private var count: Int = 0
    public var publicStoredProperty: Int = 0
    public private(set) var publicGetOnlyStoredPropety: Int = 0
    internal var internalComputedProperty: Int{
        get{
            return count
        }
        set{
            count += 1
        }
    }
    internal private(set) var internalGetOnlyComputedProperty: Int{
        get{
            return count
        }
        set{
            count += 1
        }
    }
    public subscript()-> Int{
        get{
            return count
        }
        set{
            count += 1
        }
    }
    public internal(set) subscript(some: Int-> Int{
        get{
            return count
        }
        set{
            count += 1
        }
    }
}
cs


'Swift > 야곰의 스위프트' 카테고리의 다른 글

14장 옵셔널 체이닝과 빠른 종료  (0) 2018.02.12
13장 클로저  (0) 2018.02.12
11장 인스턴스 생성 및 소멸  (0) 2018.02.05
10장 프로퍼티와 메서드  (0) 2018.02.03
9장 구조체와 클래스  (0) 2018.02.03
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함