접근제어자에 대해서

2022. 11. 22. 12:45면접준비

먼저 흔히 보았던 퍼블릭과 프라이빗에 대해서..

 

퍼블릭 프라이베이트

 Public -> 공개 접근 // 모듈 외부에서도 접근 가능

 Public 접근자 모듈이 아닌 다른 모듈에서 사용 가능 Public으로 선언된 것은 다른 모듈에서는 오버라이드와 서브 클래싱이 불가능합니다.

 

 Private -> 비공개 접근 수준 // 정의한 블록 내부에서만 접근 가능

 특정 엔티티가 선언된 괄호({})안에서만 사용 가능합니다.

 

 

 

접근제어자는 5개로 나뉘어 있다고 한다. 5개에 대해서 알아보자.!

 

접근제어자 5개

 

 접근 제어란?

 -접근제어는 코드끼리 상호작용을 할 때 파일 간 또는 모듈 간에 접근을 제한할 수 있는 기능입니다.

 -전체 코드가 노출될 가능성이 있을 때 접근 제어를 이용한다.

 

 접근 수준

 - 접근제어는 접근 수준 키워드를 통해 구현할 수 있다.

 - 접근 수준을 명시할 수 있는 키워드는 open, public, internal, fileprivate, private 가 있다.

 

 open - 개방 접근 수준

 개방 접근 수준은 공개 접근수준 이상으로 높은 접근 수준이며, 클래스와 클래스의 멤버에서만 사용할 수 있다.

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

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

 상속을 받을 수 있다.

 

 

 public - 공개 접근 수준

 public 키워드로 접근 수준이 지정된 요소는 어디서든 쓰일 수 있다.

 공개 접근 수준은 주로 프레임워크에서 외부와 연결될 인터페이스를 구현하는데 많이 쓰인다.

 다른 모듈에서 사용 가능 외부 라이브러리 -> 퍼블릭만나온다 af. snp. 딱 여기까지 나온다 외부라이브러리 쓸 때

 

 internal - 내부 접근 수준

 내부 접근 수준은 기본적으로 모든 요소에 암묵적으로 지정하는 기본 접근 수준이다.

 내부 접근 수준으로 지정된 요소는 소스파일이 속해 있는 모듈 어디에서든 쓰일 수 있다.

 하지만 그 모듈을 가져다 쓰는 외부 모듈에서는 접근할 수 없다.

 보통 외부에서 사용할 클래스나 구조체가 아니며, 모듈 내부에서 광역적으로 사용할 경우 내부 접근 수준을 지정한다.

 internal은 기본 접근 수준이므로 굳이 표기하지 않아도 된다.

 

 

 fileprivate - 파일 외부 비공개 접근 수준 파일에서만 접근 가능

 파일외부비공개 접근 수준으로 지정된 요소는 그 요소가 구현된 소스파일 내부에서만 사용할 수 있다.

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

 

 private - 비공개 접근수준

 비공개 접근 수준은 가장 한정적인 범위이다.

 비공개 접근 수준으로 지정된 요소는 그 기능을 정의하고 구현한 범위 내에서만 사용할 수 있다.

 비공개 접근수준으로 지정한 기능은 같은 소스파일 안에 구현한 다른 타입이나 기능에서도 사용할 수 없다.

 성능상향 상속받을 일이 생기면 프라이빗에서 인터벌로 변경 파이널 함수도 가능

 

 접근제어 구현 참고사항

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

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

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

 열거형 내부의 각 case별로 따로 접근 수준을 부여할 수 없고, 각 case의 접근수준은 열거형 자체의 접근수준을 따른다.