캡슐화

OneTwoThree·2022년 7월 29일
0

부스트코스 코틀린

목록 보기
23/26

[부스트코스]캡슐화

캡슐화

가시성 지시자

private : 외부에서 접근할 수 없음
public : 어디서든 접근 가능 (기본값)
protected : 외부에서 접근할 수 없으나 하위 상속 요소에서는 가능
internal : 같은 정의의 모듈 내부에서는 접근 가능

Top-level 함수에서는 private 클래스 객체를 생성할 수 있다.


주 생성자의 앞에서 가시성 지시자를 붙일 수 있다.
앞에서 주 생성자의 constructor를 생략했었는데 가시성 지시자가 붙으면 constructor를 생략할 수 없다.

하나의 프로젝트에 모듈이 여러 개 있을 수 있다.
private : Base 클래스 내에서만
protected : Base를 상속하는 Derived 클래스에서 접근가능
internal : 같은 모듈 범위에서 접근가능
public : 프로젝트 전체에서 접근가능

package chap01.section4

private class PrivateClass(){
    private var num = 1

}

fun main() {
    //main은 top-level 함수여서 생성가능
    val pc = PrivateClass()
}

class OtherClass(){
//    //다른 클래스에서는 접근 불가능
//    val pc = PrivateClass()

    fun test(){
        //다른 클래스지만 test라는 메소드로 가려지기때문에 생성가능 
        val pc = PrivateClass()
    }
}

PrivateClass는 private 가시성 지시자로 선언된 클래스다.
main은 top-level 함수로 PrivateClass()를 호출해서 객체를 생성할 수 있다.
OtherClass는 다른 클래스이므로 PrivateClass 객체를 생성할 수 없다.
하지만 OtherClass의 test 메소드 내에서는 PrivateClass 객체 생성이 가능하다.
왜냐하면 test라는 메소드로 감춰진 채로 접근하기 때문이다.

internal

프로젝트가 모듈로 나눠지지 않으면 하나의 프로젝트가 하나의 모듈이라고 생각하면 된다.
internal 로 선언된 InternalClass 클래스를
다른 클래스인 Other 클래스에서 객체생성할 때는 internal 키워드를 붙여줘야 한다.
붙이지 않을 경우 public이므로 모든 범위에서 접근이 가능하므로 에러가 발생한다.

최상위 함수에서 internal 객체를 생성할 때는 internal 키워드를 붙이지 않아도 객체 생성이 가능하다.

다른 패키지에서 접근할 때는 상단에 import 구문을 추가해서 접근할 수 있다.

클래스 다이어그램에서는 기호로 가시성 지시자를 표현한다

 - : private
 # : protected
 ~ : internal
 + : public 

0개의 댓글

관련 채용 정보