기본 요소: 함수와 변수
Hello, World!
fun main(args:Array<String>){
println("Hello, world!")
}
- 함수를 선언할 때 fun 키워드를 사용
- 파라미터 이름 뒤에 파라미터의 타입을 쓴다.
- 함수를 최상위 수준에 정의할 수 있음 (클래스 안에 함수를 넣어야 할 필요가 없다.)
- 배열도 일반적인 클래스와 마찬가지다.
- 세미콜론을 붙이지 않는다.
함수
fun max(a: Int, b: Int): Int{
return if (a > b) a else b
}
fun 함수이름(파라미터 목록) : 함수의 반환 타입 {
return 함수본문
}
코틀린 if는 문장이 아니고 결과를 만드는 식(expression)이라는 점이 흥미롭다.
문장(statement)과 식(expression)의 구분
코틀린에서 if는 식이지 문이 아니다. 식은 값을 만들어 내며 다른 식의 하위 요소로 계산에 참여할 수 있는 반면 문은 자신을 둘러싸고 있는 가장 안쪽 블록의 최상위 요소로 존재하며 아무런 값을 만들어내지 않는다는 차이가 있다.
자바에서는 모든 제어 구조가 문인 반면 코틀린에서는 루프를 제외한 대부분의 제어 구조가 식이다.
위의 함수를 아래와 같이 간결하게 표현할 수 있다.
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)라 부른다.
변수
타입을 생략할 수 있으나, 원한다면 명시도 가능하다.
val question = "삶, 우주, 그리고 모든 것에 대한 궁금적인 질문"
val ansert = 42
var answer: Int = 42
val yearsToCompute = 7.5e6 // 부동소수점상수를 사용하면 변수 타입은 Double이 됟나.
// 초기화 식을 사용하지 않고 변수를 선언하려면 변수 타입을 반드시 명시해야한다.
// 초기화 식이 없다면 변수에 저장될 값에 대한 정보가 없기 때문에 타입을 추론할 수없다.
val answer: Int
answer = 42
변경 가능한 변수와 변경 불가능한 변수
변수 선언시 사용할 수 있는 키워드는 2가지가 존재
- val(값을 뜻하는 value에서 따옴) - 변경 불가능한(immutable) 참조를 저장하는 변수 (자바의 final과 유사)
- var(변수를 뜻하는 variable에서 따옴) - 변경 가능한(mutable)참조
컴파일러는 변수 선언 시점의 초기화 식으로부터 변수의 타입을 추론하며, 변수 선언 이후 변수 재대입이 이뤄질 때는 이미 추론한 변수의 타입을 염두에 두고 대입문의 타입을 검사한다.
var answer = 42
answer = "no answer" // 컴파일 오류가 발생한다.
다른 타입의 값을 저장하고 싶다면 변환 함수를 써서 값을 변수의 타입으로 변환하거나, 값을 변수에 대입할 수 있는 타입으로 강제 형 변환(coerce)해야 한다.
더 쉽게 문자열 형식 지정: 문자열 템플릿
fun main(args:Array<String>){
val name = if (args.size > 0) args[0] else "Kotlin"
println("Hello, $name!")
}
이 예제는 문자열 템플릿(string template) 기능을 보여준다.
코틀린에서 변수를 문자열 안에 사용할 수 있다. 문자열 리터럴의 필요한 곳에 변수를 넣되 변수 앞에 $를 추가해야 한다. ⇒ ("Hello, " + name + "!") 과 동일한 기능을 한다.
문자열 템플릿 안에 사용할 수 있는 대상은 간단한 변수 이름만으로 한정되지 않는다. 복잡한 식도 중괄호({})로 둘러싸서 문자열 템플릿 안에 넣을 수 있다.
fun main(args:Array<String>){
if(args.size()>0){
println("Hello, ${args[0]}!")
}
}
fun main(args:Array<String>){
// 중괄호로 둘러싼 식 안에서 큰 따옴표를 사용할 수도 있다.
println("Hello, ${if(args.size > 0) args[0] else "someone"}!")
}
'프로그래밍 노트 > Kotlin' 카테고리의 다른 글
[Kotlin] 코틀린(Kotlin)에서 컬렉션 만들기 (0) | 2020.11.14 |
---|---|
[Kotlin] 코틀린(Kotlin) while과 for 루프 (0) | 2020.11.09 |
[Kotlin] 코틀린(Kotlin) enum과 when (0) | 2020.11.09 |
[Kotlin] 코틀린(Kotlin) 클래스와 프로퍼티 (0) | 2020.11.09 |
코틀린(Kotlin)이란 무엇이며 왜 필요한가 (0) | 2020.11.05 |