Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[7주차] 접근 제어자의 종류엔 어떤게 있는지 설명하시오. #12

Open
obtusa07 opened this issue Jan 8, 2023 · 2 comments

Comments

@obtusa07
Copy link

obtusa07 commented Jan 8, 2023

접근제어자란?

접근제어(Access control)는 코드끼리 상호작용시 파일 혹은 모듈간의 접근을 제한할 수 있는 기능이며, 이를 수행하는 키워드를 접근제어자라 한다.

5 가지의 접근수준

open

  • 정의한 모듈의 모든 소스 파일과 정의한 모듈을 가져오는(import) 행위로 다른 모듈의 소스 파일에서 엔티티를 사용할 수 있다.
  • 가장 높은 접근 수준으로 클래스와 클래스의 멤버에만 사용이 가능하다.
  • open을 제외한 다른 접근 수준의 클래스는 그 클래스가 정의된 모듈 안에서만 사용 가능
  • open을 제외한 다른 접근 수준의 클래스 멤버는 해당 멤버가 정의된 모듈 안에서만 재정의 가능
  • open 클래스는 정의된 모듈 밖의 다른 모듈에서도 상속 가능
  • open 클래스 멤버는 해당 멤버가 정의된 모듈 밖의 다른 모듈에서도 재정의 가능

public

  • 어디서든 사용이 가능하다. 자신이 구현된 소스파일, 속해있는 모듈, 그 모듈을 가져다 쓰는 모듈까지 가능하다
  • 주로 프레임워크에서 외부와 연결될 인터페이스를 구현하기 위해 사용
  • 스위프트의 기본 요소가 public으로 구현

internal

  • 모든 요소에 암묵적으로 지정하는 기본 접근 수준
  • 소스 파일이 속해 있는 모듈 어디서든 사용 가능
  • 이 모듈을 가져다 쓰는 외부 모듈에서는 사용 불가
  • 외부에서 사용할 클래스, 구조체가 아니고 모듈 내부에서 광역적으로 사용할 경우 internal을 사용

fileprivate

  • 요소가 구현된 소스파일 내부에서만 사용 가능
  • 외부 소스 파일에서 접근하면 곤란한 경우 사용

private

  • 가장 낮은 수준의 접근 제어 수준
  • 기능을 정의하고 구현한 범위 내에서만 사용 가능
  • 같은 소스 파일 안에 구현한 다른 타입이나 기능에서도 사용 불가

주의점

낮은 접근 수준에서 상위 접근 수준을 가지는 것은 불가능하다.

private class xxx {
    public var yyy
}
@hongssup
Copy link

@kangddong
Copy link
Contributor

가장 높은 접근 수준 				    가장 적은 접근 수준
가장 적은 제약 접근 수준 			가장 높은 제약 접근 수준

Open -> public -> internal -> File private -> private

접근 제어의 필요성

객체지향 프로그래밍 패러다임에서 중요한 캡슐화와 은닉화를 구현하는 이유는 외부에서 보거나 접근하면 안되는 코드가 있기 때문입니다.

모듈은 배포할 코드의 묶음 단위, 프레임워크나 라이브러리 또는 애플리케이션이 모듈 단위가 될 수 있습니다

접근 제어자의 종류

open - 개방 접근수준
클래스와 클래스 멤버에서만 사용할 수 있습니다.

open 과 public은 모듈 레벨에서의 상속과 재정의에서 차이를 보인다.

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

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

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

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

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

internal - 내부 접근수준
기본적으로 모든 요서에 암묵적으로 지정하는 기본 접근 수준

File private - 파일외부비공개 접근수준
구현된 소스파일 내부에서만 사용할 수 있습니다. 외부에서 값이 변경되거나 함수를 호출하면 부작용이 생길 수 있는 경우에 사용하면 좋습니다.

private - 비공개 접근수준
가장 한정적인 범위입니다.
그 기능을 정의하고 구현한 범위 내에서만 사용할 수 있습니다.
같은 소스파일 안에 구현한 다른 타입이나 기능에서도 사용할 수 없습니다.

접근수준의 규칙은 상위 요소보다 하위 요소가 더 높은 접근수준을 가질 수 없다 입니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants