swift access levels

언어에 따라서 그 중요도가 좀 차이는 나지만 swift에서도 여전히 접근 레벨을 명확히 명시하여 클래스 캡슐화하는 것은 매우 중요함, 하지만 클래스 캡슐화와 extension 활성화는 좀 맞지 않는 느낌이라서 c++에서 했던것 처럼 모든 멤버변수를 반드시 private으로 지정하여 기밀성을 보장하는 것은 망설여 진다. 실제 작업해 보면 좀 불편하기도 하고…

접근 레벨은 클래스, 멤버 앞에 붙여서 명시함
swift에서 접근 레벨은 모듈 단위로 유효함
c++ 에서의 명시적 네임스페이스 없음, enum, typealias를 이용하여 c++ 네임스페이스 비슷하게 할 수는 있음

open, public
현재 모듈 이외에 외부 모듈에서 사용 가능

open class A
외부 모듈에서 A를 상속 가능함

public class A
외부 모듈에서 A를 상속할 수 없음

pulic 멤버 함수는 외부모듈에서 재정의(override) 불가능
같은 모듈에서만 사용하면 open, public 은 완전히 같음

internal
기본 접근자, 아무것도 명시하지 않으면 기본으로 지정됨
같은 모듈에서는 public과 같음, 다른 모듈에서 직접 사용, 상속 불가능

private, fileprivate
상속받은 클래스에서 접근 안됨
같은 파일에 있는 extension에서 fileprivate 멤버는 접근됨
언제부터인가 private 멤버도 같은 파일에 있는 extension에서 접근됨
2개 차이점이 없음?

답글 남기기

이메일 주소는 공개되지 않습니다.