🎯 접근제어자
📚 내가 가진 돈은 나만 알고 싶은데 다른 사람에게 알리고 싶지 않아요!
이럴 때 접근제어자를 사용하면 외부에서 접근을 못하도록 막을 수 있습니다.
접근제어자는 외부에서 코드에 대한 접근을 제한하는 기능을 제공합니다.
접근을 제어함으로써, 불필요한 정보의 노출을 막을 수 있습니다.
class, enum, struct 등에서 사용 가능하며, 프로퍼티, 메소드 에 적용할 수 있습니다.
Swift에서 제공하는 접근제어자 종류
1. open
- 모든 외부 모듈에서 접근할 수 있는 접근제어자
- 가장 개방적인 접근 수준
- 유일하게 class에서만 사용 가능
- 상속이 가능하고 재정의 가능하기 때문에!
2. public
- 모든 외부 모듈에서 접근할 수 있는 접근제어자
- 가장 개방적인 접근 수준
3. internal
- 기본값 접근제어자로 설정하지 않았다면 internal
- 동일한 모듈에서 접근 가능
4. fileprivate
- 동일한 파일 내부에서만 접근할 수 있는 접근 제어자
5. private
- 가장 제한적인 접근 제어자
- 해당 요소를 선언한 스코프(예를 들어 class, struct, enum의 코드블록)에서만 사용 가능
- struct에서 private 프로퍼티가 있다면 멤버와이즈 init을 사용할 수 없어서 직접 init을 작성해야 합니다
모듈이란?
- 모듈은 코드 배포의 단일 단위입니다.
- Swift에서는 import를 사용하여 다른 모듈에서 가져올 수 있습니다.
struct Person {
var name: String
public var age: Int
private var havingMoney: Int
init(name: String, age: Int, havingMoney: Int) {
self.name = name
self.age = age
self.havingMoney = havingMoney
}
private func printMoney() {
print("나는 \(havingMoney) 원 있다!")
}
func test() {
printMoney()
}
}
let person = Person(name: "Brody", age: 20, havingMoney: 3000)
✅
person.test() // test 함수는 internal(default) 이여서 호출이 가능합니다.
// test 함수 안에서는 private printMoney 함수에 접근이 가능합니다.
// 출력 값 : 나는 3000 원 있다!0
person.age // public 이기 때문에 접근 가능합니다.
// ❌ 빌드 오류 발생
person.havingMoney // person의 havingMoney는 private 프로퍼티 이기 때문에 접근할 수 없습니다.
// 'havingMoney' is inaccessible due to 'private' protection level
person.printMoney() // person의 printMoney함수는 private 메소드여서 접근할 수 없습니다.
// 'printMoney' is inaccessible due to 'private' protection level
힌트에서도 private 프로퍼티, 메소드는 제공하지 않는다.
실습하기
import UIKit
// 접근제어자 실습하기
class BankAccount {
private var balance: Int = 0
func deposit(money: Int) {
balance += money
}
func withdraw(money: Int) {
if money < balance {
balance -= money
} else {
print("오류가 발생했습니다")
}
}
func getBalance() -> Int {
return balance
}
}
let account = BankAccount()
// print(account.balance) // private 접근제어자 때문에 접근 불가 (출력 불가)
account.deposit(money: 1000)
print(account.getBalance())
account.withdraw(money: 2000)
print(account.getBalance())
private 프로퍼티나 메소드는 클래스 외부에서 접근할 수 없음
'스파르타 코딩 클럽 - iOS 스타터 6기 > 본 캠프' 카테고리의 다른 글
18. 스파르타 코딩 클럽 - 메모리 구조 (1) | 2025.03.18 |
---|---|
17. 스파르타 코딩 클럽 - 프로토콜 (Protocol), 확장 (Extension) (0) | 2025.03.17 |
15. 스파르타 코딩 클럽 - 옵셔널 언래핑 (0) | 2025.03.17 |
14. 스파르타 코딩 클럽 - 옵셔널 (1) | 2025.03.17 |
13. 스파르타 코딩 클럽 - 프로그래밍 기초 주차 과제 Lv3 (0) | 2025.03.14 |