◎ 코틀린에서 변수를 선언하는 2가지 방법 - val, var
코틀린에서 변수를 선언하는 방법에는 2가지가 있다. value를 뜻하는 val과 variable을 뜻하는 var이 있다.
1) val
val은 한 번 초깃값이 할당되면 추후에 값의 변경이 불가하다. 상수 개념이라고 보면 된다. val로 변수를 선언하고 값의 변경을 시도하면 오류가 발생한다.
2) var
var은 val과는 달리 초깃값이 할당된 이후에도 값의 변경이 가능하다.
◎ 변수 타입 지정 및 null 허용
코틀린에서는 변수의 타입을 지정할 수 있다. 변수명 뒤에 콜론(:)을 추가하여 타입을 명시할 수 있고 데이터에 따라 값의 추론이 가능한 경우에는 타입 지정을 생략할 수 있다.
- 초깃값 할당
코틀린에서 최상위에 선언한 변수나 클래스의 멤버 변수는 선언과 동시에 초깃값을 할당해야 한다. 반면 함수 내부에 선언한 변수는 타입을 지정한다면 선언과 동시에 초깃값을 할당하지 않아도 된다.
- 널(null) 허용
코틀린에서는 변수가 null값을 가지게 할 수 있다. 타입 지정 맨 뒷부분에 물음표(?)를 붙여주기만 하면 된다. 변수가 null을 가질 수 있는 경우에는 신경써야 할 부분이 있는데 이 내용은 다른 글에서 다루도록 하겠다. 여기서는 null 값을 가질 수 있다는 사실과 그 방법에 대해서만 알고 넘어가자.
◎ 지연 초기화 - lateinit, lazy
앞서 말한 것처럼 최상위나 클래스의 멤버 변수에서는 변수의 선언과 동시에 할당이 이뤄져야 한다. 그러나 만약 할당이 불가능한 경우에는 지연 초기화를 사용하면 된다.
1) lateinit
lateinit 키워드는 변수 선언의 맨 앞부분에 사용하면 된다. 이는 컴파일러에게 값을 이후에 할당할 것이라고 알려주는 기능을 한다. lateinit 키워드에는 다음 2가지의 주의사항이 있다.
- val 키워드가 아닌 var 키워드로 선언한 변수에만 사용 가능(val은 재할당이 불가하기 때문)
- 기본 타입(Int, Short, Long, Float, Double, Boolean, Byte)에는 사용 불가
2) lazy
변수 선언의 맨 앞부분에 사용하는 lateinit과는 달리 lazy는 타입 지정 뒷부분에 by lazy { } 형태로 사용한다. by lazy 키워드에도 다음의 주의사항이 존재한다.
- val 키워드로 선언한 변수에만 사용 가능
- by lazy 중괄호의 맨 마지막 줄의 실행 결과가 변수의 초깃값이 됨
◎ 함수 선언
코틀린에서 함수를 선언할 땐 fun 키워드를 사용한다. 함수의 선언 형태는 다음과 같다.
fun 함수명(매개변수명: 타입): 반환 타입 {...}
1) 반환 타입
- 함수의 반환 타입을 생략하는 경우에는 아무것도 반환하지 않음을 뜻하는 Unit 타입이 된다. 아무것도 입력하지 않았는데 return을 하려하면 오류가 발생한다.
- 반환 타입과 실제 반환되는 값의 타입이 일치하지 않을 경우에는 오류가 발생한다.
2) 매개변수
- 매개변수가 없는 경우에는 생략 가능
- 매개변수에 var이나 val 키워드 사용 불가능
- val이 자동으로 적용되기 때문에 매개변수 값 변경 불가능
- 매개변수에 기본값 선언 가능(기본값이 선언된 매개변수는 기본값이 선언되지 않은 매개변수보다 앞에 올 수 없음)
- 매개변수가 여러 개면 호출할 때 전달할 인자를 순서대로 할당해야 함
그러나 매개변수의 이름을 붙여 호출하는 방법을 사용하면 순서를 지키지 않아도 된다. 이러한 방법을 명명된 매개변수(named parameter)라고 한다.