본문 바로가기
Languages/Swift

사당 iOS 스터디 2주차 - 접근제어

by 탄이. 2018. 8. 17.

CHAPTER 12 접근제어

__12.1 접근제어란

접근제어를 통해 코드의 상세 구현은 숨기고 허용된 기능만 사용하는 인터페이스를 제공

12.1.1 접근제어의 필요성

12.1.2 모듈과 소스파일

  • 모듈

    • 모듈은 배포할 코드의 묶음 단위

    • 하나의 프레임워크나 라이브러리 또는 애플리케이션이 모듈 단뒤

    • import 키워드를 사용

  • 소스파일

    • 소스파일 하나에 여러 타입(여러 개의 클래스나 구조체, 열거형 등)이나 함수 등 많은 것을 정의하거나 구현할 수도 있습니다.

__12.2 접근수준

각 타입(클래스, 구조체, 열거형 등)에 특정 접근수준을 지정

타입 내부의 프로퍼티, 메서드, 이니셜라이저, 서브스크립트 각각에도 접근수준을 지정

12.2.1 공개 접근수준, public

  • 자신이 구현된 소스파일은 물론, 그 소스파일이 속해 있는 모듈, 그 모듈을 가져다 쓰는 모듈 등 모든 곳에서 사용

  • 프레임워크에서 외부와 연결될 인터페이스를 구현하는데 많이 쓰입니다.

12.2.2 개방 접근수준, open

  • 클래스와 클래스의 멤버에서만 사용

  • public 과의 차이점

    • 개방 접근수준을 제외한 다른 모든 접근수준의 클래스는 그 클래스가 정의된 모듈 안에서만 상속할 수 있습니다.

    • 개방 접근수준을 제외한 다른 모든 접근수준의 클래스 멤버는 해당 멤버가 정의된 모듈 안에서만 재정의할 수 있습니다.

    • 개방 접근수준의 클래스는 그 클래스가 정의된 모듈 밖의 다른 모듈에서도 상속할 수 있습니다.

    • 개방 접근수준의 클래스 멤버는 해당 멤버가 정의된 모듈 밖의 다른 모듈에서도 재정의할 수 있습니다.

  • 클래스를 개방 접근수준으로 명시하는 것은 그 클래스를 다른 모듈에서도 부모클래스로 사용하겠다는 목적으로 클래스를 설계하고 코드를 작성했음을 의미

12.2.3 내부 접근수준, internal

  • 기본적으로 모든 요소에 암묵적으로 지정하는 기본 접근수준

  • 소스파일이 속해 있는 모듈 어디에서든 쓰일 수 있습니다

  • 외부에서 사용할 클래스나 구조체가 아니며, 모듈 내부에서 광역적으로 사용할 경우

12.2.4 파일외부비공개 접근수준, fileprivate

  • 그 요소가 구현된 소스파일 내부에서만 사용

  • 해당 소스파일 외부에서 값이 변경되거나 함수를 호출하면 부작용이 생길 수 있는 경우

12.2.5 비공개 접근수준, private

  • 그 기능을 정의하고 구현한 범위 내에서만 사용

__12.3 접근제어 구현

__12.4 접근제어 구현 참고사항

‘상위 요소보다 하위 요소가 더 높은 접근수준을 가질 수 없다’

함수의 매개변수로 특정 접근수준이 부여된 타입이 전달되거나 반환된다면, 그 타입의 접근수준보다 함수의 접근수준이 높게 설정될 수 없습니다.

프레임워크를 만들 때는 다른 모듈에서 특정 기능에 접근할 수 있도록 API로 사용할 기능을 공개 접근수준(public)으로 지정해주어야 합니다.

열거형 내부의 각 case별로 따로 접근수준을 부여할 수는 없습니다.

열거형의 원시 값 타입으로 열거형의 접근수준보다 낮은 접근수준의 타입이 올 수는 없습니다.

__12.5 private와 fileprivate

같은 타입의 익스텐션에서는 private 요소에 접근 가능

  • 자신을 확장하는 익스텐션 코드가 같은 파일에 존재하는 경우에는 접근할 수 있습니다.

__12.6 읽기 전용 구현

값을 변경할 수 없도록 구현하고 싶다면 어떻게 해야 할까

“접근수준” (set) 처럼 표현하면 설정자의 접근수준만 더 낮도록 지정해줄 수 있습니다.





참고


야곰의 스위프트 프로그래밍 https://book.naver.com/bookdb/book_detail.nhn?bid=12571019

댓글