[Kotlin] :: 변수(val, var, lateinit, lazy), 함수(반환타입, 매개변수)

2023. 10. 3. 10:50·[Programming Language]/[Kotlin]

◎ 코틀린에서 변수를 선언하는 2가지 방법 - val, var

  코틀린에서 변수를 선언하는 방법에는 2가지가 있다. value를 뜻하는 val과 variable을 뜻하는 var이 있다.  

1) val

  val은 한 번 초깃값이 할당되면 추후에 값의 변경이 불가하다. 상수 개념이라고 보면 된다. val로 변수를 선언하고 값의 변경을 시도하면 오류가 발생한다.

2) var

  var은 val과는 달리 초깃값이 할당된 이후에도 값의 변경이 가능하다.

 

◎ 변수 타입 지정 및 null 허용

  코틀린에서는 변수의 타입을 지정할 수 있다. 변수명 뒤에 콜론(:)을 추가하여 타입을 명시할 수 있고 데이터에 따라 값의 추론이 가능한 경우에는 타입 지정을 생략할 수 있다. 

- 초깃값 할당

  코틀린에서 최상위에 선언한 변수나 클래스의 멤버 변수는 선언과 동시에 초깃값을 할당해야 한다. 반면 함수 내부에 선언한 변수는 타입을 지정한다면 선언과 동시에 초깃값을 할당하지 않아도 된다.

- 널(null) 허용

  코틀린에서는 변수가 null값을 가지게 할 수 있다. 타입 지정 맨 뒷부분에 물음표(?)를 붙여주기만 하면 된다. 변수가 null을 가질 수 있는 경우에는 신경써야 할 부분이 있는데 이 내용은 다른 글에서 다루도록 하겠다. 여기서는 null 값을 가질 수 있다는 사실과 그 방법에 대해서만 알고 넘어가자.

 

◎ 지연 초기화 - lateinit, lazy

  앞서 말한 것처럼 최상위나 클래스의 멤버 변수에서는 변수의 선언과 동시에 할당이 이뤄져야 한다. 그러나 만약 할당이 불가능한 경우에는 지연 초기화를 사용하면 된다.

 

1) lateinit

 lateinit 키워드는 변수 선언의 맨 앞부분에 사용하면 된다. 이는 컴파일러에게 값을 이후에 할당할 것이라고 알려주는 기능을 한다. lateinit 키워드에는 다음 2가지의 주의사항이 있다.

  • val 키워드가 아닌 var 키워드로 선언한 변수에만 사용 가능(val은 재할당이 불가하기 때문)
  • 기본 타입(Int, Short, Long, Float, Double, Boolean, Byte)에는 사용 불가

2) lazy

  변수 선언의 맨 앞부분에 사용하는 lateinit과는 달리 lazy는 타입 지정 뒷부분에 by lazy { } 형태로 사용한다. by lazy 키워드에도 다음의 주의사항이 존재한다.

  • val 키워드로 선언한 변수에만 사용 가능
  • by lazy 중괄호의 맨 마지막 줄의 실행 결과가 변수의 초깃값이 됨

 

 

◎ 함수 선언

  코틀린에서 함수를 선언할 땐 fun 키워드를 사용한다. 함수의 선언 형태는 다음과 같다.

fun 함수명(매개변수명: 타입): 반환 타입 {...}

 

 

1) 반환 타입

  •   함수의 반환 타입을 생략하는 경우에는 아무것도 반환하지 않음을 뜻하는 Unit 타입이 된다. 아무것도 입력하지 않았는데 return을 하려하면 오류가 발생한다.

  • 반환 타입과 실제 반환되는 값의 타입이 일치하지 않을 경우에는 오류가 발생한다.

2) 매개변수

  • 매개변수가 없는 경우에는 생략 가능

  • 매개변수에 var이나 val 키워드 사용 불가능

  • val이 자동으로 적용되기 때문에 매개변수 값 변경 불가능

  • 매개변수에 기본값 선언 가능(기본값이 선언된 매개변수는 기본값이 선언되지 않은 매개변수보다 앞에 올 수 없음)

<뒤에 있는 매개변수부터 기본값을 선언한 경우>
<앞에 있는 매개변수부터 기본값을 선언한 경우>

  • 매개변수가 여러 개면 호출할 때 전달할 인자를 순서대로 할당해야 함

    그러나 매개변수의 이름을 붙여 호출하는 방법을 사용하면 순서를 지키지 않아도 된다. 이러한 방법을 명명된 매개변수(named parameter)라고 한다.

 

저작자표시 비영리 변경금지 (새창열림)

'[Programming Language] > [Kotlin]' 카테고리의 다른 글

[Kotlin] :: 반복문(for, in, until, while, do~ while, break, continue)  (0) 2023.10.10
[Kotlin] :: 조건문(if, if ~ else, if ~ else if ~ else, when)  (0) 2023.10.08
[Kotlin] :: 데이터 타입(기초 타입, Char, String, Any, Unit, Nothing), 컬렉션 타입(Array, List, Set, Map)  (1) 2023.10.04
'[Programming Language]/[Kotlin]' 카테고리의 다른 글
  • [Kotlin] :: 반복문(for, in, until, while, do~ while, break, continue)
  • [Kotlin] :: 조건문(if, if ~ else, if ~ else if ~ else, when)
  • [Kotlin] :: 데이터 타입(기초 타입, Char, String, Any, Unit, Nothing), 컬렉션 타입(Array, List, Set, Map)
Semincolon
Semincolon
It seems small, that semicolon is a big deal.
  • Semincolon
    Semincolon
    Semincolon
  • 전체
    오늘
    어제
    • 분류 전체보기 (121) N
      • [Programming Language] (76)
        • [JSP] (4)
        • [Swift] (23)
        • [SwiftUI] (16)
        • [Python] (22)
        • [C언어] (6)
        • [Kotlin] (4)
        • [C#] (1)
      • [Frame Work] (5)
        • [Flutter] (4)
        • [Spring Boot] (1)
      • [Projects] (3)
        • [Android][Kotlin] 공유 캘린더(20.. (1)
        • [Unity] 인내의 숲(2024.03) (2)
      • [DB] (7) N
        • - Oracle (7) N
      • [Programmers] (23) N
        • - SQL (23) N
      • [ETC] (2)
      • Today's Learning (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
Semincolon
[Kotlin] :: 변수(val, var, lateinit, lazy), 함수(반환타입, 매개변수)
상단으로

티스토리툴바