코틀린 문법 공부를 시작하며
약 1년 반동안 자바로 Spring 개발, 알고리즘 공부 뿐만 아니라 모든 프로젝트를 자바로 개발해왔다.
하지만 2022년도 1학기 TLOVER라는 앱을 개발하면서 안드로이드 공부를 시작했고,
코틀린이라는 언어로 TLOVER앱을 론칭했다.
코틀린에 대한 지식 없이 구글링으로만 개발을 해서 부족한 부분이 많았고, 객체지향인 점에서는 같지만
자바하고와의 차이점은 굉장했다. 자바에서의 10줄 넘는 코드가 코틀린에서는 단 3줄로 끝나는 경우도 있었다.
편리한 점이 굉장히 많았지만 익숙했던 자바의 코드때문에 헷갈리는 부분이 많아 제대로 활용하지 못했다.
따라서 인프런 최태현 강사님의 자바 개발자를 위한 코틀린 입문 이라는 강의를 듣고
내가 알고있던 자바하고와의 차이를 비교해가며 공부할 예정이다!!
1. 변수
1-1.
자바에서의 변수는
long number1 = 10L
final long number2 = 10L
이런식으로 표현될 수 있었던 코드가 코틀린에서는 val, var로 적용된다.
결론부터 말하자면 var은 바뀔 수 있는 변수를 의미하며,
val은 바꿀 수 없는 변수이다. 자바에서의 final과 같다고 볼 수 있다.
var number1 = 10L //바뀔 수 있는 변수
//자동으로 타입을 의무적으로 적어주지 않아도 됨
val number2 = 10L //바꿀 수 없는 변수, 자바에서의 final과 같음
1-2.
또한, 다음과 같이 초기화 하지 않았을 경우에는 null을 출력하게 되기 때문에 에러가 발생한다.
var number3 : Long //초기화 하지 않은 변수를 사용하기 위해선 변수의 타입을 적어주어야함
//println(number3) 값이 없기 때문에 에러가 발생함
*이렇게 코틀린에서는 기본적으로 null값을 허용하지 않는다. 따라서 null값을 허용하려면 다음과 같이 사용할 수 있다.
var number6: Long? = 10L //이는 아예 다른 타입
//number6 = null 기본적으로 null값을 허용하지 않음
number6 = null //이는 허용 타입 + ? 를 적어주어야함
1-3.
객체를 인스턴스화 할 때 자바에서는 new를 사용하였지만 코틀린에서는 다음과 같이 생략 가능하다.
var person = Person("윤성식")
//객체를 인스턴스화 할 때 new를 붙이지 않아야 한다
2. Null
2-1.
fun startWithA1(str: String?): Boolean { //null이 들어와야하기 때문에 ?를 붙여줌
if(str == null){
throw IllegalArgumentException("null")
}
/*
이 if문이 만일 없으면 바로 str.startWith() 함수가 실행을 못하게 되어있음.
그 이유는 현재 String? 으로 인해서 null값이 들어올 수 있다는 것을 명시적으로 알려주었기 때문에
null이 될 수도 있다는 가정하에 코틀린에서 막아두었다.
따라서 만일 str: String 이렇게 적어주었다면, 따로 null체크를 안하더라도 실행 가능
*/
return str.startsWith("A")
}
해당 함수는 문자열이 들어왔을 때 해당 문자열이 A로 시작하는지 아닌지를 반환해주는 함수이다.
위의 코드 설명처럼 Boolean? 이 아니므로 null로 따로 예외처리를 해주어야한다.
이렇게 조건문으로 따로 예외처리를 해주지 않고도 할 수 있는 방법이 있다.
safe call을 이용하면 더욱 편리하게 구현 가능하다.
fun startWithA1(str: String?): Boolean { //null이 들어와야하기 때문에 ?를 붙여줌
return str?.startsWith("A")
?: throw IllegalArgumentException("null")
위와 똑같은 코드이다. ?를 통해 null값을 허용하고 만일 null이 아니면 startWith가 실행되고
null이면 Exception처리가 되는 코드이다!! 위와 동일하지만 더욱 간단하게 구현 가능하다.
2-2.
밑의 코드는 위의 코드와 다르게 Boolean? 형태로 반환되어 null값을 허용하는 코드이다.
fun startWithA2(str: String?): Boolean? { //return 값에 null이 들어갈 수 있기 때문에 ?를 뒤에도 적어줌
/*
여기서 단순히 ?로 반환이 가능한 이유는 반환 타입이 Boolean? 이기 때문이다.
애초에 null값을 허용하기 때문에 바로 return이 가능하다.
*/
return str?.startsWith("A")
// if(str == null){
// return null
// }
// return str.startsWith("A")
}
하지만 위의 코드처럼 반환형이 Boolean? 형식이라면 null값을 허용하기 때문에 주석처리 된 코드처럼 구현을 할 수도 있고,
str?.startWith("A")로 단순히 반환이 가능하다.
2-3.
fun startsWith(str: String?): Boolean{
//들어오는 값이 null이더라도 반환하는 값이 null이 절대 아닐 경우가 될 경우에는 !!를 붙여주면 됨
//하지만 이 때 실제로 null값이 들어올 경우에는 NPE에러가 발생함
//정말 null이 아닐 경우에만 사용해주어야함!!!
return str!!.startsWith("A")
}
만일 startWith함수가 null값을 반환하는 함수가 절대 아닌 경우에는 !!를 사용하여 에러를 방지할 수 있다.
하지만 null이 들어올 경우에는 NPE에러가 발생하며, 이를 방지하기 위해서는 꼭 null값이 아닐 경우에는 사용해주어야한다!!
'Kotlin > Basic' 카테고리의 다른 글
[Kotlin/Basic] 코틀린에서의 예외처리 (0) | 2022.08.13 |
---|---|
[Kotlin/Basic] 코틀린에서의 반복문 (0) | 2022.07.27 |
[Kotlin/Basic] 코틀린에서의 제어문 (0) | 2022.07.25 |
[Kotlin/Basic] 코틀린에서의 연산자 (0) | 2022.07.22 |
[Kotlin/Basic] 코틀린에서의 Type (0) | 2022.07.21 |