자바와 코틀린 데이터 타입 시스템 비교

2024. 4. 23. 12:39· Language/JAVA
목차
  1. 1 Null 가능성
  2. 2 기본 타입과 객체 타입
  3. 기본 타입 Primitive types (원시 타입)
  4. 객체 타입 Reference types (참조 타입)
  5. 3 타입 추론

김영한의 자바 입문 강의를 통해 자바를 공부하고 있다.

섹션2의 변수를 수강하고 자바는 코틀린과 데이터 타입이 어떻게 다른가 검색해보던 중에 자바에서는 int 와 같은 데이터 타입에 대한 값에서 메서드를 바로 호출할 수 없다는 것을 알았다. 왜 할 수 없는지 찾아보니 코틀린과 달리 기본 타입과 객체 타입이 구분된다고 한다.

 

대부분의 입문자들이 자바에서 코틀린을 순서로 학습하는 것에 비해 시작이 이상하지만 😂 

 


 

타입 ( Type ) ?
어떤 값들이 가능한지와 그 타입에 대해 수행할 수 있는 연산의 종류를 결정한다. 
자바에서 예를 들어 String 타입의 변수에는 String 값 아니면 null 이 들어갈 수 있다. 변수에 타입이 선언되었지만 null 인지 아닌지를 추가로 검사하기 전에는 그 변수에 어떤 타입에 대한 연산을 수행할 수 있을지 확신할 수 없다. 
코틀린은 이 문제를 해결하기 위해 null 이 될 수 있는 타입과 될 수 없는 타입을 구분하여 NPE 에러를 컴파일 시점에 감지할 수 있다.

 

1 Null 가능성

코틀린

타입에 null 가능성을 명시적으로 포함한다.

컴파일 타임에 null 관련 오류를 방지할 수 있다.

Int? Double?

자바

모든 참조 타입이 기본적으로 null 이 될 수 있다.

자바 8 이상에서는 Optional 클래스를 사용하여 명시적으로 처리한다.

 

2 기본 타입과 객체 타입

코틀린

모든 것이 객체이다

자바의 기본 타입에 해당되는 값들을 객체처럼 다룰 수 있고 내부적으로는 JVM 이 컴파일 시 타입을 결정해준다.

자바

기본 타입과 참조 타입으로 구분된다.

 

 

기본 타입 Primitive types (원시 타입)

- 스택 메모리에 직접 값을 저장하며 객체와는 다르게 참조에 의한 접근이 아닌 값에 의한 접근을 사용한다.

- int / double / float / boolean / byte / short 등

- 메모리 사용량과 성능 최적화를 위해 단순 값만 저장되고 메서드나 속성을 가지지 않는다.

- -> int 데이터 타입에 대한 값에 메서드를 호출하려면 해당하는 레퍼 클래스 객체로 변환해야 한다. 

 

 

객체 타입 Reference types (참조 타입)

- 실제 데이터가 아닌 메모리 주소를 저장한다. 이 주소는 실제 데이터가 저장된 힙 메모리를 가리킨다.

- 기본 타입을 제외한 모든 타입

- String / Integer / Double / 배열 / 클래스 인스턴스 등

- 메서드와 속성을 가질 수 있다.

- 값이 필요할 때마다 실제 값으로 가야 하는 언박싱 과정을 거쳐야 하니 기본 타입과 비교해서 접근 속도가 느리다.

 

 

코틀린은 전부 객체이다. JVM 에서 어떻게 타입을 컴파일 하는 걸까?

성능 최적화를 위해 내부적으로는 JVM 의 기본 타입을 활용한다. 이 과정에서 코틀린 컴파일러는 타입 사용 방식을 지능적으로 분석하여 기본 타입 또는 참조 타입으로 변환한다.

- 기본 타입
코틀린에서의 Int / Double / Float / Long 등은 추가적인 null 가능성 ('?') 이 명시되지 않은 경우 기본 타입으로 취급된다.

- 참조 타입
null 가능성이 추가된 타입 ( `Int?` `Double?` 등 ) 은 기본 타입으로 표현할 수 없고 그에 상응하는 참조 타입 ( `Integer` `Double` 등) 으로 컴파일된다.
모든 컬렉션 타입과 사용자 정의 클래스는 참조타입으로 컴파일된다.

 

 

 

3 타입 추론

코틀린

변수 선언 시 val 이나 var 을 사용하여 타입 추론을 제공한다.

자바

자바 10 이후 var 가 도입되어 제한적인 타입 추론을 제공한다.

 

 

 

 

참조 블로그

 

 

 

'Language > JAVA' 카테고리의 다른 글

배열, for 문에서의 자바와 코틀린  (0) 2024.04.25
  1. 1 Null 가능성
  2. 2 기본 타입과 객체 타입
  3. 기본 타입 Primitive types (원시 타입)
  4. 객체 타입 Reference types (참조 타입)
  5. 3 타입 추론
'Language/JAVA' 카테고리의 다른 글
  • 배열, for 문에서의 자바와 코틀린
다시은
다시은
🔥
다시은
재은로그
다시은
전체
오늘
어제
  • 분류 전체보기 (127)
    • 코딩테스트 (40)
    • Language (2)
      • JAVA (2)
      • Kotlin (0)
      • TypeScript (0)
    • SQL (1)
    • 인프라 (1)
    • 왕초보일지 (77)
    • 회고 (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • mysql
  • sql
  • 스프레드시트
  • Kotlin
  • 문자열변환
  • SQL문법
  • googleapis

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
다시은
자바와 코틀린 데이터 타입 시스템 비교
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.