Home Kotlin - 변수
Post
Cancel

Kotlin - 변수

Java 코드를 확인하고 그와 관련해서 Kotlin에서는 어떻게 표현하는 지 확인하는 방법으로 Kotlin에 대해 정리하고자 한다.

var vs val

Java

1
2
3
4
5
long number1 = 10L;
final long number2 = 10L;

Long number3 = 1_000L; //객체 타입 변수
Person person = new Person("Lee"); //클래스 변수
  • long vs final long
    • 불변성에서 차이가 있다.
  • long vs Long
    • long: primitive type
    • Long: reference type
      • 단순 연산에서는 불필요한 객체 생성이 일어날 수 있음.

Kotlin

1
2
var number1 = 10L
val number2 = 10L
  • var (variable) (발)
    • 가변 변수일 때 작성
  • val (value) (밸)
    • 불변 변수일 때 작성

코틀린에서는 모든 변수에 수정 가능 여부를 넣어주어야 한다. (var or val)

타입 명시

코틀린에서는 타입을 추론해주기 때문에 타입을 명시적으로 반드시 표기할 필요는 없지만, 표기하고 싶다면 위와 같이 할 수 있다.

1
2
var number1: Long = 10L
val number2: Long = 10L

변수 초기값 지정

1
var number: Int

변수 선언 시 초기화를 하지 않을 때는 타입을 추론할 수 없으므로 명시적으로 표기해주어야 한다.

1
2
3
4
5
var number: Int
number = 3

val number2: Int
number2 = 7

val 변수에서는 최초 한 번 초기화되지 않은 변수에 값을 넣을 수 있도록 허용해준다.

모든 변수를 우선 val로 만들고 필요한 경우 var로 변경하는 방식으로 코딩한다면 코드가 비교적 안전해지는 효과를 얻을 수 있다.

val 컬렉션

val 컬렉션에는 element를 추가할 수 있다. (자바와 마찬가지)

1
2
3
4
final List<Integer> list = Arrays.asList(1, 2);
list = Arrays.asList(2, 3); (X)

list.add(3); (O)

위와 같은 자바코드 처럼 컬렉션 자체의 변경은 불가능하지만 컬렉션의 element는 추가 가능하다.

1
2
val list1 = arrayListOf(1,2)  
list1.add(3);

Kotlin에서의 Primitive Type

코틀린은 기본적으로 타입을 추론할 때 long 타입일 경우 Long으로 나타내게 된다.

그런데 연산을 할 때는 long과 같은 primitive type을 권장한다. 성능상으로 이점이 있기 때문이다.

코틀린은 이러한 부분을 자동으로 지원해준다.

프로그래머가 boxing/unboxing을 고려하지 않아도 되도록 코틀린이 알아서 처리해준다.

kotlin에서의 nullable 변수

1
2
3
4
5
var number3 = 1_000L
number3 = null (X)

var number3: Long? = 1_000L
number3 = null (O)

코틀린은 변수를 만들 때 null 값이 들어갈 수 있는지 없는지를 표기해주어야 한다.

타입을 표기해주고 그 옆에 ?를 붙여주면 된다.

kotlin 객체 인스턴스화

1
Person person = new Person("Lee");

자바에서는 보통 위와 같이 객체를 인스턴스화 하게 된다.

1
val person = Person("Lee")

코틀린에서 객체를 인스턴스화 할 때는 new 키워드를 붙이지 않는다.

정리

  • 모든 변수는 var / val을 붙여주어야 한다.
    • var: 가변 / val: 불변
  • 타입을 명시적으로 작성하지 않아도 된다.
    • 타입 추론
  • Primitive Type과 Reference Type을 구분하지 않아도 된다.
  • Null이 들어갈 수 있는 변수는 타입 뒤에 ?를 붙여주어야 한다.
    • 아예 다른 타입으로 간주된다.
  • 객체를 인스턴스화 할 때 new 키워드를 붙이지 않는다.
This post is licensed under CC BY 4.0 by the author.