Access Control

이원희·2020년 12월 21일
1

 🐧 Swift

목록 보기
5/32
post-thumbnail

오늘은 Access Control에 대해서 알아보려 한다.
Access Control은 객체지향 프로그래밍에서 은닉화/캡슐화를 가능하게 해준다.

Access Control은?

file/module간에 접근을 제한할 수 있는 기능이다.
이를 통해 Code의 상세 구현은 숨기고 허용된 기능만 사용할 수 있도록 제한한다.

module이란?

Swift를 접하기 전에 사용하던 언어들에서도public, private라는 Access control이 있었다.
그때는 file에 대한 접근을 제한한다고 배웠는데 module이 뭘까?

Swift는 modulesource file 기반으로 Access Control이 설계되었다.

module배포할 코드의 묶음 단위이다.
frameworke, library, Application을 예로 들 수 있다.
Swift에서는 import를 통해 불러온다.

source file은 하나의 Swift Source Code File을 의미한다.

Access Control의 종류는?

TypeType 내부property, method, initializer, subScriptAccess Control을 지정할 수 있다.

open: 모듈 외부까지 접근 가능 (class에만 사용)

public: 모듈 외부까지 접근 가능

internal: 모듈 내부까지 접근 가능

fileprivate: 파일 내부까지 접근 가능

private: 기능 정의 내부

이렇게 총 5가지의 Access Control이 있다.
위에서 아래로 내려올수록 접근도가 낮아진다.

public

어디서든 사용 가능하다.
(구현된 source file, source file이 속해 있는 module, module을 가져다 쓰는module)
주로 framework에서 외부와 연결될 interface를 구현할때 사용한다.

open

public이상으로 접근도가 높은 Access Control이다.
classclass 멤버에서만 사용 가능한 Access Control이다.

public과 차이

  • public이하의 Access controlclass정의된 모듈 내에서만 서브 클래싱할 수 있다.
    (Framework내부에서만 서브클래싱이 가능)
  • open 클래스는 정의 된 모듈 내에서 서브 클래싱 될 수 있으며 정의 된 모듈을 가져오는 모듈 내에서도 서브 클래싱 될 수 있다.
    (FrameWork내부, Framework외부 어디서든 서브클래싱이 가능)
  • public 클래스 멤버 또는 제한적인 Access Control정의 된 모듈 내에서만 하위 클래스에 의해 override될 수 있다.
  • open 클래스 멤버는 정의 된 모듈 내의 하위 클래스와 정의 된 모듈을 가져오는 모든 모듈에서 override될 수 있다.

classopen으로 명시했다면 class를 다른 모듈에서도 부모 class로 사용하겠다는 목적으로 class를 설계하고 코드를 작성했음을 의미한다.

internal

default로 선언되는 Access Control이다.
source file이 속해 있는 mudule 어디에서든 쓰일 수 있다.
module을 가져다 쓰는 외부 module에서는 접근이 불가능 하다.
즉, 외부에서 사용할 classstruct가 아니고 module 내부에서 광역적으로 사용할 경우에 지정해준다.
(해당 module에서만 접근할 수 있다.)

fileprivate

fileprivate라는 이름에서 알 수 있듯 source file 내부에서만 접근 가능하다.
같은 module 내에서도 같은 source file 안에서만 접근 가능하다는 말이다.

private

private은 가장 한정적인 Access Control이다.
기능을 정의하고 구현한 범위 내에서만 사용한다.

Access Control을 통해 얻는 이점은 무엇일까?

위에서 알아본 privateAccess Control의 이점을 생각해보자.

내가 사용자의 정보를 받는 프로그램을 개발한다고 생각해보자.
사용자에게서 주민번호 혹은 핸드폰 번호를 입력 받고 저장하는데 이걸 어디에서든 다 접근할 수 있도록 한다면 어떨까?

이런 관점에서 바라본다면 정말 필요한데에서 필요한 정보만 접근할 수 있도록하는 것이 불필요한 접근을 줄이는 방법일 것이다.
즉, 우리가 적절한 Access Control을 지정해줌으로써 불필요한 접근으로 우리가 원하지 않은 결과값을 받는 것을 방지해줄 수 있다.
또한, 코드의 노출도 막을 수 있다.

마무리

오늘은 Access Control에 대해 알아봤다.
이전부터 정리해야지 생각했었는데 어쩌다보니 좀 나중에 하게 되었다...ㅋㅋ
이전에 프로그램을 짤때에는 Access Control에 대해 크게 신경을 쓰지 않았는데 이에 관련한 리뷰를 받다보니 한 번 정리할 필요를 느꼈고, 이제 적절하게 사용해보도록 해야지...

그럼 이만👋

0개의 댓글