Kotlin (코틀린)

[Kotlin] 클래스 · 자료형 이름을 내 마음대로 사용하기 / 클래스에 별명 붙이기 / 자료형에 별명 붙이기

Oscar:) 2024. 6. 2. 15:06

 

 

이번 포스팅에서는 클래스에 별명을 붙여 사용하는 방법을 알아본다.

 

 

 


 

클래스에 별명 붙이기

 

 

지난 포스팅에서 다뤄보았던 as 키워드를 이용하여

클래스에 원하는 별명을 붙여 사용할 수 있다.

 

 

AbledStudent 라는 데이터 클래스를 생성해주고,

해당 클래스를 사용할 메인 클래스에서 인스턴스화하는 과정이다.

// 데이터 클래스
data class ExampleStudent(val name: String, val age: Int)


// 메인
import ExampleStudent as Student

...

val student = Student("Oscar", 29)

 

사용할 클래스에서 import 할 때, as 키워드로 별명을 붙여 캐스팅할 수 있다.

 

 

 

당연히 코드를 작성할때만 별명대로 사용할 수 있는 것이고,

실제로는 원래 클래스명으로 취급된다.

 

 

 


자료형에 별명 붙이기

 

 

import 해야하는 클래스가 아닌 기본 자료형조차 별명을 붙여 사용할 수 있으며,

typealias 키워드를 사용한다.

 

typealias Oscar = String

...

val message: Oscar = "오스카를 이제부터 스트링으로 사용할 수 있다."
println(message)

 

이제 해당 파일에서 Oscar는 String 취급을 받는다.

 

 

결과)

 

 

 


위와 같이 사용하는 이유?

 

 

단순히 생각하면 내 맘대로 이름을 붙여 사용하는 재미(?)를 느끼는 기능이라고 생각할 수 있다.

 

하지만 공식적인 기능이 재미를 위해 지원될 리가 없다.

 

 

 

✅ 식별 용도 : 여러 패키지에 동일한 이름의 클래스가 존재할 때

 

간혹 동일한 이름의 클래스를 헷갈려서 의도와 다른 클래스를 import 해본 경험이 있을 것이다.

 

정말 간단한 예시로 Call 클래스를 보자.

 

 

위 처럼 여러 패키지에 동일한 이름의 클래스가 많을 때는 혼동이 오기 마련이다.

 

사실 대부분의 경우에는 사용할 클래스를 한 번 import 해놓으면 그 이후에는

자동으로 해당 클래스만 호출되기에 작업하는데 큰 불편함은 없다.

 

 

하지만 동일한 파일 내에서 동일한 이름의 다른 클래스를 여러 개 사용해야 한다면?

호출할 때마다 헷갈릴 수 밖에 없을 것이다.

 

import retrofit2.Call as RetrofitCall
import okhttp3.Call as OkhttpCall

 

이러한 상황에서 우리는 as 키워드로 클래스에 별명을 붙여서 구분할 수 있다.

 

어디까지나 Call 클래스는 예시일 뿐이고, 동일한 이름이 더 많은 클래스도 많다.

 

 

 


 

 

✅ 축약 용도 : 클래스명이 길거나 복잡할 때

 

클래스명, 변수명 네이밍은 개발자에게 있어 은근 골칫덩어리다.

 

한 눈에 알아보기 편하도록 직관적이어야 하지만, 이름 속에 명확한 의미는 담겨야하고,,

유사한 이름이 많을 수 있을때는 쉽게 식별할 수도 있어야 하는 등

네이밍은 정말 까다롭다.

 

당연히 기업·단체마다 기준이 다르겠지만, 대부분의 경우 네이밍은 명확하게 하는 편이다.

그렇게 프로젝트 규모가 점점 커지다보면, 클래스나 변수의 이름이 점점 길어지기 마련이다.

 

 

 

예시로, 알람 이벤트를 나타내는 리사이클러뷰의 어댑터 클래스 이름을 지어보자.

val adapter: AlarmEventRecyclerViewAdapter = AlarmEventRecyclerViewAdapter()

 

기능의 이름만 가지고 명확히 표현하려해도 벌써 길어진다.

아무리 카멜 표기법이 가독성이 좋다고 해도, 낙타도 혹은 2개까지밖에 없다.

 

 

 

우리는 이와 같은 상황에서 클래스명을 축약하는 용도로 사용할 수도 있다.

import AlarmEventRecyclerViewAdapter as Adapter

val adapter: Adapter = Adapter()

 

물론 동일한 파일 내에서 여러 어댑터를 다룬다면 축약 목적은 별로 좋지 않은 방법이겠다.

그러니 각자의 상황에 맞게끔 사용하는 것이 중요하다.

 

 

 


 

 

 

프로젝트 규모가 많이 커지거나, 여러 라이브러리를 주입 받아서 참조하는 패키지가 많아졌을 때

정말 유용하게 사용할 수 있을 것 같다.