Kotlin 기본 문법 정리 -1

김민제·2022년 7월 12일
0

머리말

❓Kotlin의 문법은 편리한 기능이 정말 많다. 나는 알고리즘 문제를 Kotiln으로 풀고 이후 치를 코딩 테스트 또한 Kotlin을 사용하고 싶기 때문에 Kotlin의 기본 문법을 차근차근 정리하려고 한다.

Kotlin 기본 문법

변수 선언 (Variable declaration)

kotlin은 var와 val을 사용하여 변수를 선언한다. 기본적으로 var와 val 둘 다 값을 할당하지 않는다면 Type을 명시해줘야 한다.

val(immutable type)

👉초기에 값을 할당하게 되면 값을 변경할 수 없다.(값을 변경하게 되면 컴파일 에러 발생)
👉val 변수가 한번만 초기화되는 것이 맞다면 여러 값으로 초기화 가능하다.

fun main(args:Array<String>){
//값을 할당하지 않았기 때문에 Type을 String으로 명시.
	val name : String

//val 변수가 한번만 초기화되는 것이 맞다면 여러 값으로 초기화 가능
	if(true){
	name = "kim"
	}
	else{
	name = "lee"
	}

var(mutable type)

👉초기에 값을 초기화해도 이후에 값을 변경할 수 있다.
👉하지만 처음 정의된 type과 다른 type의 값을 넣을려면 Java처럼 형변환을 해줘야 한다.

fun main(args:Array<String>){
	//초기화 이후에도 값 변경 가능
  var name : String = "kim"
  name = lee
  println("name : $name")//name : lee
  name = 10 // Type mismatch Error

이러한 키워드를 이용하면 변경 가능한 항목을 명시할 수 있다.


유형 추론 (Type inference)

👉kotlin 컴파일러는 초기 값을 할당할 때 할당된 값의 유형을 기반으로 유형을 추론할 수 있다. 이해를 위해 예를 한번 보자.

val name = "kotlin"
val upperCaseName = name.toUpperCase()

name.inc()//Fails to compile

"kotlin"의 값은 String 유형이므로 컴파일러는 name을 String으로 추론한다. 위의 코드에서 toUpperCase()는 String 유형의 변수에서 호출할 수 있는 함수이기 때문에 문제가 없지만 inc()는 Int 유형의 연산자 함수이므로 String에서 호출할 수 없어 compile Error가 발생한다.


Null 안전 (Null safety)

👉일부 언어에서는 초기 값을 명시적으로 제공하지 않고 참조 유형 변수를 선언할 수 있다. 이러한 경우 변수에는 일반적으로 null 값이 포함된다. 하지만 kotlin 변수는 기본적으로 null 값을 보유할 수 없다. null 값을 포함하는 변수는 Nullable 유형이어야 한다. Nullable과 Non-Nullable 프로퍼티에 대해 알아보겠다.

Nullable과 Non-Nullable 프로퍼티

기본적으로 타입을 선언할 때, null을 할당할 수 있으면 ?, null을 할당할 수 없으면 아무것도 붙이지 않고 null이 아닌 것을 보장할 수 있 으면 !!를 붙인다. 코틀린만 사용한다면 Null Pointer Exception 같은 예외가 발생하지 않을 수 있고, 자바처럼 try-catch 구문을 많이 쓰지 않아도 된다는 장점이 있다.

	var nullable : String? = "nullable"
	var non_Nullable : String = "non-nullable"

	nullable = null //compile success
	non_Nullable = null //compile error

Nullable type -> Non-Nullable type

	String getString() {
  	String str = "";
  	....
  	return str;
	}

	var nonNullString: String = getString() //compile error

	var nonNullString1: String = getString()!! //compile success

👉kotlin에서 위와 같이 Java Library를 사용한다고 가정하면 이 함수는 String을 리턴하며, kotlin에서는 이 타입을 nullable인 String?으로 인식한다. kotlin에서 이 함수의 리턴 값을 non-nullable인 String으로 변환하면 프로퍼티가 항상 null이 아닌 것을 보장할 수 있고, try-catch 로 NPE를 처리하지 않아도 된다. 하지만 nonNullString처럼 String?타입을 String타입에 할당하려고 하면 compile error가 발생한다. compile error가 발생하지 않으려면 nonNullString1처럼 null이 아닌 것을 보장하는 !!연산자를 사용해줘야 한다.
nullable 프로퍼티 접근은 다음에 더 자세히 알아보겠다.


정리

  • 변수 참조를 재할당할 수 있어야 하는 경우 = var
  • 변경될 수 없는 값을 할당하는 경우 = val
  • kotlin 컴파일러는 초기 값을 할당할 때 할당된 값의 유형을 기반으로 유형을 추론할 수 있다.
  • null을 할당할 수 있으면 ?
  • null을 할당할 수 없으면 아무것도 붙이지 않고
  • null이 아닌 것을 보장할 수 있으면 !!
profile
오늘의 작은 하루가 쌓여 내일의 내가 된다.🏃

0개의 댓글