티스토리 뷰

반응형

비즈니스 로직이 어떤 유형의 래퍼를 작성해야하는 경우가 있습니다.

그러나 추가 힙 할당으로 인해 런타임 오버 헤드가 발생합니다. 또한 래퍼 된 유형이 프리미티브 인 경우 원시 형식은 일반적으로 런타임에서 크게 최적화되므로 래퍼는 특별한 처리를하지 않기 때문에 성능이 저하됩니다.

 

이러한 문제를 해결하기 위해 Kotlin은 클래스라는 이름 앞에 한정자를 inline class배치하여 선언되는 특별한 클래스의 클래스를 소개합니다 inline.

 

인라인 클래스 특징

  • 생성자에 초기화 된 단일 속성이 있어야합니다.
  • 클래스는 실제 인스턴스화가 발생하지 않습니다.
  • init 블록을 가질 수 없습니다.
  • 인라인 클래스 속성에는 배경 필드가 있을 수 없습니다. (계산 가능한 속성만 가질수 있음)
  • 인라인 클래스는 다른 클래스를 확장 할 수 없습니다.
  • 인터페이스 상속이 가능합니다.
fun main(args: Array<String>) {
	// User 클래스 인스터스화가 발생하지 않습니다.
	// 정적 메서드로 호출됩니다.
	val user = User("홍길동")
	println(user)
	println(user.length)
	println(user.output()) 
	println(user.getAge()) 
}

interface Age {
	fun getAge(): Int
}

inline class User(val name: String) : Age {
	val length: Int
		get () = name.length

	fun output() = name
	override fun getAge() = 99
}
/*
 실행 결과
 User(name=홍길동)
 3
 홍길동
 99
*/

 

위 코드를 이해하기 위해서는 아래 코틀린 문법이 필수입니다.

2019/05/19 - [Kotlin] - 코틀린 기초 문법) 1. 코틀린 변수 정의하기

2019/05/19 - [Kotlin] - 코틀린 기초 문법) 2. 코틀린 함수 정의하기

2019/05/22 - [Kotlin] - 코틀린 기초 문법) 10. 코틀린 클래스와 생성자, init 키워드 알아보기

2019/05/24 - [Kotlin] - 코틀린 기초 문법) 12. 코틀린 오버라이딩, 오버로딩 알아보기

2019/05/25 - [Kotlin] - 코틀린 기초 문법) 15. 코틀린 추상 클래스 및 인터페이스

반응형
댓글
최근에 올라온 글
최근에 달린 댓글