Skip to content

Latest commit

 

History

History
73 lines (58 loc) · 3.11 KB

File metadata and controls

73 lines (58 loc) · 3.11 KB

Swift의 접근 제어자(Access Control Levels)에 대해 설명해주세요.

  • 다른 소스 파일, 모듈에서 코드에 접근하는 것을 제한하는 것.
  1. open

    • 가장 개방적인 접근 제어자.

    • 모듈 외부에서도 접근 가능.

    • 다른 모듈에서 상속, 오버라이드가 가능.

    • 주로 프레임워크 개발 시 사용.

      ex) func viewWillApeear(), viewDidLoad()

  2. public

    • 모듈 외부에서 접근 가능.

    • 다른 모듈에서 상속 및 오버라이드 불가능.

    • 라이브러리나 외부에 공개할 API 개발 시 사용.

      ex) func addSubview(), removeFromSuperview()

  3. package

    • 정의된 패키지 내 모든 소스파일에서 사용 가능.
    • 패키지 외부 소스 파일에서는 사용 불가.
    • 다중 모듈 패키지 내에서 모듈 간 코드 공유에 유용.
      • 패키지에서 여러 모듈을 사용하는 상황에서 ‘패키지 내 여러 모듈 간에만 공유하고 싶은 코드’를 package로 정확하게 표현할 수 있다.
  4. internal

    • 기본 접근 레벨.
    • 같은 모듈 내에서만 접근 가능.
    • 일반적인 내부 구현에 사용.
  5. fileprivate

    • 같은 파일 내에서만 접근 가능.
    • 특정 파일 내의 구현을 캡슐화할 때 사용.
  6. private

    • 가장 제한적인 접근 레벨
    • 선언된 타입 내부와, 같은 파일의 해당 타입 extension에서만 접근 가능.

open과 public의 차이점은 무엇인가요?

  • open
    • 다른 모듈에서 상속, 오버라이드 모두 가능
    • ex) override func viewWillAppear(_ animated: Bool)
  • public
    • 다른 모듈에서 접근은 가능하지만 상속, 오버라이드 불가능
    • ex) view.addSubview(stackView)

internal, fileprivate, private의 사용 시기는 어떻게 결정하나요?

  • internal

    • 다른 파일에서도 접근이 필요할 때

      ex) 모듈 내 다른 파일에서 접근이 가능해야 하는 API 메서드의 경우

      func fetchUser()

  • fileprivate

    • 특정 파일 내 다른 타입에서 접근이 필요할 때.
  • private

    • 특정 파일 내부의 세부 구현 사항을 숨기고 싶을 때.
    • 클래스,구조체, 열거형 외부에서 접근하면 안되는 프로퍼티나 메서드에 적용.

접근 제어자를 사용하는 이유는 무엇인가요?

  1. 코드 캡슐화와 보안 강화
    • 외부에서 함부로 수정하거나 볼 수 없도록 캡슐화 가능.
  2. 모듈과 소스 파일 간의 경계 설정
    • 모듈 외부에서 어디까지 접근 가능한지 모듈과 그 내부의 소스 파일 간의 경계를 설정할 수 있음.
  3. 의도된 사용 유도

코드 캡슐화를 해야하는 이유

  1. 내부 구현을 숨겨 외부의 오용 방지
  2. 변경의 유연성 확보
    • 캡슐화 시, 외부에 공개된 부분만 유지하면 되기 때문에 내부 코드를 마음대로 바꿀 수 있다.
  3. 의존성을 줄이고 책임 명확히 하기
    • 캡슐화로 내부와 외부를 구분 지으면 책임이 명확해짐.