퍼가세요

홍현민·2024년 9월 2일
0

develop

목록 보기
3/4
post-thumbnail
post-custom-banner

Kotlin 언어에 대해서 문서를 만들고 있습니다.
무슨 언어 정리 문서냐. 시간 낭비다. 라는 의견이 들 수 있는 사항이지만, 누구나 접근 가능한 개발 문서를 만들어 보자 합니다. 저의 개발 인생에 있어서 큰 첫 걸음이 되지 않을까

첫 수업으로 Kotlin 변수 선언 방법입니다.

Variable. 변수

var

var은 Mutable Variable의 약어. 값 변경이 가능한 변수를 선언할 때 사용합니다.

var 변수명 = 값
var 변수명 : 자료형 = 값

가변성을 필요한 지역 변수에 많이 사용합니다.

var 변수명 = "first"
println("결과값 : $변수명")	// 결과값 : first
변수명 = "second"
println("결과값 : $변수명")	// 결과값 : second

val

val은 Immutable Variable의 약어. 값 변경이 불가능한 변수를 선언할 때 사용합니다.

val 변수명 : 자료형 = 값
val 변수명 = 값

val의 목적은 변수의 값이 초기 할당 이후 변경되지 않는 불변성을 제공하는 것입니다.
선언과 동시에 초기화가 되어야 합니다.

val 변수명 = "first"
println("결과값 : $변수명")	// 결과값 : first
변수명 = "second"	// 불가능

참조는 변경이 불가능하지만 참조된 객체가 가변적인 경우에는 객체의 상태를 변경할 수 있습니다

val 변수명 : MutableList<String> = mutableListOf("1")
println("결과값 : $변수명")	// 결과값 : ["1"]
변수명.add("2")
println("결과값 : $변수명")	// 결과값 : ["1", "2"]

가능한 val을 통해서 값 불변성을 유지하는 것이 좋습니다. 불변성은 코드의 안정성과 가독성을 높이는데 도움이 됩니다.

const val

const val은 Constant Value의 약어. 상수 값을 변수로 선언할 때 사용합니다.
실행 중 계산되는 방식이 아닌 프로그램이 실행되기 전 메모리에 직접 저장되는 방식입니다.

const val 변수명 = 상수 값

자주 변경되지 않는 설정 값이나 API Key, URL, 전역 상수 값을 저장합니다.
기본 자료형과 String 자료형의 값만 할당이 가능하며, String 외 참조 자료형은 불가합니다.
프로그램이 실행되기 전에 저장되는 방식으로 선언 위치도 중요합니다.

  • 파일 최상위 레벨에 선언되어야 합니다. 클래스 인스턴스와 무관하게 선언됩니다.

    	```
    	const val 변수명 = "HERE"
    
    	class MyClass() {
    		println(변수명)	// HERE
    	}
    	fun myFun() {
    	println(변수명)	// HERE
    	}
    	```
  • object는 인스턴스를 생성하지 않고도 전역적으로 접근할 수 있는 유일한 객체이며 정적입니다. 그래서 object 안에 const val을 선언할 수 있습니다.

    	```
    	object myObject {
    		const val 변수명 = "HERE"
    	}
    
    	class MyClass() {
    		println(myObject.변수명)	// HERE
    	}
    	fun myFun() {
    		println(myObject.변수명)	// HERE
    	}
    	```
  • Class 내 const val을 선언할 수 있는 방법이 있습니다. Companion Object를 활용하는 방법입니다. 구체적인 설명은 아래 내용을 참고해주세요. 클래스의 인스턴스와 상관없이 Companion Object에 접근이 가능합니다.

    ```
    class MyClass() {
    	companion object {
    		const val 변수명 = "HERE"
    		fun coFun() {
    			println(변수명)
    		}
    	}
    }
    
    fun myFun() {
    	MyClass.coFun()	// "HERE"
    	println(MyClass.변수명)	// "HERE"
    }
    ```

    오류나 수정 사항 말씀해주시면 감사하겠습니다.
    천천히 github에 개발 인생 레파지토리에 올릴 예정입니다.
    너무 졸려서 대충 끄적이고 사라지겠습니다.

profile
1년차 AOS 개발자입니다.
post-custom-banner

3개의 댓글

comment-user-thumbnail
2024년 9월 6일

오올~ 수업해주시는 건가요?

1개의 답글