캡슐화와 은닉화 → 불필요한 접근으로 의도치 않은 결과를 초래 하거나 꼭 필요한 부분만 제공해야하는데 전체 코드가 노출될 가능성이 있을 때 접근제어를 이용
모듈
- 배포할 코드의 묶음 단위
- → 현재 프로젝트 하나 단위
- 하나의 프레임워크(Framework)나 라이브러리(Library) 또는 애플리케이션(Application)
- import로 부른다
- open : 클래스를 개방 접근수준으로 명시하는 것은 그 클래스를 다른 모듈에서도 부모클래스로 사용 하겠다는 목적으로 클래스를 설계하고 코드를 작성했음을 의미합니다.→ 클래스를 상속받거나 재정의 할 수 없도록 막고싶다면 public 로 정의
- → 라이브러리 사용자(프로그래머)가 상속받아 사용하면 좋겠다거나 상속 후 재정의하여 사용하면 좋겠다는 생각을 한다면 open 으로 정의
open class NSString : NSObject, NSCopying, NSMutableCopying, NSSecureCoding {
open var length: Int { get }
open func character(at index: Int) -> unichar
public init()
public init?(coder aDecoder: NSCoder)
}
- public : 주로 프레임워크에서 외부와 연결될 인터페이스를 구현하는데 많이 쓰입니다
// A value type whose instances are either 'true' or 'false'.
public struct Bool {
// Default-initialize Boolean value to 'false'.
public init()
}
- internal이 기본값!! → 내부 접근수준
- fileprivate : .swift 단위/ 기존 private을 붙여서 접근 불가능했던 것이 파일단위내에선 접근 가능해짐
- private
- 기능을 정의하고 구현한 범위 내에서만 사용.
- 같은 소스파일 안에 구현한 다른 타입이나 기능에서도 사용할 수 없다.
- 그러나 자신을 확장하는 익스텐션(extension) 코드가 같은 파일에 존재하는 경우에는 접근할 수 있습니다.
public struct SomeType { private var privateVariable = 0 fileprivate var fileprivateVariable = 0 } // 같은 타입의 익스텐션에서는 private 요소에 접근 가능 extension SomeType { public func publicMethod() { print("\\(self.privateVariable), \\(self.fileprivateVariable)") } private func privateMethod() { print("\\(self.privateVariable), \\(self.fileprivateVariable)") } fileprivate func fileprivateMethod() { print("\\(self.privateVariable), \\(self.fileprivateVariable)") } }
→ ‘상위 요소보다 하위 요소가 더 높은 접근수준을 가 질 수 없다’
privat(set)
- 설정자(Setter)만 더 낮은 접근수준을 갖도록 제한할 수 있습니다. 요소의 접근수준 키워드 뒤에 {접근수준}(set)처럼 표현하면 설정자의 접근수준만 더 낮도록 지정해줄 수 있습니다.
- 프로퍼티, 서브스크립트, 변수 등에 적용
public struct SomeType {
// 비공개 접근수준 저장 프로퍼티 count
private var count: Int = 0
// 공개 접근수준 저장 프로퍼티 publicStoredProperty
public var publicStoredProperty: Int = 0
// 공개 접근수준 저장 프로퍼티 publicGetOnlyStoredProperty
// 설정자는 비공개 접근수준 -> 수정은 타입 안에서, 접근은 모듈외부에서도 가능
public private(set) var publicGetOnlyStoredProperty: Int = 0
// 내부 접근수준 연산 프로퍼티 internalComputedProperty
internal var internalComputedProperty: Int {
get {
return count
}
set {
count += 1
}
}
// 내부 접근수준 저장 프로퍼티 internalGetOnlyComputedProperty
// 설정자는 비공개 접근수준 -> 수정은 타입 안에서만, 밖에서도 접근 가능
internal private(set) var internalGetOnlyComputedProperty: Int {
get {
return count
}
set {
count += 1
}
}
}
728x90
'TIL' 카테고리의 다른 글
UIApplicationDelegate / UISceneDelegate (0) | 2023.11.24 |
---|---|
View 갈아끼우기 (0) | 2023.11.23 |
MVC (0) | 2023.11.10 |
Architecture Pattern (0) | 2023.11.10 |
Optional (0) | 2023.11.07 |