티스토리 뷰

오늘은 Access Control에 대해 공부하고 정리해보려 합니다. 

자주 보고 접했던 것들인데, 제대로 공부해보거나 사용해본 적이 없는 것 같네요 == 

 

docs.swift.org/swift-book/LanguageGuide/AccessControl.html#//apple_ref/doc/uid/TP40014097-CH41-ID3

 

Access Control — The Swift Programming Language (Swift 5.3)

Access Control Access control restricts access to parts of your code from code in other source files and modules. This feature enables you to hide the implementation details of your code, and to specify a preferred interface through which that code can be

docs.swift.org

 

 

● Access Control이란?


Access Control은 다른 소스 파일이나 *모듈이 너의 코드로 접근하는 것을 제한한다. (즉, 이름 그대로 Access Control을 사용하여 내가 작성한 소스코드로의 접근 범위를 제한하는 겁니다.) -> 이렇게 함으로써, 우리는 우리 코드의 세부 구현 사항을 숨길 수 있습니다. (은닉화) 

이러한 Access Control은 클래스, 구조체 및 열거와 같은 개별 타입과, 해당 타입에 속하는 프로퍼티, 메소드, 이니셜라이저에 사용할 수 있습니다.

 

* 모듈: 코드의 묶음 단위 ex) 프레임워크, 라이브러리 등등.. 

 

● Access Control의 종류


Access Control, 즉 접근제한자는 open, public, internal, fileprivate, private 총 5개가 있습니다.

open: 모듈 외부에서 access 가능 (Class만 사용 가능)

       - 일반적으로 Framework에 공용 인터페이스를 지정할 때는 open 또는 public 사용

 public: open과 동일, but 외부 상속 불가 & class 멤버 override 불가

       - 일반적으로 Framework에 공용 인터페이스를 지정할 때는 open 또는 public 사용

 internal: 같은 모듈 안에서 access 가능, (따로 접근 제한자를 명시하지 않으면 internal)

       - 일반적으로 App이나 Framework의 내부 구조를 정의할 때 사용

 fileprivate: 같은 파일 안에서 access 가능

       - 전체 파일 내에서  특정 기능의 세부 구현 정보를 숨기고자 할 때 사용

◎ private: 같은 스코프({ }) 안에서 access 가능

 

은닉 정도:  (제약 적음)    open  <  public  <  internal  <  fileprivate  <  private    (제약 많음)

 

● Access Control은 언제 사용?? 


Access Control은 우리가 보통 앱을 만들때는 굳이 사용 할 필요가 없습니다. 왜냐면 우리가 작성한 소스코드 자체가 외부에서 사용될 일이 없으니까요 ㅋ 그러므로 우리가 특별히 접근 제한자를 명시해가며 소스코드를 작성할 필요 없다고 합니다. 하지만, 앱 자체적으로 implementation details(구현 세부 정보)를 다른 코드로부터 숨기려면 file private이나 private을 사용하시면 됩니다.

그럼 언제 사용하느냐??  ->  주로 라이브러리나 프레임워크를 만들 때 사용합니다.  왜냐면 라이브러리와 프레임워크야 말로 외부에서 사용되는 모듈 이니까요!

 

 

그럼 실제로 접근제한자를 사용해 봅시다. ㅎㅎ

모든 접근 제한자를 사용해 보고 차이점을 알아보기 위해서는 프레임워크를 만들어서 improt 해야 합니다.  여기 를 읽고서 프레임워크를 똑같이 만들어주세요. (단지 Access Control을 실습해보기 위한 프레임워크입니다)

 

우리가 만든 프레임워크를 import 해주고 openClass와 publicClass 인스턴스를 생성해보면 아무 문제없는 것을 볼 수 있습니다. 왜냐면 모듈 외부에서 접근 가능하니까요 

 

 

하지만, 위에서 말했듯이 open과 public의 차이는 상속이나 override할 때 알 수 있습니다. 다음과 같이 public의 경우 모듈 밖에서는 상속이 되지 않는다는 오류가 발생하게 되고

 

open으로 access control이 명시된 method는 오버라이드시 아무런 오류 메시지가 뜨지 않지만, public의 경우 오류가 발생하게 됩니다. 

 

현재 프로젝트에서는 internal 접근제한자부터는 모듈 내에서만 접근이 가능하기 때문에, 현재 프로젝트에서 TestFramework를 import 했음에도 internal, fileprivate, private에 접근이 불가능합니다. 모듈 내에(TestFramework 안)서만 접근이 가능 한거죠.  

 

TestFramework 내 에서는 아래와 같이 Internal Class에도 접근이 가능하고, public으로 명시된 class의 상속 및 메소드의 오버라이딩이 가능한 것 을 볼 수 있습니다. 

 

여기서 정리를 마치겠습니다. (급 마무리) ㅎㅎ 혼자 공부하고자 정리하는 것도 있지만, 보시는 분들에게 많은 도움이 되었으면 좋겠네요. 감사합니다.

 

혹여나 틀린 정보나 내용이 있다면 댓글로 제게 알려주세요 바로 수정하겠습니다! 감사합니다.

댓글
링크
최근에 올라온 글
최근에 달린 댓글