본문 바로가기

Kotlin

[Kotlin] 변수 선언

728x90

코틀린은 자바 플랫폼에서 실행하는 프로그래밍 언어입니다.
그렇기에 자바와 비슷한 점이 많습니다.

 

변수 선언 기본 형태

var/val 변수명: 변수타입 = 초기화

예시:

var number: Int = 0
var name: String = "홍길동"
var isAble: Boolean = true
var email: String? = null
var avg: Double = 0.0
 

 

 

자바와 차이점

var / val 키워드

가장 큰 차이점 중 하나는 var와 val 키워드를 사용하는 것입니다.

  • var: variable의 약자로, 읽기/쓰기(read/write)가 가능한 변수를 의미합니다.
  • val: valuable의 약자로, 읽기 전용(read-only) 변수를 의미하며, 자바에서의 final 키워드와 유사합니다.
var age: Int = 30  // 읽기/쓰기 가능
val birthYear: Int = 1990  // 읽기 전용

 

변수명과 변수타입 순서

자바에서는 변수 타입을 먼저 쓰고 변수명을 적지만, 코틀린에서는 변수명을 먼저 쓰고, 그 뒤에 :를 사용해 타입을 선언합니다.

 

자바:

String name = "홍길동";

 

코틀린:

var name: String = "홍길동"

또한, 코틀린에서 원시 타입(primitive type)은 객체 타입(object type)으로 표현됩니다. 예를 들어, int 대신 Int, double 대신 Double로 나타냅니다.

 

Non-null / Nullable

코틀린은 Non-null 타입과 Nullable 타입을 구분합니다.

  • Non-null: 변수에 null 값을 가질 수 없습니다.
  • Nullable: 변수에 null 값을 허용하려면, 타입에 ?를 붙여야 합니다.
  • Null 안전성을 위한 기타 기능: 코틀린에서는 ?. 연산자와 ?: 엘비스 연산자 같은 null 안전성을 위한 추가 기능이 있습니다.
    • ?.: 안전 호출 연산자로, 객체가 null일 경우 메서드 호출을 건너뜁니다.
    • ?:: 엘비스 연산자로, 좌측이 null일 경우 우측 값을 반환합니다.
var name: String = "홍길동"  // Non-null 타입, null 불가
var email: String? = null  // Nullable 타입, null 가능

이러한 기능 덕분에 코틀린에서는 NPE(NullPointerException)를 효과적으로 방지할 수 있습니다.

 

 

 

타입 생략 (Type Inference)

코틀린은 타입 추론(Type Inference) 기능을 지원하기 때문에, 변수 선언 시 타입을 생략할 수 있습니다. 컴파일러가 할당된 값에 따라 자동으로 타입을 결정하기 때문에, 코드를 더 간결하게 작성할 수 있습니다.

타입 생략 예시:

val name = "홍길동"  // String으로 추론
var age = 25  // Int로 추론
val isStudent = true  // Boolean으로 추론

이 경우, 코틀린은 각 변수의 값을 기반으로 타입을 자동으로 추론하여 할당합니다.

타입을 명시할 경우:

val name: String = "홍길동"
var age: Int = 25
val isStudent: Boolean = true

타입을 명시하는 것은 선택 사항이며, 특정 상황에서 더 명확한 코드를 작성할 수 있도록 도움을 줍니다.

 

타입 생략의 장점

  1. 간결한 코드: 타입을 명시하지 않아도 되므로 코드가 짧고 간결해집니다.
  2. 가독성 향상: 타입 추론 덕분에 코드를 읽을 때 개발자가 불필요하게 타입을 추적할 필요가 없으며, 코드의 의미가 더 직관적으로 다가옵니다.
  3. 유지보수 용이: 코드 변경 시 타입이 자동으로 업데이트되기 때문에, 타입 변경을 수동으로 처리할 필요가 없습니다.

 

타입 생략의 단점

  1. 명확성 부족: 타입을 추론하기 어려운 경우, 명시적인 타입 선언이 없으면 코드의 의미를 명확히 이해하기 어려울 수 있습니다. 특히 팀 프로젝트나 협업 환경에서는 명시적 타입이 오히려 더 좋을 수 있습니다.
  2. 복잡한 표현식에서 추론 어려움: 복잡한 표현식에서는 타입 추론이 명확하지 않을 수 있으며, 의도하지 않은 타입이 적용될 가능성도 있습니다.

 

타입을 반드시 명시해야 하는 경우

  1. 초기화 없이 변수를 선언할 때
    • 변수를 초기화하지 않고 선언하는 경우, 타입을 명시해야 합니다. 초기화가 없으면 컴파일러가 타입을 추론할 수 없기 때문입니다.
  2. 함수의 반환 타입
    • 함수 선언 시 복잡한 로직이 있거나 코드의 가독성을 높이기 위해 반환 타입을 명시하는 것이 좋습니다.
  3. 특정 타입을 강제하고 싶을 때
    • 타입을 명확히 제한하고 싶을 때는 명시적으로 선언하는 것이 좋습니다. 예를 들어, 숫자 값이지만 정수를 사용해야 하는 경우 Int 타입을 명시할 수 있습니다.

 

 

코틀린에서 더 많이 사용하는 방법

코틀린에서는 타입을 생략하는 것이 일반적인 관례입니다.

변수 선언 시 값이 명확한 경우, 타입을 생략해도 문제가 없기 때문에 개발자들은 보통 타입 생략을 선호합니다.

하지만 함수의 반환 타입이나 초기화 없이 변수를 선언하는 경우, 또는 복잡한 코드에서 명확성을 높이기 위해 타입을 명시하는 경우도 많습니다.

728x90