코틀린 인라인클래스(inline class)

Koder·2023년 1월 26일
0

inline class

  • 오버헤드 없이 타입 래핑을 안정적으로 하도록 도와주는 기능
  • 한개의 속성을 보유한 클래스는 inline 특성을 가질수 있다. (2개 이상은 오류)
  • 인라인 클래스의 메소드는 모두 정적 메소드로 변환 됩니다.

언제 쓸까? (잘못된 타입인식 예방)

  • 특정 함수가 있는대 Primitive 같은 단순한 속성이거나 일반적인 문자일때 값을 잘못 넣을까 고민 될때가 있을것인대 이를 클래스를 생성하여 강제화 하는것이다.
  • 코드상에서는 inline class로 실제 클래스를 사용하는것 처럼 보이지만 컴파일이 되고나면 실제 Variable 형태로 변하게 되어 가볍게 동작한다.
  • 속성을 한가지밖에 사용하지 못하기 때문에 inline class안에 String이면 실제 컴파일 후에는 val name: String이 된다.
fun humanMake(person: Person) {
    println(person.name)
}

inline class Person(val name: String){
    fun introduce(){
        println("my name is $name")
    }
}

//TODO: 
humanMake(Person("john"))

그외에도 흔히 사용하는 Jpa에서 중요한 속성의 Entity에도 활용이 가능하며 다음과 같다.

// 인라인 클래스
inline class PrimaryKeyId(val id: Long)
inline class Name(val name: String)

// 취향이 갈릴수 있으니 판단은 구현자의 몫
@Entity
data class Member(
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private val id: PrimaryKeyId,

    @Column(unique = true)
    private val name: Name,
)
profile
일단 적고 보자

0개의 댓글