1. 자바와 코틀린의 가시성 제어
위의 그림과 같이 public과 private은 똑같지만,
protected와 default에서 차이점이 존재한다!!
같은 패키지에서 사용 가능했던 protected가 코틀린에서는 선언된 클래스, 하위클래스에서만 접근이 가능하다!!
또한, default가 사라지고 internal이 등장했고 이는 같은 모듈에서만 접근이 가능하다!
2. 코틀린 파일의 접근 제어
public은 기본값으로 어디에서든 접근이 가능하다!!
var a = 3
fun add(a : Int, b : Int) : Int {
return a + b
}
코틀린 파일안에 기본값이 public으로 어디에서든 접근이 가능하다!!
하지만 protected는 파일 최상단에서는 사용이 불가능하다!
왜냐하면 파일의 최상단은 클래스가 아니기 때문이다!!
이렇게 에러가 발생하는 것을 확인할 수 있다!!
3. 다양한 구성요소와 접근제어
class Cat protected constructor(
//constructor 를 생략할 수 있었지만 접근지시어를 붙이려면 constructor무조건 사용해주어야함
)
접근지시어를 쓰고 싶다면 이렇게 constructor를 무조건 써주어야한다!!
그리고 또 다른 예시를 살펴보자!
class Car(
val name : String, //getter, setter 모두 internal
var owner : String, //getter ,setter 모두 private
_price : Int
){
var price = _price //getter는 public, setter는 private
//Car는 사실 3개의 getter와 owner와 price 두 개의 setter가 있는 것임
}
fun main(){
val car = Car("sonata", "yss", 1000)
// car.name = "ss"
car.owner = "ss"
car.price = 2000
}
internal val name 이렇게 설정하였다면 getter, setter모두 internal 접근제어 형식이다.
하지만 name은 val형식이기 때문에 setter는 사라지게 된다.
그럼 여기서 setter는 private, getter는 public으로 하고싶다면 어떻게 하면 될까?
다음과 같이 setter에만 추가로 가시성을 부여할 수 있다!!
'Kotlin > Basic' 카테고리의 다른 글
[Kotlin/Basic] 코틀린에서의 중첩클래스 (0) | 2022.09.01 |
---|---|
[Kotlin/Basic] 코틀린에서의 object 키워드 (0) | 2022.08.31 |
[Kotlin/Basic] 코틀린에서의 상속 (0) | 2022.08.22 |
[Kotlin/Basic] 코틀린에서의 클래스 (0) | 2022.08.15 |
[Kotlin/Basic] 코틀린에서의 함수 (0) | 2022.08.14 |