Kotlin const val 과 val

Ddudduu·2023년 5월 26일
0

Kotlin 에서 읽기 전용 인 값을 만들고 싶다면, const val , val 을 사용하면 된다. 오늘은 이 둘의 차이를 알아보려고 한다.

그전에! java 를 먼저 짚고 가자면..

Java 의 static, final

Java 에서는 static, final 을 사용했었다. 간단하게 설명하면

  1. static
  • 객체 생성 없이 사용 가능하며 컴파일 시에 메모리가 할당된다.
    => 프로그램이 종료될 때까지 메모리에 남아있기 때문에 성능 문제 발생 가능
  1. final
  • 변수, 메소드, 클래스 등 선언 후 재정의 불가능하다.
  • 선언과 동시에 초기화된다.
  1. static final
  • 주로 상수를 선언할 때 사용된다.
  • 변경 불가 & 객체 생성하지 않고 접근이 가능하다.

Const val

  • 컴파일 시 할당 된다.
  • String, primitive type 으로 초기화되어야 한다.
  • 클래스의 속성이나 지역 변수로 사용할 수 없다.
    => 클래스나 함수에서 선언 불가능
  • 객체 생성이 필요없는 최상위 함수, object 에서만 정의할 수 있다.
  • 객체를 생성하지 않고 이름으로 접근할 수 있다.
  • Java 의 static final 과 유사

Java 에서는 Primitive type (원시 타입)과 Reference type (참조 타입) 을 구분한다.

Primitive type 이란?
Int, String, Boolean 등 실제 데이터 값을 저장하는 타입. 변수에 직접 값을 저장한다.

Reference type 이란?
객체의 주소를 저장해 참조하는 타입. 변수에 메모리상의 객체 주소값이 저장된다. 참조 타입은 런타임 시 객체가 할당된다.

벗!!! Kotlin 에서는 원시 타입과 참조 타입을 구분하지 않는다.

  • const 는 컴파일 시 할당되기 때문에, 런타임에 할당되는 reference type 을 사용하면, 컴파일 에러가 발생한다.

  • 예시

const val SUBSYSTEM_DEPRECATED: String = "This subsystem is deprecated"

@Deprecated(SUBSYSTEM_DEPRECATED) fun foo() { ... }

val

  • 런타임 시 할당된다.
  • Java 의 final 와 유사
  • getter 메소드에서 재정의 가능 -> 초기 할당 값과 다른 값을 리턴하도록 할 수 있다.
profile
Android

0개의 댓글