Primitive Type (기본형 타입)
논리형(boolean), 문자형(char), 정수형(byte, short, int, long), 실수형(float, double)
- 자바에서 기본적으로 제공되는 8개의 데이터 타입으로, 스택 메모리에 데이터의 값을 직접 저장한다.
- 사용하기 전에 반드시 선언(Declared)되어야 한다.
- OS에 따라 자료형의 길이가 변하지 않는다.
- null 값을 가질 수 없으며 null 을 넣고 싶다면 Wrapper Class를 활용하면 된다.
Wrapper Class
기본형 타입을 객체로 감싸는 클래스
byte: Byte / short: Short / int: Integer / long: Long / float: Float / double: Double / char: Character / boolean: Boolean
Java1.5 부터 오토박싱(Autoboxing)과 오토언박싱(Unboxing) 기능이 도입되면서 기본형 타입과 Wrapper 클래스 간의 변환을 자동으로 처리할 수 있게 되었다.
기본형 타입의 종류
- boolean
- 조건문과 논리 연산에서 사용되며, 프로그램의 흐름 제어에 사용되는 타입
- char
- 문자를 저장하고 처리할 때 사용되는 타입
- byte
- 주로 이진데이터를 다루는데 사용되는 타입
- short
- c언어와의 호환을 위해 사용되는 타입
- int
- 대부분의 정수 연산에서 사용되는 타입
- long
- 수치가 큰 데이터를 다풀 때 주로 사용되는 타입
- 초기화 할 때 숫자 뒤에 알파벳 L 을 붙여서 long 타입의 정수 데이터임을 알려줘야 한다.
- float, double
- 실수를 가수와 지수 형식으로 저장하는 부동소수점 방식으로 저장
- double이 float 보다 정밀하게 표현할 수 있다.
- 자바에서 실수의 기본 타입은 double이므로 float에는 알파벳 F를 붙여서 float 타입의 실수 데이터임을 명시해주어야 한다.
Reference Type (참조형 타입)
객체의 주소를 저장하며 8개의 기본형을 제외한 나머지 타입이다. 자바의 클래스, 인터페이스, 배열, enum 등은 모두 참조형 타입에 속한다. 자바는 참조형 변수 간의 연산을 할 수 없으므로 실제 연산에 사용되는 것은 모두 기본형 변수이다.
- 해당 객체가 저장된 메모리의 주소(참조값)를 변수에 저장한다.
- 객체 생성과 Heap 메모리
- 참조형 타입으로 선언된 변수는 객체를 생성할 때 'new' 키워드를 사용하여 Heap 메모리에 인스턴스를 생성한다.
- Heap 메모리는 동적으로 할당되며, Garbage Collector가 더 이상 참조되지 않는 객체를 탐지하고 자동으로 메모리를 해제한다.
- null 값
- 참조형 변수는 객체가 생성되지 않았을 때 'null' 값을 가질 수 있다.
- 객체나 배열을 'null'로 받으면 NullPointException이 발생할 수 있다.
- 참조값(Reference Value)
- Heap 메모리에 생성된 인스턴스는 메서드나 다른 객체에 접근하기 위해 Stack 영역에 존재하는 일종의 '포인터'인 참조값을 가지고 있다.
- 참조값을 통해 인스턴스를 핸들링하며, 이를 통해 인스턴스의 멤버 변수나 메서드에 접근할 수 있다.
- String 클래스
- String 클래스는 참조형에 속하지만, 불변(immutable)한 객체이기 때문에 사용은 기본형처럼 사용할 수 있다.
- String 클래스의 값은 변경할 수 없으며, 변경하고자 할 때는 새로운 String 클래스를 생성하여 처리한다.
- 따라서 String을 자주 조작해야 할 경우에는 가변(mutable)한 문자열을 다루는 'StringBuilder'또는 'StringBuffer' 클래스를 사용하는 것이 더 효율적이다.
'Languages > Java' 카테고리의 다른 글
[Java] Casting (0) | 2023.08.10 |
---|---|
[Java] 문자열 클래스 & 오브젝트 클래스 (0) | 2023.08.10 |
[Java] 직렬화 (Serialization) (0) | 2023.07.31 |
[Java] 오토 박싱(Autoboxing) & 오토 언박싱(Unboxing) (0) | 2023.07.31 |
[Java] Call by Value & Call by Reference (0) | 2023.07.24 |