접근 제한자(Access Level)
Access Levels
private | fileprivate | internal | public | open | |
---|---|---|---|---|---|
같은 클래스 | ✓ | ✓ | ✓ | ✓ | ✓ |
같은 파일 | ✓ | ✓ | ✓ | ✓ | |
같은 모듈, 프로젝트 | ✓ | ✓ | ✓ | ||
모듈 외부 | ✓ | ✓ | |||
모듈 외부 & 수정 가능 | ✓ |
여기서 모듈
이란❓
코드 상단에서 반입 선언하여 사용하는 라이브러리 중에서
UIKit, MapKit, UserNotification 등 프레임워크
단위를 이야기합니다
private은 비공개API인 경우이고
public은 공개API인 경우이다
- private: {}
- fileprivate
ViewController.swift
- internal
기본값
파란색 아이콘 하나
- public
모듈 여러개
AppModule과 PodModule 모두에서 사용할 수 있다
Pod의 경우 다른 개발자들도 추가해서 사용해야하므로 public으로 되어있는 것을 확인할 수 있다
subclass와 override 불허 - open
subclass와 override 허용
실습
global & local varible + access level
여기에서 global변수는
aPrivateProperty, aFilePrivateProperty, anInternalProperty
main.swift
import Foundation
let aClass = AClass()
aClass.methodA()
aClass.methodB()
print(aClass.anInternalProperty) // Possible
AFile.swift
import Foundation
class AClass {
//Global variables, also called class properties.
//같은 클래스
private var aPrivateProperty = "private property"
//같은 파일
fileprivate var aFilePrivateProperty = "fileprivate property"
var anInternalProperty = "internal property"
func methodA () {
var aLocalVariable = "local variable"
//Step 1. Try to print aLocalVariable Here - Possible
print("\(aLocalVariable) printed from methodA in AClass")
//Step 3. Try to print aPrivateProperty Here - Possible
print("\(aPrivateProperty) printed from methodA in AClass")
//Step 6. Try to print aFilePrivateProperty Here - Possible
print("\(aFilePrivateProperty) printed from methodA in AClass")
//Step 9. Try to print anInternalProperty Here - Possible
print("\(anInternalProperty) printed from methodA in AClass")
}
func methodB () {
//Step 2. Try to print aLocalVariable Here - Impossible
//print("\(aLocalVariable) printed from methodB in AClass")
//Step 4. Try to print aPrivateProperty Here - Possible
print("\(aPrivateProperty) printed from methodB in AClass")
print("\(aFilePrivateProperty) printed from methodB in AClass") // Possible
print("\(anInternalProperty) printed from methodB in AClass") // Possible
}
}
class AnotherClassInTheSameFile {
init() {
//Step 5. Try to print aPrivateProperty Here - Impossible
//print(aClass.aPrivateProperty)
//Step 7. Try to print aFilePrivateProperty Here - Possible
print(aClass.aFilePrivateProperty)
}
}
AnotherFile.swift
import Foundation
class AnotherClassInAnotherFile {
init() {
//Step 8. Try to print aFilePrivateProperty Here - Impossible
//print(aClass.aFilePrivateProperty)
//Step 10. Try to print anInternalProperty Here - Possible
print(aClass.anInternalProperty)
}
}
Author And Source
이 문제에 관하여(접근 제한자(Access Level)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@msi753/접근-제한자-access-level저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)