[Kotlin] var과 val, 상수화, const val과 val 에 대해 알아보자

명지·2023년 11월 1일
1

코틀린

목록 보기
2/2
post-thumbnail

🤓 val vs var

📎 어느 강의에서 봤는데 발(val) 은 우리 몸에 붙어 있으니 못 뗀다(`immutable 하다..`) 로 외웠습니다.
  1. val

    • value 의 약자!
    • immutable 즉, 불변 변수
    • 값의 읽기만 허용됨
    • Java의 final 특성과 유사
    val son = "myeongji"
    son = "mm"
    
    // val은 값을 재할당 할 수 없기에 에러가 난다
  2. var

    • variable 의 약자!
    • mutable 즉, 가변 변수
    • 값의 읽기, 쓰기 모두 허용됨
    var son = "mongmong"
    son = "myeongji"
    
    // var은 값을 재할당 할 수 있기에 
    
    pritnln(son) // 출력값  :  myeongji 이 된다

→ 변수 선언 방법

// val 과 var 모두 같다.

val 변수명 : 타입 =var 변수명 : 타입 =// 참고로, 코틀린은 자동으로 변수 타입을 추론해주기에 **타입은 생략 가능**!

🤔 val vs const val

📎 둘 다 읽기 전용 변수를 선언하는데 사용되지만, 몇 가지 차이점이 있음!
  1. val

    • 불변 변수
    • 실행 시간에 초기화
    • 런타임에 값을 할당 받음
    • Java의 final 특성과 유사
    val snack = "죠리퐁"
  2. const val

    • 컴파일 시간 상수 선언 때 사용
    • 컴파일 시간에 값을 할당 받음
    • 원시타입(primitive type)으로만 선언 가능 (ex. 클래스나 함수 불가능)
    • 클래스의 멤버 변수 혹은 최상위 수준 변수만 가능(ex. 지역변수 혹은 클래스의 프로퍼티 불가능)
    • Java의 static final 특성과 유사
    • 상수 선언
    const val snack = Snack() // 불가능
    
    const val PI = "3.1415" // 가

🤗 상수화가 무엇일까?

상수 : 한 번 초기화하면 내부의 값을 사용할 수는 있지만, 바꿀 수는 없는 것**

상수화 : 프로그램에서 값이 변하지 않아야 하는 데이터 혹은 변수를 상수로 만드는 것!**

  • 상수는 companion object 안에 선언되어야 함
  • 상수 네이밍은 대문자와 _ (언더바) 를 이용
fun main() {
	val introduce = Introduce()
	introduce.printName() // 출력값 : SONMYEONGJI
} 

Class Introduce {

	fun printName() {
		println(FAMILY_NAME, NAME)
	}

	companion object {
		const val FAMILY_NAME= "SON"
		const val NAME = "MYEONGJI"
	}
}

🧐 그렇다면 상수화를 왜 하는데 ?

  1. 가독성 : 상수의 이름을 통해서 코드를 이해하기 쉽게 해줌

  2. 재사용성 : 동일한 값으로 여러 군데에서 사용 가능

    Class Baby {
    
    	fun realBaby() {
    		val sonBabyAge = DEFAULT_AGE
    		val kimBabyAge = DEFAULT_AGE
    	}
    
    companion object {
    	const val DEFAULT_AGE = 0
    } 
  3. 유지보수성 : 값이 바뀐다면 상수에서만 바꾸면 돼서 유지보수에 용이

    Class Baby {
    
    	fun realBaby() {
    		val sonBabyAge = DEFAULT_AGE
    		val kimBabyAge = DEFAULT_AGE
    	}
    
    companion object {
    	const val DEFAULT_AGE = 4
    } 
profile
멍멍멍멍멍지 ~

0개의 댓글