Apple-CS-interview / iOS-CS-interview

7 stars 1 forks source link

접근 제어자의 종류엔 어떤게 있는지 설명하시오. #24

Open Do-hyun-Kim opened 1 year ago

Do-hyun-Kim commented 1 year ago

접근 제어자의 종류엔 어떤게 있는지 설명하시오.

Acceess Control

Access Control 종류

JennyFoundation 내부에 open 접근자로 선언된 Jenny 클래스
스크린샷 2023-10-25 오후 4 16 30
JennyFoundation 외부에 open 접근자로 선언된 Jenny 클래스를 상속 받은 man 클래스
스크린샷 2023-10-25 오후 4 17 52
JennyFoundation 내부에 public 접근자로 선언된 Human 클래스
스크린샷 2023-10-25 오후 4 19 12
JennyFoundation 외부에 public 접근자로 선언된 Human 클래스를 상속 받은 Girl 클래스
스크린샷 2023-10-25 오후 4 20 20
JennyFoundation 내부에 internal 접근자로 선언된 Computer 클래스
스크린샷 2023-10-25 오후 4 21 40
JennyFoundation 외부에 internal 접근자로 선언된 Computer 클래스를 사용하게 되면
스크린샷 2023-10-25 오후 4 22 19
JennyFoundation 내부에 fileprivate 접근자로 선언된 Document 클래스에 접근하게 되면
스크린샷 2023-10-25 오후 4 23 08
JennyFoundation 내부에 fileprivate 접근자로 선언된 Document 클래스를 private, fileprivate 접근자로 접근하게 된 경우
스크린샷 2023-10-25 오후 4 24 02
JennyFoundation 내부에 private 접근자로 선언된 Cipher 클래스를 다른 클래스에서 접근하게 되는 경우 발생하는 오류
스크린샷 2023-10-25 오후 4 25 05 스크린샷 2023-10-25 오후 4 25 28

📝 참고 자료

Hminchae commented 1 year ago

접근 제어자

접근 제어자는 코드를 작성하는 한 파일에서 다른 파일에 있는 코드에 대한 접근을 명시적으로 작성하여 이를 관리하는 것인데, module과 source file에 따라 접근할 수 있음

swift의 5가지 접근 제어자

entity : 접근 제어자를 작성할 수 있는 property, method, class, struct 등의 집합

  1. Open (가장 높은 접근 수준)
    • 프로젝트 내의 모든 module 해당 entity에 접근
    • 다른 모듈에서 subclass 가능
  2. Public
    • 프로젝트 내의 모든 module 해당 entity에 접근
    • 다른 모듈에서 subclass 불가능
  3. Internal (기본 접근 수준)
    • default 접근 제어자
    • entity가 작성된 modul에서 접근 가능
  4. File-private
    • entity가 작성된 source file에서만 접근 가능
    • 서로 다른 클래스가 같은 파일에 있고 file private로 선언되어 있다면, 서로 접근 가능
  5. Private (가장 낮은 접근 수준)
    • 특정 객체에서만 사용 가능
    • 같은 파일안에 있어도, 서로 다른 객체가 private로 선언되어 있다면, 서로 접근 불가능

그 외

참조

vichye-1 commented 1 year ago

접근 제어(Access Control)란?

접근 제어의 종류 - 5가지

  1. open(가장 적은 제약)

    • 클래스에만 적용(struct와 enum은 public부터 가능)
    • 정의한 모듈의 모든 소스 파일과 정의한 모듈을 가져오고(import) 다른 모듈의 소스 파일에서 엔티티를 사용할 수 있다.
    • 프레임워크를 개발할 때 프레임워크를 가져오는 앱과 다른 모듈에서 보고 접근할 수 있게 하기 위해 해당 프레임워크에 대한 공용 인터페이스를 open또는 public으로 표시한다.
    • Framework 내부, Framework 외부 (즉, 어디서든)에서 서브 클래싱과 override 가능
  2. public

    • class, struct, enum에 모두 적용 가능
    • open과 비슷하지만 다른 점은,
    • open과 달리 public은 Framework 내부에서만 서브클래싱, override 가능
  3. internal - 기본 접근 권한

    • 정의한 모듈의 모든 소스 파일 내에서 사용할 수 있지만 해당 모듈 외부의 소스 파일에서는 사용할 수 없다.
    • 일반적으로 앱 또는 프레임워크의 내부 구조체를 정의할 때 internal 접근을 사용한다(모듈 내에서만 사용 가능)
    • 아래 class 도 internal 수준
class SomeClass {
    public init() {}
}
  1. fileprivate

    • 자체 정의한 소스 파일로 엔티티의 사용을 제한한다.
    • 위의 3개의 접근권한은 모듈 수준으로 사용이 가능하지만, 소스 파일까지로 범위가 제한된다.
    • 같은 모듈 내에서도 같은 소스파일 안에서만 사용이 가능하다.
  2. private(가장 높은 제약)

    • 1 ) enclosing 선언과, 2 ) 같은 파일에 있는 해당 선언의 extension*으로 엔티티의 사용을 제한
    • extension의 경우 Swift4부터 접근 가능하게 됨
    • 세부 내용은 단일 선언 내에서만 사용되고 기능의 특정 부분의 구현 세부정보를 가리기 위해 사용

접근 제어 구문

open class SomeOpenClass {}
public class SomePublicClass {}
public struct SomeStruct {}
public enum SomeEnum {}
internal class SomeInternalClass {}
fileprivate class SomeFilePrivateClass {}
private class SomePrivateClass {}

참고

ronick-grammer commented 1 year ago

접근 제어자의 종류

접근 제어자는 모듈과 소스파일 내에서 클래스나 구조체 등의 프로퍼티와 메서드에 허용되는 접근 범위를 정의한다.

open

public

internal

fileprivate

private

📝 참고 사이트