본문 바로가기

개발일지

[Kotlin] 필드와 변수, 데이터 타입, 늦은 초기화

필드와 변수

val은 불변 필드!

필드의 타입이 필드 뒤에 오고, 콜론(:)으로 구분한다

val name: String = "아린 Kim"

 

타입 추론으로 더 간단하게 구현하기

타입을 지정하면 코틀린이 추론한 타입과 내가 예상한 타입이 다른지 검사할 수 있기 때문에 타입을 지정하는 게 좋다.

val name2 = "아린 Kim"

 

 

var는 가변 필드!

코틀린은 초기화하지 않은 참조를 쓸 수 없게 막는다.

 

변수 선언 + 값 지정 으로 초기화 하기

var name3 = "아린 Kim"
name3 = "김아린"

 

 

변수 선언만 하고 사용하기

var name4: String
name4 = "김아린"

 

 

var 사용은 최대한 자제하는 것이 좋다.

참조 대상이 불변이면 프로그램을 추론하기 쉽기 때문

 

 

 

데이터 타입

Double : 64비트 실수

var doubleValue: Double
doubleValue = 3.141592

 

Float : 32비트 실수

var floatValue: Float
floatValue = 3.141592F

안드로이드 스튜디오는 Double과 Float를 구분하기 위해

Float 숫자 끝에 F를 붙인다

 

 

 

Int : 32비트 정수

var intValue: Int
intValue = 2147483647
intValue = 2_147_483_647

가독성을 높이기 위해 언더바(_)로 자릿수를 구분할 수 있다

컴퓨터는 앞의 값과 동일하게 인식한다

 

 

Long : 64비트 정수

var longValue: Long
longValue = 23L

Int와 Long을 구분하기 위해 Long 숫자 뒤에 L을 붙인다

 

 

 

Short : 16비트 정수

var shortValue: Short = 32_767

 

Byte : 8비트 정수

var byteValue: Byte = 127

 

Char : 1개의 문자, 외따옴표(')로 감싸서 저장

var charValue = "A"

타입 지정을 따로 안해도 따옴표 안에 하나의 글자만 지정하므로 Char형으로 저장된다

 

 

String : 여러 개의 문자

var stringValue: String = "ABC"

 

Boolean : true, false 두 가지 값

var booleanValue = true

 

 

 

늦은 초기화

null이 될 수 있는 타입과 null이 될 수 없는 타입을 구분하므로

null 값을 사용하여 초기화하기 보다는 늦은 초기화를 권장한다

 

var를 사용해야 한다면, null이 될 수 있는 참조를 사용해야 한다

var name: String? = null

name이라는 참조의 타입은 String이고, '?' 표기를 사용하여 name이 null 값을 가지도록 허용한다

 

 

 

어떤 경우든 초기화 한 후에 값이 절대 변하지 않더라도 참조 선언에 var를 사용해야 한다

var name2: String = "초기화_이전"

빈 문자열로 초기화되지 않은 참조를 표현했다

 

 

 

val의 늦은 초기화 -> by lazy

val name: String by lazy { getName() }

 

var의 늦은 초기화 -> lateinit

lateinit var name3: String
name = getName()

lateinit은 최초 사용 시에 초기화 되지 않지만, 어떤 면에서 by lazy와 같은 효과를 낸다