본문 바로가기

Kotlin/Kotlin In Action

코틀린 기초

1. 기본 요소: 함수와 변수

코틀린의 if는 문장이 아니고 결과를 만드는 식이다.

fun max(a: Int, b: Int): Int {
	return if (a > b) a else b
}

자바에서 if문은 값을 만들어 내지 못하는 문장이지만 코틀린에서는 식이 된다.

1-2. 문과 식의 구문

🥨 식(Expression) vs 문(Statement)
식: 리턴 값을 만들어 내기 때문에 계산에 참여할 수 있다.
문: 일종의 블록으로 리턴 값을 만들 수 없다.

코틀린은 식이 본문인 함수일 경우 중괄호와 return을 제거하며 등호(=)를 이용해 간결하게 함수를 표현할 수가 있다. 아래의 두 함수는 같은 코드이다.

// 블록이 본문인 함수
fun max(a: Int, b: Int) : Int {
    if(a > b) {
    	return a
    } else {
        return b
    }
}

// 식이 본문인 함수
fun max(a: Int, b: Int): Int = if(a > b) a else b

1-3. 타입 추론

코틀린은 반환 타입 생략이 가능하다. 식이 본문인 함수의 경우 컴파일러가 함수 본문 식을 분석해 식의 결과 타입으로 함수의 반환 타입으로 지정해준다. 컴파일러가 타입을 분석해 프로그래머 대신 프로그램 구성 요소의 타입을 정해주는 기능을 타입 추론이라고 한다. 단, 블록이 본문인 함수인 경우에는 타입 추론이 불가능하기 때문에 반환 타입 지정과 return문을 사용해 반환 값 명시가 필수이다.

2. 변수

변수도 컴파일러가 초기화 식을 분석해 변수 타입을 지정하기 때문에 타입 추론이 가능하다.

2-1. 변경 가능한 변수와 변경 불가능한 변수

변수 선언 시 사용하는 키워드는 val과 var 2가지가 있다.

val(value) : 변경이 불가능한 참조를 저장하는 변수이다. final 변수에 해당된다.
var(variable) :  변경이 가능한 참조이다. 변수의 값은 변할 수 있지만 타입은 변할 수 없다..

기본적으로는 모든 변수를 불변 타입인 val로 선언을 하고 나중에 필요에 따라 var로 변경하는 것이 좋다.

fun main(){
    // val는 불변이며 한번만 초기화가 가능하다.
    val name = "최몌민"
    // name은 이미 최몌민으로 최기화 되었기 때문에 오류가 발생한다.
    name = "최혜인" -> 오류 !!
    
    // age의 타입을 지정해 줄수있다.
    val age: Int = 27
    // 변수 초기화시에 값을 할당하는 경우 컴파일러가 타입 추론이 가능, 타입 생략이 가능하다.
    val age2 = 27
    
    // 문맥에 따라 val이 한번만 초기화 된다면 여러 값 할당이 가능하다.
    val email: String
    
    if(isSuccess()) {
    	email = "naver"
   	}else {
    	email = "daum"
    }
    
    // 변수의 참조가 가리키는 객체의 내부 값은 변경 가능하다.
    val nameArray = arrayListOf<String>()
    nameArray.add("최몌민")
}
🌱 변수의 참조가 가리키는 객체란 무엇일까 ?
arrayListOf() / mutableListOf()를 하게된다면 내부적으로 ArrayList()를 생성한다.
val nameArray는 arrayListOf()로 생성된 ArrayList()를 가르키는 변수이다. 때문에 ArrayList()가 변수 참조가 가리키는 객체라는 의미이다.

3. 문자열 템플릿

코틀린은 문자열 템플릿으로 변수를 문자열안에서 사용이 가능하다. 변수앞에 $ 기호를 추가해주면 된다. 다만 한글과 결합해 사용하는 경우나 object안에 있는 값에 접근하는 경우엔 ${변수}로 사용해주어야한다.

'Kotlin > Kotlin In Action' 카테고리의 다른 글

함수 정의와 호출 (컬렉션, 함수, 확장 함수, 로컬 함수와 확장)  (0) 2024.11.12
Enum / when  (0) 2023.07.22
클래스와 프로퍼티  (0) 2023.07.20
코틀린이란?  (0) 2023.07.02