2장. 코틀린 기초 - 기본 요소 (함수 변수)
2.1 기본 요소: 함수와 변수
2.1.1 Hello, World!
아무런 값도 반환하지 않는 함수 선언하는 방법은 아래와 같다.
2.1.2 함수
• Kotlin REPL(Read-eval-print loop) : 코드를 한줄씩 실행하는 셀
→ 안드로이드 스튜디오 상단 - [Tool] - [Kotlin] - [Kotlin REPL]
• 의미 있는 결과를 반환하는 함수를 알아보자. 이 때반환 값의 타입을 어디에 지정해야 할까?
→ 파라미터 목록의 닫는 괄호 다음에 위치. 괄호와 반환 타입 사이를 콜론(:)으로 구분
• 문(statement)과 식(expression)의 구분
→ 코틀린에서 if는 식이다. (문 x)
→ 식 : 값을 만들어내며 다른 식의 하위 요소로 계산에 참여 가능
→ 문 : 자신을 둘러싸고 있는 가장 안쪽 블록의 최상위 요소로 존재. 아무런 값을 만들어내지 않음
→ 코틀린에서는 loop를 제외한 대부분의 제어 구조가 식
→ 대입문은 자바에서는 식이었으나 코틀린에서는 문임 식이 본문인 함수
아래와 같이 등호와 식으로 이루어진 함수를 '식이 본문인 함수'라고 한다.
fun max(a: Int, b: Int): Int = if (a>b) a else b
• 타입 추론(type inference) : 컴파일러가 타입을 분석해 프로그램 구성 요소의 타입을 정해주므로 반환 타입 생략 가능. 아래와 같이 function의 타입을 생략할 수 있다
fun max(a: Int, b: Int) = if (a>b) a else b
식이 본문인 함수의 반환 타입만 생략 가능. 블록이 본문인 함수가 값을 반환하면 반드시 반환 타입 지정하고, return 사용하여 반환값 명시
2.1.3 변수
변수 선언 시 타입 지정 생략하는 경우가 흔하다. 타입으로 변수 선언을 시작하면 타입 생략 시 식과 변수 선언에 혼동을 줄 수 있다. 따라서 키워드로 변수 선언을 시작하는 대신 변수 이름 뒤에 타임을 명시하거나 생략하게 허용되어 있다.
초기화식을 쓰지 않고 변수를 선언할 때에는 반드시 변수 타입 명시
→ 초기화 식이 없다면 변수에 저장될 값에 아무 정보가 없으므로 컴파일러 타입 추론 불가. 따라서 이런 경우 타입 반드시 지정
• 변경 가능한 변수와 변경 불가능한 변수
① val (값을 뜻하는 value)
- 변경 불가능한 참조를 저장하는 변수 (immutable)
- val로 선언된 변수는 일단 초기화하고 나면 재대입이 불가능
- 자바에서의 final 변수에 해당
② var (변수를 뜻하는 variable)
- 변경 가능한 참조 (mutable)
- 값이 바뀔 수 있음
- 자바의 일반 변수에 해당
기본적으로 모든 변수를 val 키워드를 사용하여 불변 변수로 선언하고, 나중에 꼭 필요할 때만 var로 변경하자.
val 변수는 블록 실행 시 정확히 한 번만 초기화해야 한다. but 어떤 블록이 실행될 때 오직 한 초기화 문장만 실행됨을 컴파일러가 확인할 수 있다면 조건에 따라 val 값을 다른 여러 값으로 초기화 가능하다. 아래 예시 코드.
val 참조 자체는 불변이지만, 그 참조가 가리키는 객체의 내부 값은 변경될 수 있다. 아래 예시 코드.
var 키워드 사용하면 변수 값 변경 가능하지만, 변수 타입은 고정되어 바뀌지 않음. 아래 예시 코드.
• 어떤 타입의 변수에 다른 타입의 값을 저장하는 방법
1) 변환 함수를 써서 값을 변수의 타입으로 변환
2) 값을 변수에 대입할 수 있는 타입으로 강제 형 변환(coerce)
2.1.4 더 쉽게 문자열 형식 지정: 문자열 템플릿
• 문자열 템플릿 (string template)
- name 이라는 변수를 선언하고, 그 다음 줄에 있는 문자열 리터럴 안에서 그 변수 사용
- 문자열 리터럴의 필요한 곳에 변수 넣되 변수 앞에 $ 추가
- 컴파일러는 각 식을 정적(static)으로 검사하기 때문에 존재하지 않는 변수를 문자열 템플릿 안에서 사용하면 컴파일 오류
• 문자 $ 를 문자열에 넣고 싶을 때
- println("\\$x") 와 같이 \를 사용하여 $를 이스케이프(escape) 시켜야 함
• 문자열 템플릿 안에는 간단한 변수 이름 뿐 아니라 중괄호({})로 감싼 복잡한 식도 들어갈 수 있다
• 한글을 문자열 템플릿에서 사용할 경우 주의할 점
- 코틀린에서는 한글을 식별자로 사용할 수 있어 변수 이름에 한글이 들어갈 수 있음
- 이 때, $로 변수를 지정하여 변수명 바로 뒤에 한글을 붙여 사용하면 코틀린 컴파일러는 영문자와 한글을 한꺼번에 식별자로 인식
→ 해결) 아래와 같이 변수 이름을 중괄호 {}로 감싸기
'${name}님 반가워요!'
'Dev Books > <Kotlin in Action>' 카테고리의 다른 글
2장. 코틀린 기초 - 클래스와 프로퍼티 (0) | 2022.03.18 |
---|---|
1장. 코틀린이란 무엇이며, 왜 필요한가? (0) | 2021.10.05 |
<Kotlin in Action> - 코틀린 컴파일러 개발자가 직접 알려주는 코틀린 언어 핵심 (0) | 2021.10.05 |