Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Project Valhalla, Value Class (김희망)

hope
July 02, 2024
130

Project Valhalla, Value Class (김희망)

KotlinConf'24 Global in South Korea Presentation.

hope

July 02, 2024
Tweet

Transcript

  1. About K-hope 2006. 02. 06 (18 yo) Email: [email protected] School:

    Gwangju Software Meister Highschool Major: Server Developer
  2. Primitive Type int, long, float, double, boolean, byte, short, char

    (8가지) stack memory에 저장되는 데이터들
  3. Primitive Type int, long, float, double, boolean, byte, short, char

    (8가지) stack memory에 저장되는 데이터들 실제 데이터 값을 저장하는 타입(정수, 실수, 문자, 논리 리터럴 등)
  4. Reference Type 원시타입을 제외한 상위 타입들 Java에서 최상위 클래스인 java.lang.Object

    클래스를 상속하는 모든 클래스 String, Array, Enum, Class, Interface … 실제 객체들은 Heap 메모리에 저장, 참조 타입 변수는 Stack 메모리에 실제 객체 주소를 저장하여, 참조 변수에 저장된 객체의 주소를 불러와 사용하는 방식
  5. Primitive Type Field 하나만 가진 Value Class Primitve 표현, 객체

    호환성 유지, 래퍼 클래스의 오버헤드 해결
  6. Kotlin Value Class의 특징 1. @JvmInline 어노테이션과 함께 사용해야 한다.

    2. 자동 생성 메서드는 equals(), toString(), hashCode()만 있다. 3. 불변 프로퍼티 1개만 가질 수 있다. 4. 컴파일 타임 === 비교를 허용하지 않는다.
  7. 1. @JvmInline 어노테이션과 함께 사용해야 한다. 어노테이션을 붙여줘야 컴파일 과정에서

    컴파일러가 해당 어노테이션을 보고 value class의 인스턴스가 런타임에 원시값 혹은 문자열로 저장되어야함을 알 수가 있다.
  8. 컴파일 이후 value class 값과 메서드가 벗겨지면서 상위 클래스로 스며들어야

    한다. 그때 그 메서드가 중복되는 문제가 발생할 수 있어 난수를 붙여 문제를 해결한다.
  9. 3. 불변(val) 프로퍼티만 가질 수 있다. Val은 본질적으로 Value의 약자입니다.

    객체가 아닌 “값”으로 나타내기 위해 하나의 프로퍼티만 존재해야 하며 최적화를 위해서 불변한 값이여야 합니다.
  10. 성능 테스트 1. 객체 생성 속도 테스트 2. 값 참조

    및 연산 속도 테스트 3. 힙 메모리 테스트
  11. 2. 값 참조 및 연산 속도 테스트 값 참조 및

    연산 속도 테스트 – 유의미한 차이가 없다
  12. 3. Heap 메모리 테스트 List에는 Primitive Type을 저장할 수 없음.

    (Auto Boxing이 발생함.) 따라서 객체 생성이 되고 결국 메모리 또한 큰 차이가 없음.