접근 제어자의 종류엔 어떤게 있는지 설명하시오
- 주체와 객체 사이의 정보 흐름을 통제한다.
- 주체 - 사용자
- 객체 - 사용자가 접근하고자 하는 자원
- 정보 흐름 통제 - 사용자가 특정 자원에 접근하려고 할 때 사용자가 합당한 권한이 있는지 체크하는 일련의 과정
- 코드끼리 상호작용 시 파일, 모듈 간에 접근을 제한한다.
- 불필요한 접근으로 의도치 않은 결과를 초래하거나 필요 이상의 코드가 노출될 위험이 있을 때 사용한다.
- 캡슐화, 은닉화를 이용한 것이다.
- 캡슐화 : 객체의 속성(data fields)과 행위(메서드)를 하나로 묶고, 실제 구현 내용 일부를 내부에 감추어 은닉한다.
- 은닉화 : 클래스의 프로퍼티를 private으로 만들어 클래스 밖에서 함부로 접근할 수 없도록 하는 것을 말한다. 클래스를 사용할 때 프로퍼티에 직접 전근하는 것은 데이터 무결성을 침범하는 것이기에 대신 연산프로퍼티(get, set)를 통한 접근을 가능케 하는 것을 말한다.
접근 수준
- 접근 제어는 접근 수준 키워드를 통해 구현이 가능하다
- 각 타입에 특정 접근수준을 지정할 수 있고, 타입 내부의 프로퍼티, 메서드, 이니셜라이저에도 접근 수준 지정이 가능하다.
- 접근 수준을 명시할 수 있는 키워드
open
, public
, intenal
, fileprivate
, private
이 있다.
5개의 접근 제어자
Open
개방 접근 수준
- 공개 접근 수준이상으로 높은 접근수준이다.
- 클래스와 클래스 맴버에서만 사용이 가능하다
- 클래스가 정의된 모듈 밖의 다른 모듈에서도 상속할 수 있다.
- open으로 정의된 클래스 멤버는 정의된 모듈 밖의 다른 모듈에서도 재정의가 가능하다.
- 클래스를 open으로 명시하는 것은 그 클래스를 다른 모듈에서도 부모 클래스로 사용할 목적으로 설계했다는 것을 의미한다.
Public
공개 접근 수준
- public으로 지정된 요소는 어디서든 쓰일 수 있다.