[Swift 기초] - 접근 제어(Access Control)

justdotheg·2023년 11월 19일
0
post-thumbnail

목차
1. 접근 제어(Access Control)란?
2. 접근제어의 종류
2.1. internal
2.2. public, open
2.3. private, fileprivate

1. 접근 제어(Access Control)란?

  • '접근제어(Access Control)'는 코드끼리 상호작용할 때 '모듈' 간, '소스파일' 간에 접근을 제한할 수 있는 기능이다.
  • 스위프트의 접근제어는 '모듈'과 '소스파일' 기반으로 설계되었다.
  • 여기서 말하는 소스파일은 하나의 스위프트 소스 코드 파일을 의미한다.
  • swift에서 말하는 '모듈(module)'은 어떤 걸까?

    '모듈(module)'이란?

    • 하나의 코드 배포 단위이다.
    • 프레임워크, 라이브러리, 어플리케이션이 모두 모듈 단위가 될 수 있다.
    • 프레임워크와 같이 다른 모듈에서 가져다 쓸 때 import 키워드를 쓴다.
    • 반대로 이야기해보면 import 키워드로 추가되는 것은 모두 module이라고 할 수 있다. ex) UIKit, Foundation 등 모두 module이다.
  • 그렇다면 접근제어는 왜 사용할까?
    캡슐화와 연관되어 있다. 꼭 필요한 부분만 외부에 노출하기 위해 사용하는 것이다.

2. 접근제어자 종류

  • 모듈과 소스파일을 기준으로 생각해 봤을 때, Swift의 접근제어자에는 public, open, private, fileprivate, internal 5가지 종류가 있다.
  • 접근 제한의 '제한 정도'는 아래 순서로 정리할 수 있따.

    private(Type) > fileprivate(.swift) > internal(모듈 내부) > public(모듈 외부에서 상속 및 오버라이딩 불가능) > open(모듈 외부에서 상속 및 오버라이딩 가능)

  • 비슷한것끼리 묶어서 생각해보았을 때 3가지로 나눌 수 있다.
    1. internal
    2. public, open
    3. private, fileprivate

2.1. internal

  • internal은 기본 접근제어이다.
  • 따라서 접근제어 키워드를 아무것도 안 쓰면 internal이 적용된다.
  • 선언된 모듈의 내부에서만 '접근', '상속', '재정의' 가능하다.

2.2. public, open

  • public과 open 둘다 선언된 모듈의 내부, 외부에서 '접근'이 모두 가능하다.
  • 그렇다면 pulbic과 open의 차이점은?

    open

    • open은 참조 타입인 class에만(클래스 내에 선언된 메서드, 프로퍼티도 가능) 접근 제어 선언이 가능하다.
    • 선언된 모듈의 외부에서 '접근(access)' 뿐만 아니라 '상속(subclassing)', '재정의(overriding)' 가능하다.

    public

    • public은 참조 타입인 class 뿐만 아니라 값 타입인 struct, enum에도 선언 가능하다.
    • 선언된 모듈의 외부에서 '접근'만 가능하고 '상속'과 '재정의'는 불가능하다.

2.3. private, fileprivate

  • private은 Type(클래스, 구조체, 열거형) 내에서만 '접근'이 가능하다. Type 밖에서는 접근, 상속, 재정의 불가능하다.
  • fileprivate은 이 접근제어를 선언한 .swift 소스코드 파일 내부에서만 '접근'이 가능하다.
  • fileprivate은 모듈이 같아도 다른 소스코드 파일이라면 접근이 불가능하다.
  • private이 fileprivate보다 더 제한적인 access control이다.

0개의 댓글