[Kotlin] 클래스 별칭을 주는 키워드 as

허훈·2023년 12월 19일
0

kotlin

목록 보기
2/2
post-thumbnail

코틀린에서는 같은 이름의 클래스가 두 개 이상 존재해도,
그들의 위치, 즉 패키지가 다르면 오류가 발생하지 않는다.

위 예시에서, 똑같은 이름의 Person이라는 클래스 2개가 있는데,
두 클래스는 다른 패키지에 위치하기 때문에 전혀 문제되지 않는다.

한 번 테스트를 해보자. package1 패키지 밑에 PersonMain.kt를 만든다.
그 후 main 함수에 Person 객체를 만들어 name 속성 값을 출력하면,
도대체 어떤 패키지의 Person 객체의 것이 출력될까?

참고로, 현재 package1 패키지의 Person 클래스의 name 속성에는 "A",
package2 패키지의 Person 클래스의 name 속성에는 "B" 값이 초기화되어 있다.

package package1

fun main() {
    val person = Person()
    println(person.name)
}

위 예시에서는 package1의 Person 객체의 name 속성이 출력된다.
당연한 얘기다. PersonMain.kt가 package1에 존재하기 때문이다.

package package1

import package2.Person

fun main() {
    val person = Person()
    println(person.name)
}

하지만 위 예시처럼 직접 package2의 Person 클래스를 import 한 다음,
Person 객체를 만들게 되면 package2의 Person 객체가 만들어진다.

그런데... 아무리 package2를 import하여 명시를 하였다 한들,
이건 아무래도 좋은 방법이 아닌 것 같다. 좋은 코드가 아니다.

물론 제일 최선책은 둘 중 하나의 클래스명을 변경하는 것이지만,
굳이!!!!!😒 같은 클래스명을 사용해야 하는 경우에는,
as 키워드를 사용하여 클래스에 별칭을 부여할 수 있다!

package package1

import package2.Person as User

fun main() {
    val person = Person()
    val user = User()
    
    println(person.name)
    println(user.name)
}

package2의 Person 클래스에 'User'라는 별칭을 주어 사용하면 된다.

그러면 Person()으로 객체를 생성할 때는 package1의 Person,
User()로 객체를 생성할 때는 package2의 Person 객체가 만들어진다.


사실 as 키워드는 위 예시와 같은 경우보다는,

(추후에 이어서 작성)

0개의 댓글