[ Hello, World! ]
코틀린에서는 함수 하나로 프로그램을 만들 수 있다.
fun main(args: Array<String>) {
pritln("Hello, World!)
}
∘ 함수를 선언할 때 fun 키워드 사용
∘ 파라미터 이름 뒤에 그 파라미터의 타입을 사용
∘ 함수를 최상위 수준에 정의할 수 있다. ( 클래스 안에 함수를 넣을 필요 X )
∘ 배열 처리를 위한 문법 X
∘ System.out.println() → println()
∘ 줄 끝에 세미콜론(;)을 붙이지 않아도 된다.
[ 함수 ]
/**
fun [함수이름] (파라미터 목록) : 반환 타입 {
}
**/
// 1. 블록이 본문인 함수
fun max(a: Int, b: Int): Int {
return if(a > b) a else b
}
// 2. 식이 본문인 함수
fun max(a: Int, b: Int): Int = if (a > b) a else b
∘ 코틀린의 if는 결과를 만드는 식이다.
˙ 값을 만들어내며 다른 식의 하위 요소로 계산에 참여할 수 있다.
˙ if(a > b) a else b : a 혹은 b가 반환되는 식
∘ 코틀린의 대입은 문이다.
˙ 자바와 달리 대입문을 그대로 계산에 참여시킬 수 없다.
// 식이 본문인 함수
fun max(a: Int, b: Int): Int = if (a > b) a else b
// 반환 타입 생략
fun max(a: Int, b: Int) = if(a > b) a else b
∘ 식이 본문인 함수의 경우 반환 타입을 생략할 수 있다.
코틀린은 정적 타입 지정 언어이므로 컴파일 시점에 모든 식의 타입을 지정해야한다.
그런데 반환 타입을 생략할 수 있다고?
식이 본문인 함수에서는 반환 타입 생략이 가능하다.
함수의 경우 사용자가 반환 타입을 적지 않아도 컴파일러가 함수 본문 식을 분석해 타입을 정해준다.
[ 타입 추론 type inference ]
[ 변수 ]
1. 타입 지정
코틀린에서는 '타입 추론이 가능한 경우에' 변수의 이름 뒤에 타입을 생략하게 허용한다.
val question = "가장 좋아하는 숫자는?" // 타입 생략, String으로 타입 추론
val num1 = 3 // 타입 생략, Int로 타입 추론
val num2: Int = 7 // 타입 명시
∘ 타입을 명시하지 않으면 컴파일러가 초기화 식을 분석하여 초기화 식의 타입을 변수 타입으로 지정한다.
∘ 초기화 식을 사용하지 않고 선언을 하기 위해서는 타입을 반드시 명시해야 한다.
˙ 초기화 식이 없다면 변수의 값에 대한 정보가 없기 때문에 컴파일러가 타입을 추론할 수 없기 때문이다.
val answer: Int // 선언만 먼저 할거면 타입 명시
answer = 10 // 이후 초기화 가능
2. 변경 가능한 변수 & 변경 불가능한 변수
[ val ]
˙ 값을 뜻하는 value에서 따옴
˙ 변경 불가능한(immutable) 참조를 저장하는 변수
˙ val 로 선언된 변수는 한번 초기화돈 이유 변경 불가능(재대입 불가능) : 자바의 final
˙ 블록을 실행할 때 정확히 한번만 초기화되어야 한다.
val message: String
// 로직에 따라 정확히 한번 초기화됨을 보장
if(isCorrect()) { message = "Success" }
else { message = "Fail" }
˙ val 참조 자체는 불변일지라도 그 참조가 가리키는 객체의 내부값은 변경될 수 있다.
val languages = arrayListOf("Java")
languages.add("Kotlin") // 객체 내부 값 변경 가능
[ var ]
˙ 변수를 뜻하는 variable에서 따옴
˙ 변경 가능한 (mutable) 참조를 저장
˙ 값 변경 가능 : 자바의 일반 변수
˙ 변수의 값은 바꿀 수 있어도, 변수의 타입을 바꿀순 없다.
var answer = 7
answer = "eight" // Error: type mismatch
기본적으로 모든 변수를 val 을 사용하여 불변 변수로 선언하고, 필요할 때 var 로 변경하는것이 좋다.
[ 문자열 템플릿 ]
var name = "Hyoung"
// Java
System.out.println("Hello, " + name + "!");
// Kotlin
println("Hello, " + name + "!") // 가능은 하다.
pritnln("Hello $name!") // 문자열 템플릿
pritnln("Hello ${name}!") // 가독성을 위해
∘ 컴파일된 해당 코드는 StringBuilder를 사용하여 문자열 상수와 변수값을 append로 붙인다.
'Kotlin > Kotlin In Action' 카테고리의 다른 글
[Kotlin] 2-5. 코틀린의 예외 처리 (0) | 2022.05.15 |
---|---|
[Kotlin] 2-4. 이터레이션: while & for (0) | 2022.05.15 |
[Kotlin] 2-3. 선택 표현과 처리 : enum과 when (0) | 2022.05.15 |
[Kotlin] 2-2. 클래스와 프로퍼티 (0) | 2022.04.03 |
[Kotlin] 1. 코틀린이란? (0) | 2022.01.19 |