2장. 코틀린 기초 - 기본 요소 (함수 변수)

2021. 11. 3. 02:30

 

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}님 반가워요!'

BELATED ARTICLES

more