Search

Access Modifier

접근 제어자는 코드 내 클래스, 구조체, 열거형, 변수, 함수 등의 접근 수준을 결정하는 중요한 기능입니다. 이를 통해 코드의 특정 부분을 외부에서 보거나 수정하지 못하도록 보호할 수 있습니다.

목차

2.

접근 제어자의 필요성

왜 접근 제어자가 필요할까요?
Encapsulation(캡슐화)
코드 안정성 향상
API 설계
객체 지향 프로그래밍의 핵심 원칙 중 하나로, 객체의 내부 상태를 숨기고 필요한 부분만 외부에 공개합니다. 그리고 외부에서 내부 구현에 직접 접근하지 못하게 함으로써 의도치 않은 변경이나 오류를 방지합니다. 또한, 라이브러리나 프레임워크를 설계할 때 사용자에게 필요한 기능만 노출하고 내부 구현은 숨길 수 있습니다.

Swift의 접근 수준 종류

Swift에서는 다섯 가지의 접근 수준을 제공합니다.
open
public
internal
fileprivate
private
각 접근 수준은 코드 요소에 대한 접근 기능 범위를 결정합니다.

open

가장 개방적인 접근 수준입니다.
모듈 외부에서도 접근 및 상속과 오버라이딩이 가능합니다.
주로 프레임워크나 라이브러리에서 클래스를 공개하고 사용자가 이를 상속하거나 메서드를 재정의할 수도 있도록 할 때 사용합니다.
Overriding이란, 상속된 클래스가 부모 클래스에서 정의된 메서드나 속성을 재정의하는 것을 의미합니다. 즉, 부모 클래스에서 제공하는 기본 동작을 자식 클래스에서 필요한 방식으로 변경하거나 확장할 수 있는 기능입니다.

public

모듈 외부에서 접근은 가능하지만 상속이나 오버라이딩은 불가능합니다.
클래스나 메서드를 공개하되 사용자가 이를 확장하지 못하도록 할 때 사용합니다.

internal

접근 수준을 별도로 지정하지 않으면 기본적으로 internal로 설정됩니다.
모듈 내부에서만 접근 가능합니다.
모듈은 프레임워크나 앱의 단일 배포 단위를 의미합니다.

fileprivate

같은 파일 내에서만 접근 가능합니다.
파일 단위로 코드를 묶어 관리할 때 유용합니다.

private

선언된 범위 내에서만 접근 가능합니다.
가장 제한적인 접근 수준으로, 해당 속성이나 메서드를 해당 선언 내부에서만 사용할 수 있습니다.

접근 제어자의 적용 방법

public class PublicClass { open func openMethod() { ... } public func publicMethod() { ... } internal func internalMethod() { ... } fileprivate func fileprivateMethod() { ... } private func privateMethod() { ... } }
Swift
복사

접근 제어자의 활용 시 주의사항

상위 접근 수준보다 낮은 접근 수준
어떤 코드 요소의 접근 수준은 해당 요소를 포함하는 다른 요소의 접근 수준보다 높을 수 없습니다.
public class PublicClass { private var privateProperty: String // 가능 public var publicProperty: String // 가능 } internal class InternalClass { public var publicProperty: String // 오류 발생 }
Swift
복사
프로토콜의 접근 수준은 해당 프로토콜을 채택하는 타입의 접근 수준과 같거나 낮아야 합니다.
public protocol SomeProtocol { func doSomething() } internal class SomeClass: SomeProtocol { // 오류 발생 func doSomething() { ... } }
Swift
복사