Kotlin 기초문법(2)

박재원·2023년 11월 29일
0

TIL

목록 보기
4/50
post-thumbnail

자료형

기본형 자료형

  • 값을 그대로 할당
  • 메모리 크기 고정
  • null로 초기화가 불가능
  • e.g. int, long, float, double 등
  • 스택에 값을 저장

모든 변수를 참조형으로 사용하지만, 컴파일 과정에서 기본형으로 대체한다. 따라서, 코틀린의 경우 자료형을 고려하는 최적화를 신경쓰지 않아도 된다.

  • e.g.
val bool = true // 컴파일러가 알아서 boolean 형으로 추론
val char1 = 'C' // 컴파일러가 알아서 char 형으로 추론
val a = 123 // Int형으로 추론
val b = 123L // 접미사 L을 이용하여 long형으로 추론
val c = 0x1F // 접두사 0x 를 사용해 16진법 표기가 사용된 int 형으로 추론
val d = 0b00101010 // 접두사 0b 를 이용하여 2진 표기가 사용된 int 형으로 추론
val float1 = 1.23e-2F // 접미사 F를 이용하여 float형 으로 추론
  • 코드 역컴파일 결과
    업로드중..

참조형 자료형

  • 스택에 참조 주소를 저장
  • null로 초기화 가능
  • 참조 주소 위치에 해당하는 곳(힙)에 실제 객체 저장
fun main(){
    val str = "Hello"
    val str2 = "World"
    val str3 = "Hello"

    println(str === str2) // false
    println(str === str3) // true
}

String 자료형은 변수에 Heap 영역에 존재하는 인스턴스의 주소를 가지고 있다. 참조 연산자(===) 를 통해 str 과 str3 를 계산해보면 true 를 반환한다. 이 의미는 두 변수가 같은 인스턴스의 주소를 가지는 것을 알 수 있다.

변수와 상수

val, var의 차이점

val

  • val로 지정된 불변 타입 변수는 초기에 값을 할당되면 나중에 값을 변경할 수 없으며 값을 변경하게 되면 컴파일 에러가 발생한다.

  • val은 한번만 초기화 되며 값을 변경할 수 없지만 컴파일러가 코드 문맥을 확인시 val 변수가 한번만 초기화 되는것이 맞다면 개발자가 상황에 따라 val를 여러 값으로 초기화(할당) 할 수 있습니다.

var

  • var로 지정된 가변 타입 변수는 초기화 후 값을 변경이 가능하다.

  • 다른 타입의 값을 넣을 수는 없다.

  • 이미 정의된 타입을 변경하려면 자바와 같이 형변환을 해야한다.

//변수 선언
val num1 = 2
var num2 = 3

//값 변경
num1 = 3 //error
num2 = 4
  • 숫자를 나타내는 변수
// var num1:Int = 1
// var 변수이름:자료형(생략가능) = 값
// 값을 특정 자료형을 저장할 수 있는 변수이름에 대입한다
var num1 = 1
println("내 첫변수 num1 변수에는 ${num1}이 들어있다.")

num1 = 5
println("변경한 변수 num1 변수에는 ${num1}이 들어있다.")
  • 문자를 나타내는 변수
// var one1:Char = '김'
// var 변수이름:타입(생략가능) = 값
var one1 = '김'
println("내 첫변수 one1 변수에는 ${one1}이 들어있다.")

one1 = '나' // one1변수에 들어있던 '김' 대신에 '나'를 대입
println("변경한 변수 one1 변수에는 ${one1}가 들어있다.")
  • 문자열을 나타내는 변수
// var name:String = "참새"
var name = "참새"
println("새의 이름을 저장하는 name 변수에는 ${name}가 들어있다.")

name = "조롱박이" // name변수에 들어있던 "참새" 대신에 "조롱박이"를 대입
println("변경한 변수 name에는 ${name}가 들어있다.")

0개의 댓글