-
💡 [Kotlin] 예제를 통해 보는 기본 문법 - 변수, 상수(val, const val), 함수| 프로그래밍 분야/Kotlin 2021. 6. 22. 13:44
💡 예제 - Hello World 출력
class Tmp { companion object { const val GREETING:String = "World" } } fun main(){ val greeting:String greeting = "World" // greeting = "Meoru" <Error!> // Tmp.GREETING = "Meoru" <Error!> println("Hello " + greeting) println("Hello " + Tmp.GREETING) }
[결과]
Hello World
Hello World
예제를 통해 알 수 있는 점 (vs Java)
Java Kotlin main 함수 선언부 class 내부 최상위 레벨 (런타임) 상수 선언 final String greeting; val greeting: String (컴파일타임) 상수 선언 static final String GREETING = "World"; companion object {
const val GREETING:String = "World"
}표준출력함수 System.out.println() println() 문자열 문자열 합연산 통해 표현 가능 - 클래스 안에 메인함수를 선언해줘야했던 자바와 다르게, 코틀린은 바로 메인함수를 선언할 수 있습니다.
- 다만 (컴파일 타임) 상수는 여전히 클래스 내부에서만 선언 가능하며, object 및 companion object(동반 객체)에 선언됩니다. 후자의 경우 Tmp.GREETING 과 같이 외부에서 클래스명으로 손쉽게 접근이 가능합니다.
- val은 진정한 의미에서 상수라고 할 수 없습니다. '한 번 초기화가 가능한 변수' 라고 봄이 옳습니다.
- 런타임 상수와 컴파일타임 상수의 차이점은 아래 예제를 통해 비교할 수 있습니다.
(예제 출처 : https://inuplace.tistory.com/248)
class FoodCourt { fun searchPrice(foodName: String) { val price = when(foodName) { FOOD_CREAM_PASTA -> 13000 FOOD_STEAK -> 25000 FOOD_PIZZA -> 15000 else -> 0 } println("${foodName}의 가격은 ${price}원 입니다") } companion object { const val FOOD_CREAM_PASTA = "크림파스타" const val FOOD_STEAK = "스테이크" const val FOOD_PIZZA = "피자" } } fun main() { val foodCourt = FoodCourt() foodCourt.searchPrice(FoodCourt.FOOD_CREAM_PASTA) foodCourt.searchPrice(FoodCourt.FOOD_STEAK) foodCourt.searchPrice(FoodCourt.FOOD_PIZZA) }
[결과]
크림파스타의 가격은 13000원 입니다
스테이크의 가격은 25000원 입니다
피자의 가격은 15000원 입니다컴파일타임 상수인 const val는 객체의 생성자를 통해 할당될 수 없습니다. 기본 타입(String, Int, Boolean, ...)으로 선언과 동시에 초기화되면 이후 절대 변경될 수 없습니다.
런타임 상수인 val은 객체의 생성자를 통해 할당될 수 있으며 값이 바뀔 수 있습니다. 또한 선언과 동시에 초기화되지 않아도 됩니다.
💡 예제 - 변수 출력
fun main(){ if(num_print(2021)) { println("Success") } } fun num_print(year: Int): Boolean{ var num = year println("Year : $num") num = 622 print("Date : 0") println(num) // num = "Test" <Error!> return (true) }
[결과]
Year : 2021
Date : 0622
Success예제를 통해 알 수 있는 점 (vs Java)
Java Kotlin 변수 타입 지정 int num = year; var num: Int = year
(타입 명확할시 생략)리턴 타입 및 매개변수 지정 public boolean num_print(int year) { } fun num_print(year: Int): Boolean { } 큰따옴표(문자열) 내부 식별자 삽입 x "... ${num} ... " (명확할시 중괄호 생략)