-
Kotlin in action - 코틀린 기초공부/Kotlin 2021. 1. 3. 15:47
Hello world!
fun main(args: Array<String>) { println("Hello world!") }
- 함수를 선언할 때 fun 키워드 사용.
- 파라미터 이름 뒤에 타입을 선언.
- 함수를 최상위 수준에 정의할 수 있다.
- 배열 처리를 위한 문법이 따로 존재하지 않는다.
- 코틀린 표준 라이브러리가 있어, 여러 자바 함수들을 간결하게 사용할 수 있게 wrapper 제공한다.
- ex ) println (System.out.println 의 wrapper 함수)
- 세미콜론을 붙히지 않아도 된다!
함수
fun max(a: Int, b: Int): Int { return if (a > b) a else b }
- 리턴 타입을 파라미터 목록 뒤에 콜론으로 구분 후 선언
문과 식의 구분
- 코틀린에선 if 는 식이지 문이 아니다.
- 식 : 값을 만들어 내며 다른 식의 하위 요소로 계산에 참여할 수 있다.
- 문 : 자신을 둘러싸고 있는 가장 안쪽 블록의 최상위 요소로 존재하며 아무런 값을 만들어내지 않는다.
- 대입문은 자바에서는 식이었으나 코틀린에서는 문이 됐다.
식이 본문인 함수
- 위 함수를 아래처럼 간결하게 표현할 수 있다.
- 본문이 식으로만 이루어진 경우 중괄호를 없애고 return을 제거하면서 등호를 식 앞에 붙이면 더 간결하게 함수를 표현할 수 있다.
- 식이 본문인 함수인 경우 반환 타입이 생략 가능하다. > 타입 추론 이 가능하기 때문.
fun max(a: Int, b: Int): Int = if (a > b) a else b
변수
코틀린에서는 타입 지정을 생략하는 경우가 흔하다.
컴파일러가 초기화 식을 분석해서 초기화 식의 타입을 변수 타입으로 지정한다. (타입 지정 생략가능한 이유)
초기화 식이 없다면, 반드시 타입을 지정해야함! > 초기화 식이 없으면 정보가 없기떄문에 컴파일러가 타입을 추론할 수 없다.
val(값을 뜻하는 value에서 따옴) - 변경 불가능한 참조를 저장하는 변수.
var(변수를 뜻하는 variable에서 따옴) - 변경 가능한 참조
기본적으로는 모든 변수를 val 키워드를 사용해 선언하고, 나중에 꼭 필요할 떄만 var 로 변경하라! > 함수형 코드에 가까워지는 길
val 변수는 블록을 실행할 때 정확히 한 번만 초기화돼야 한다. 컴파일러가 한 초기화 문장만 실행할 수 있다면, 조건에 따라 여러 값으로 초기화 할 수 있다.
val message: String if (isExample()) { message = "이곳에서 초기화 할 수도 있고" } else { message = "여기서도 초기화 할 수 있다." }
val 참조 자체는 불변일지라도 가리키는 객체의 내부 값은 변경될 수 있다.
val languages = arrayListOf("Java") languages.add("Kotlin") println(lanauges) // [Java, Kotlin]
var 키워드는 값을 변경할 수 있지만, 타입은 고정되어 바뀌지 않는다.
var answer = 42 // Int 형으로 타입 선언 answer = "no answer" // 컴파일 오류 발생
문자열 템플릿
val language = "Kotlin" val languages = arrayListOf("Java") languages.add("Python") println("이 언어는 $language") >> 이 언어는 Kotlin println("이 언어는 ${language}입니다.") >> 이 언어는 Kotlin입니다. // 뒤에 글자가 바로 붙어 구분이 어려운 경우 중괄호로 구분 println("이 언어는 ${lanauges[0]}") >> 이 언어는 Java // 간단한 변수 이름이 아닌 경우. 이보다 더 복잡한 식도 가능하다. println("이 언어는 ${if (args.isNotEmpty()) args[0] else "Kotlin"}!") // 이렇게!! // 진짜 $ 를 출력하고 싶을땐? println("\$") >> $