본문 바로가기
언어/Kotlin&Java

[코틀린/Kotlin] 기초 #04_기본형 vs 참조형

by 옹구스투스 2021. 8. 10.
반응형

환경 : Kotlin Version = 1.5.20, Java version = 14.0.2 JVM, Android Studio

 


0.참고 자료

https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.io/

 

kotlin.io - Kotlin Programming Language

 

kotlinlang.org


1. 기본형, 참조형이 무엇인가?

보통 프로그래밍 언어의 대부분 자료형은 기본형 자료형과 참조형 자료형만을 사용한다.

기본형과 참조형 모두 사용하는 Java와 달리 Kotlin에서는 참조형 자료형만을 사용한다고 

이전 글에서 언급했다.

2021.07.27 - [언어/Kotlin&Java] - [코틀린/Kotlin] 기초 #01_변수와 자료형  

기본형은 참조형에 비해 상대적으로 속도가 빠른데, 그럼 Kotlin은 Java보다 비효율적인가?
결론부터 말하면 아니다.

Kotlin에서는 코딩할 때는 모두 참조형만 사용하는데, 이것은 다시 코틀린의 성능 최적화에 따라

JVM에 실행하기 위해 코틀린 컴파일러에서 기본형으로 대체된다.

즉 Kotlin에서도 기본형으로 대체될 수 있는 자료형은 코딩할 때는 참조형으로 사용하더라도,
실제로는 기본형으로 동작한다.

그러면 기본형과 참조형의 차이, 동작 원리를 알아보자.

1) 기본형(기본 타입 : Primitive data type)

  • 변수에 값 자체를 저장하며, Stack 영역에 생성된다.
  • 가공되지 않은 순수한 자료형으로 프로그래밍 언어에 내장되어 있다.
  • 사용하기 전 반드시 선언되어야 하며, 초기화하지 않으면 자료형에 맞는 기본 값이 들어간다.
  • OS에 따라 자료의 길이가 변하지 않는다.
  • 비객체 타입이며, NULL 값을 가질 수 없다.
  • ex) int, byte, short, long, float, double char, boolean 등이 있다.

2) 참조형(참조 타입 : Reference type)

  • 기본형을 제외하고선 모두 참조형이라고 부른다.
  • 메모리상 객체가 존재하는 주소를 저장하며 Heap 영역에 저장된다.
  • NULL 또는 주소를 값으로 갖는다.
  • 클래스형, 인터페이스형, 배열형 등이 있다.
  • ex) Java : String, ArrayList, Classtype(Integer)
  • ex) Kotlin : Int, Long, Float, Double 등등
    //Kotlin의 Int? == Java의 Integer
    //Kotlin의 Int == Java의 int 컴파일러에 의해 java의 기본 자료형인 int로 대체된다.    
    //Kotlin의 Int는 null이 들어갈 수 없고, 기본형으로 대체될 수 있기 때문에 사실상 Java의 기본 자료형인 int와 같다.

2. 기본형, 참조형의 동작 원리

//Java code
int a = 77; //기본형
Person person = new Person(); //객체 참조형으로 person 객체를 위해 참조 주소(A12)를 가진다.
//Kotlin code
val a : Int =77 // 참조형으로 선언되었지만, 실제로는 내부 컴파일 과정을 거쳐 기본형처럼 사용됨

 


반응형

댓글