포스트

문법 (15) 접근 제어 (private, fileprivate, internal, public, open)

Swift에서 접근 제어 (private, fileprivate, internal, public, open)의 개념과 활용법을 설명합니다.

문법 (15) 접근 제어 (private, fileprivate, internal, public, open)

접근 제어 (private, fileprivate, internal, public, open)

Swift에서는 접근 제어(Access Control) 를 통해 코드의 가시성을 제어할 수 있습니다.
이를 활용하면 캡슐화(Encapsulation) 를 강화하고, 코드의 안전성을 높일 수 있습니다.

1. 접근 제어자 개요

접근 제어자설명
private같은 파일 내에서도 해당 클래스/구조체 내부에서만 접근 가능
fileprivate같은 파일 내에서만 접근 가능
internal같은 모듈 내에서 접근 가능 (기본값)
public외부 모듈에서도 접근 가능 (상속 가능, 오버라이딩 제한)
open외부 모듈에서도 접근 가능 (상속 가능, 오버라이딩 가능)

2. private 예제

1
2
3
4
5
6
7
8
9
10
11
class User {
    private var password: String = "1234"

    func checkPassword(input: String) -> Bool {
        return input == password
    }
}

let user = User()
// print(user.password) // 오류 발생 (private 접근 불가)
print(user.checkPassword(input: "1234")) // true
  • password 프로퍼티는 클래스 내부에서만 접근 가능

3. fileprivate 예제

1
2
3
4
5
6
7
8
class Logger {
    fileprivate func logMessage(_ message: String) {
        print("LOG: \(message)")
    }
}

let logger = Logger()
logger.logMessage("파일 내에서 호출 가능") // 정상 동작
  • 같은 파일 내에서는 fileprivate 메서드에 접근 가능

4. internal 예제

1
2
3
4
5
6
struct Profile {
    internal var nickname = "SwiftDev"
}

let profile = Profile()
print(profile.nickname) // 같은 모듈 내에서는 접근 가능
  • internal은 기본 접근 수준이며, 같은 모듈 내에서 접근 가능

5. public vs open 차이점

1
2
3
4
5
6
7
public class PublicClass {
    public var name = "Public Name"
}

open class OpenClass {
    open var name = "Open Name"
}
  • public 클래스는 외부에서 접근 가능하지만, 상속 후 오버라이딩 제한
  • open 클래스는 외부에서 상속 및 오버라이딩 가능

6. 접근 제어자를 활용한 코드 보호

  • 외부에서 접근할 필요 없는 속성은 private 사용
  • 같은 파일에서만 접근할 경우 fileprivate 고려
  • 기본적으로 internal을 유지하고 필요할 때 public을 사용
  • 라이브러리를 설계할 때 publicopen을 적절히 활용

접근 제어를 활용하면 코드의 보안성을 높이고, 예기치 않은 변경을 방지할 수 있습니다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.