일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- jvm이란
- android retrofit login
- 안드로이드 os 구조
- 안드로이드 유닛 테스트 예시
- 안드로이드 라이선스 종류
- 안드로이드 라이선스
- rxjava cold observable
- rxjava hot observable
- 안드로이드 유닛테스트란
- 서비스 vs 쓰레드
- 자바 다형성
- jvm 작동 원리
- 서비스 쓰레드 차이
- 2022 플러터 안드로이드 스튜디오
- Rxjava Observable
- 스택 큐 차이
- 스택 자바 코드
- 2022 플러터 설치
- 멤버변수
- 큐 자바 코드
- 안드로이드 유닛 테스트
- rxjava disposable
- ANR이란
- 객체
- android ar 개발
- ar vr 차이
- 클래스
- 플러터 설치 2022
- 안드로이드 레트로핏 crud
- 안드로이드 레트로핏 사용법
- Today
- Total
나만을 위한 블로그
[Kotlin] 코틀린에서의 변수 선언법(val과 var의 차이, null) 본문
코틀린을 사용할 때 변수를 선언하려면 아래와 같이 한다. 띄어쓰기는 굳이 할 필요 없다.
val 변수명: 타입
var 변수명: 타입
String을 써서 문자열 데이터를 집어넣는다면 아래와 같이 할 수 있다.
val name: "Tistory"
그리고 코틀린에선 자바처럼 세미콜론(;)을 붙일 필요가 없다. 맨날 쓰다 안 쓰려니까 허전하다
처음에 이 부분을 보고, val과 var로 나눠쓰는 이유가 궁금했다.
그래서 상상해봤다. 특징이 다른 걸 강조하기 위함인가? 그냥 단순하게 철자가 다른가? int와 Integer의 차이같은 건가? 여러가지로 상상해봤지만 답은 서로 특징이 다르기 때문이었다.
- val
먼저 val은 Valueable의 줄임말이다. Valuable의 사전적 의미는 "소중한, 귀중한, 가치가 큰"이다.
이 키워드가 붙은 변수는 읽을 수만 있고 수정할 수는 없는 변수가 된다. 자바로 치면 final 키워드가 붙은 변수라고 생각하면 된다. 하긴 소중한 것이니 함부로 바뀌면 안 될 것이다.
한번 간단한 예시를 보자.
fun main(args: Array<String>)
{
val a: String = "aaa"
a = "bbb"
}
val 키워드를 갖는 String 형의 a란 변수를 만들고, 안에 aaa 문자열을 저장했다.
그리고 바로 밑에서 a에 "bbb"라는 값으로 바꿔치기하기를 시도했다. 이렇게 하면 a = "bbb"의 a 아래에 빨간 줄이 생긴다. 마우스를 갖다대면 아래와 같은 문구가 나온다.
reassign은 "다시 맡기다" 란 뜻이 있는 동사다. 즉 위 문구는 val을 사용한 변수에는 값을 재할당할 수 없다는 뜻이다.
근데 난 당장 죽어도 a에 bbb라는 문자열을 넣고 싶다면 어떻게 해야 할까?
- var
그럼 val을 var로 바꾸면 된다. 그럼 끝이다.
여기서 var이 어떤 특징을 갖고 있는지 추측해볼 수 있다. var은 읽기/쓰기가 가능한 변수를 만드는 키워드다.
추측이 맞는지 확인해보자.
fun main(args: Array<String>)
{
var a: String = "aaa"
a = "bbb"
println(a)
}
이제 println()도 넣어서 출력도 해보자. 그럼 아래와 같은 결과가 출력된다.
그리고 자바를 써봤다면 절대로 1번은 꼭 보거나 듣는 것이 Null이다. 앱 개발할 때 이놈보면 저혈압이 완치된다
코틀린에는 Non-null 타입과 Nullable이란 타입이 있다. 이름 보면 무슨 특징을 가진 놈들인지 각이 보인다.
Non-null 타입 = 앞에 Non이 붙었으니 Null을 값으로 가질 수 없다
Nullable 타입 = Null 뒤에 can과 같은 의미인 able이 붙었으니 Null을 가질 수 있다
그럼 코드로는 어떻게 표현할까? 위의 코드를 고쳐서 a에 null이란 값을 넣어보자.
fun main(args: Array<String>)
{
val a: String = null
}
그럼 아래와 같은 에러가 null 밑에 나타난다.
대충 번역기 돌리면 "Null은 null이 아닌 유형의 문자열 값이 될 수 없습니다" 라는 뜻이다.
여기서 정보를 하나 얻었다. String은 Non-null 타입의 자료형이란 것이다.
아무튼 나는 a에 null을 넣어야 한다. 즉, Nullable한 변수로 만들고 싶다. 어떻게 하면 될까?
방법은 간단하다. String 뒤에 ?만 붙이면 된다.
fun main(args: Array<String>)
{
val a: String? = null
}
이렇게 하면 String 변수라도 Nullable한 String 변수가 되버린다.
이걸 출력하면 콘솔창에 null이 출력된다.
정리하자.
- val 키워드로 변수를 선언 및 초기화하면 다른 값으로 바꿔치기할 수 없다.
- var 키워드로 변수를 선언 및 초기화해도 다른 값으로 바꿔치기할 수 있다.
- 코틀린은 Non-null, Nullable 2가지 타입이 있다. Nullable한 변수로 만들려면 자료형 뒤에 ?을 붙인다.
자바와 형태가 다를 뿐이지 짧게 공부하고 사용해본 결과 확실히 자바보단 코틀린이 더 편한 것 같다.
'개인 공부 > Kotlin' 카테고리의 다른 글
[Kotlin] is 연산자와 as 연산자의 차이 (0) | 2021.05.23 |
---|---|
[Kotlin] 확장 함수(Extension Functions)란? (0) | 2020.11.01 |
[Kotlin] 안드로이드에서 코틀린으로 쉐어드 프리퍼런스 사용하는 법 (0) | 2020.10.25 |
[Kotlin] 코틀린의 컬렉션(List, Map, Set) (0) | 2020.10.17 |
[Kotlin] 안드로이드 인텐트로 액티비티 간 데이터 전달하는 법 (0) | 2020.10.17 |