1월 16일 (화)
🔥학습 내용
접근제어(Access Control)
- 코드끼리 상호작용을 할 때 파일 간 또는 모듈 간에 접근을 제한할 수 있는 기능이다.
- 코드의 상세 구현은 숨기고 허용된 기능만 사용하는 인터페이스를 제공할 수 있다.
#. 파일: 하나의 스위프트 소스 코드 파일
#. 모듈: 배포할 코드의 묶음 단위
1. 접근제어가 왜 필요한 가? 🤔
- 접근제어가 필요한 이유는 "객체지향 프로그래밍 패러다임"과 연관이 있다고 볼 수 있다.
- 캡슐화와 은닉화를 구현하는 이유는 외부에서 보거나 접근하면 안되는 코드가 있기 때문이다.
- 불필요한 접근으로 의도치 않은 결과를 초래할 수 있기 때문에 캡슐화와 은닉화를 사용한다.
2. 접근수준(Access Level)
- 각 타입(클래스, 구조체, 열거형 등), 타입 내부의 프로퍼티, 메서드, 이니셜라이저, 서브스크립트 각각에도 접근수준을 지정할 수 있다.
- 종류는 open, public, internal, fileprivate, private 다섯가지가 있다.
open class SomeOpenClass {}
public class SomePublicClass {}
internal class SomeInternalClass {}
fileprivate class SomeFilePrivateClass {}
private class SomePrivateClass {}
open var someOpenVariable = 0
public var somePublicVariable = 0
internal let someInternalConstant = 0
fileprivate func someFilePrivateFunction() {}
private func somePrivateFunction() {}
1️⃣ public - 공개 접근수준
- 주로 프레임워크에서 외부와 연결된 인터페이스를 구현할 때 많이 사용한다.
2️⃣ open - 개방 접근수준
- 클래스를 open으로 명시하는 것은 해당 클래스를 다른 모듈에서도 부모클래스로 사용하겠다는 목적으로 클래스를 설계하고 코드를 작성했음을 의미한다.
3️⃣ internal - 내부 접근수준
- 기본적으로 모든 요소에 암묵적으로 지정하는 기본 접근수준이다.
- 소스파일이 속해 있는 모율 어디에서든 사용할 수 있다.
4️⃣ fileprivate - 파일외부비공개 접근수준
5️⃣ private - 비공개 접근수준
- 가장 한정적인 범위의 접근수준이다.
- private으로 지정된 요소는 그 기능을 정의하고 구현한 범위 내에서만 사용할 수 있다.
- private으로 지정한 기능은 같은 소스파일 안에 구현한 다른 타입이나 기능에서도 사용할 수 없다.
#. 참고 URL
- The Swift Programming Language(5.9.2) - Access Control