1. 자바와 코틀린의 가시성 제어
Kotlin에서는 패키지를 namespace를 관리하기 위한 용도로만 사용한다. 가시성 제어에는 사용되지 않는다.
[ 코틀린에서 패키지는 "같은 패키지끼리 서로 사용할 수 있다." 이런 가시성 용도로 사용되지않는다.
그러므로 default 또한 사라졌다.]
internal 접근제어자에서 말하는 모듈은 다음과 같다.
모듈 : 한 번에 컴파일 되는 Kotlin 코드
[ 상위 모듈에서 하위모듈로 접근 불가 , 하지만 하위모듈에서는 상위모듈 접근이 가능하다. ]
- internal 접근 제어자는 같은 모듈 내에서만 접근 가능하게 만들어집니다.
- 모듈 간 의존성이 설정되어 있으면, 하위 모듈이 상위 모듈에 의존할 수 있고, 그에 따라 하위 모듈에서 상위 모듈의 internal 멤버를 사용할 수 있습니다.
- 그러나 상위 모듈에서 하위 모듈로는 접근할 수 없다는 점이 핵심입니다.
하위 모듈에서 상위 모듈에 접근할 수 있는 이유는 하위 모듈이 상위 모듈을 의존하는 구조로 설정되었기 때문입니다.
Java의 기본 접근 지시어는 default
Kotlin의 기본 접근 지시어는 public
2. 코틀린 파일의 접근 제어
코틀린은 .kt 파일에 변수, 함수, 클래스 여러개를 바로 만들 수 있다.
예시)
memo.kt [ lec01이라는 패키지에 존재 ]
package lannstark.lec01
// 변수도 가능하고
val a: Int = 10
// 함수도 가능하고
fun add(num1: Int, num2: Int): Int {
return num1 + num2
}
// 클래스도 가능하고
class memo(
var text:String
)
파일 최상위 레벨 (=최상단) [= 클래스 밖 ] 에도 변수, 함수 등등을 작성 가능하다.
접근제어자를 생략하면 public이 기본값이다.
prac.kt [ lec02이라는 패키지에 존재 ]
package lannstark.lec2
import lannstark.lec01.a // 같은 패키지라면 import 필요없다.
import lannstark.lec01.memo
import lannstark.lec01.add
var memoA = a
var memo = memo("abc")
var result = add(1, 2)
자바였으면
memo.a
new memo
memo.add(1,2)
이런식으로 클래스파일명을 이용했을텐데
코틀린은 그런게 없다.
파일 최상단에는 protected가 불가능하다.
protected는 상속과 관련된 접근제어자이므로 클래스나 클래스 내부에서 사용된다.
3. 다양한 구성요소의 접근 제어
생성자
생성자의 접근제어자도 위와 동일하다.
다른점 하나는
생성자에 접근 지시어를 붙이려면, constructor를 써야한다.
class chi internal constructor(
val price:Int
){
internal constructor() : this(1)
}
프로퍼티
getter, setter 한 번에 접근 지시어를 정하거나
Setter에만 추가로 가시성을 부여할 수 있다.
Getter는 프로퍼티의 접근제어자와 동일해야한다.
[ = max 앞에 생략되어있는 public이 getter의 접근제어자이다, 프로퍼티 이름을 이용해서 getter를 호출하니까]
4. Java와 Kotlin을 함께 사용할 경우 주의할 점
Internal은 바이트 코드 상 public이 된다.
때문에 Java 코드에서는 Kotlin 모듈의 internal 코드를 가져올 수 있다
Kotlin의 protected와 Java의 protected는 다르다.
Java는 같은 패키지의 Kotlin protected 멤버에 접근할 수 있다.
- Kotlin에서 패키지는 namespace 관리용이기 때문에 protected는 의미가 달라졌다
- Kotlin에서는 default가 사라지고, 모듈간의 접근을 통제하는 internal이 새로 생겼다
- 생성자에 접근 지시어를 붙일 때는 constructor를 명시적으로 써주어야 한다.
- 유틸성 함수를 만들 때는 파일 최상단을 이용하면 편리하다
- 프로퍼티의 custom setter에 접근 지시어를 붙일 수 있다.
- Java에서 Kotlin 코드를 사용할 때 internal과 protected는 주의해야 한다.
'인프런 > 자바 개발자를 위한 코틀린 입' 카테고리의 다른 글
8) 코틀린에서 배열과 컬렉션을 다루는 방법 (0) | 2025.01.09 |
---|---|
7) 코틀린에서 object 키워드, 중첩 클래스, 다양한 클래스를 다루는 방법 (0) | 2025.01.09 |
5) 코틀린에서 상속을 다루는 방법 (0) | 2025.01.08 |
4) 코틀린에서 클래스를 다루는 방법 (0) | 2025.01.07 |
3) 코틀린에서 조건문,반복문,예외,함수를 다루는 방법 (0) | 2025.01.07 |
댓글