[Kotlin] 1. 함수, 변수, 문자열 템플릿
2023. 3. 21. 21:50ㆍProgramming Languages/Kotlin
함수
fun main(args: Array<String>) {
println("Hello World!!")
}
- 함수는 위와 같이 fun 키워드를 사용하여 정의한다.
- fun 함수명([param: paramType): [returnType]) { [body] } 형식으로 작성한다.
- Kotlin에서는 함수를 최상위 수준에서 정의가 가능하다. Java는 반드시 클래스 내에 위치해야 한다.
💡Kotlin에서는 라인 구분을 위한 세미콜론을 사용하지 않는다!
// 식이 본문인 함수
fun max(a: Int, b: Int): Int = if (a > b) a else b
- 위처럼 식이 본문인 함수를 선언할 수 있다.
- 파라미터는 "변수명: 타입" 으로 작성한다.
💡Kotlin에서는 if를 문(statement)이 아니라 식(expression)으로 처리한다. 식은 값을 만들어내며 다른 식의 하위 요소로 계산에 참여할 수 있지만 문은 자신을 둘러싸고 있는 가장 안쪽 블록의 최상위 요소로 존재하며 아무런 값을 만들어내지 않는다. Java에서는 모든 제어 구조가 문으로 되어 있지만 Kotlin에선 루프를 제외한 대부분의 제어 구조가 식이다.
fun max(a: Int, b: Int) = if (a > b) a else b
- Kotlin은 컴파일러의 타입 추론(type inference) 기능을 활용해 위와 같이 반환 타입을 명시하지 않아도 된다.
변수
Kotlin에서는 변수 선언 시 val과 var 키워드를 사용한다.
- val: Java에서 final과 같은 의미로 변경이 불가능한 상수를 선언할 때 사용한다.
- var: Java에서 일반 변수와 같은 의미로 재할당이 가능하다.
val question = "질문"
var answer: String = "답변"
val
val은 참조 자체는 불변이지만 그 참조가 가리키는 내부 변수는 변경될 수 있다. 아래 코드가 실행된 후에 lan에는 Java와 Kotlin이라는 요소가 들어있다. 이 개념은 값 변수와 참조 변수의 차이이다.
val lan = arrayListOf("Java")
lan.add("Kotlin")
var
var로 선언한 변수는 값은 변경될 수 있지만 타입은 변경할 수 없다. 다음 코드는 에러를 발생시킨다.
var num = 1
num = 1.5 // 타입 불일치 에러 발생
위 코드는 타입 불일치 에러를 발생시킨다. num을 선언할 때 타입 추론 기능을 사용해 Int 타입으로 선언 및 할당했지만 Double 타입의 값을 재할당하려고 해서 에러가 발생한다. 컴파일러는 변수 선언 시점의 초기화 식으로부터 변수의 타입을 추론하고 이후의 변수 대입 시 추론했던 타입을 기반으로 대입할 타입을 검사한다.
val vs var
기본적으로 모든 변수는 val로 선언하고 나중에 변경이 필요한 경우 var로 변경하는 편을 권장한다.
문자열 템플릿
fun main(args: Array<String>) {
// args로 "Java"를 넘기면 Hello, Java가 출력되고
// 아무 인자도 넘기지 않으면 Hello, Kotlin이 출력됨
val name = if (args.size > 0) args[0] else "Kotlin"
println("Hello, $name")
}
- 문자열 내에서 변수를 참조할 수 있는 기능이다.
- Java에서는 같은 처리를 하려면 "Hello," + name 과 같이 작성해야 한다. 훨씬 간편하고 직관적이다.
- 만약 $를 문자로 넣고 싶은 경우에는 역슬래시(\)를 사용한다.
- println("Hello \$cola")
- 중괄호를 사용해 복잡한 식도 가능하다.
fun main(args: Array<String>) {
if (args.size > 0) {
println("Hello, ${args[0]}")
}
}
⚠️ 문자열 템플릿을 사용할 때는 변수만 사용하더라도 중괄호를 함께 사용하는 습관을 들이는 것이 좋다. 그러면 가독성이 좋아지고 오류가 발생할 확률이 줄어든다.
'Programming Languages > Kotlin' 카테고리의 다른 글
[Kotlin] 6. 함수 정의와 호출 (0) | 2023.03.24 |
---|---|
[Kotlin] 5. 예외처리 (0) | 2023.03.23 |
[Kotlin] 4. 대상을 이터레이션: while 과 for (0) | 2023.03.23 |
[Kotlin] 3. 선택 표현과 처리: enum과 when (0) | 2023.03.22 |
[Kotlin] 2. 클래스와 프로퍼티, 소스코드 구조 (0) | 2023.03.21 |