반응형
Primitive Type과 Wrapper Class
Primitive Type(기본 데이터 타입)
Java에는 8개의 기본 데이터 타입이 있다.
값 자체를 저장하며, 객체가 아닌 단순한 값을 가지기 때문에 메모리 사용과 성능 면에서 효율적이다.
크기 | 값의 범위 | 기본 값 | |
byte | 1byte (8bit) | -128 ~ 127 | 0 |
short | 2byte (16bit) | -32,768 ~ 32,767 | 0 |
int | 4byte (32bit) | -2^31 ~ 2^31-1 | 0 |
long | 8byte (64bit) | -2^63 ~ 2^63-1 | 0L |
float | 4byte (32bit) | ±3.40282347E+38F (6-7자리 유효숫자) |
0.0f |
double | 8byte (64bit) | ±1.79769313486231570E+308 (15자리 유효숫자) |
0.0d |
char | 2byte (16bit) | 0 ~ 65,535 (유니코드 문자) | '\u0000' |
boolean | 1bit | true 또는 false | false |
Wrapper Class(래퍼 클래스)
래퍼클래스는 기본 데이터 타입을 객체로 감싸는 클래스이다.
이는 기본 타입의 값을 객체로 다룰 수 있게 해준다. 각 기본 타입에 대응하는 래퍼클래스가 있다.
기본 데이터 타입 | 래퍼클래스 |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
장단점
장점 | 단점 | |
기본 데이터 타입 |
|
|
래퍼 클래스 |
|
|
Autoboxing (오토박싱)
기본 자료형을 자동으로 해당하는 래퍼 클래스로 변환하는 것을 의미한다.
예를 들어, int 를 Integer로 변환하는 것이 오토박싱이다.
메서드 파라미터로 객체가 필요할 때나, 컬렉션에 기본 타입을 추가할 때 사용된다.
예시)
public class AutoboxingExample {
public static void main(String[] args) {
// 기본 자료형 int를 Integer 객체로 자동 변환 (오토박싱)
int primitiveInt = 5;
Integer wrappedInt = primitiveInt; // 오토박싱
System.out.println("primitiveInt: " + primitiveInt);
System.out.println("wrappedInt: " + wrappedInt);
}
}
Unboxing (언박싱)
래퍼 클래스의 객체를 기본 데이터 타입으로 자동 변환하는 것을 말한다.
이는 객체에서 기본 타입의 값을 필요로 할 때, Java 컴파일러에 의해 자동으로 수행된다.
예시)
public class UnboxingExample {
public static void main(String[] args) {
// Integer 객체를 기본 자료형 int로 자동 변환 (언박싱)
Integer wrappedInt = 10;
int primitiveInt = wrappedInt; // 언박싱
System.out.println("wrappedInt: " + wrappedInt);
System.out.println("primitiveInt: " + primitiveInt);
}
}
장점과 주의사항
장점
- 오토박싱과 언박싱의 코드의 가독성을 높인다.
- 개발자가 명시적으로 변환할 필요 없이 기본 타입과 객체 타입을 쉽게 상호 변환 해준다.
- 특히, 컬렉션 프레임 워크 사용 시 기본형 값을 쉽게 추가하고 조작할 수 있다
주의사항
- 성능 저하: 오토박싱/언박싱 과정에서 추가적인 객체 생성과 메모리 사용으로 인해 성능이 저하될 수 있다.
- 메모리 사용량 증가: 래퍼 클래스 객체는 기본형보다 더 많은 메모리를 사용한다.
- 가비지 컬렉션 부담: 생성된 래퍼 객체들은 가비지 컬렉션의 대상이 되어 시스템에 추가적인 부하를 줄 수 있다.
- 반복문에서의 성능 문제: 특히 반복문 내에서 빈번한 오토박싱/언박싱은 심각한 성능 저하를 초래할 수 있다.
- 의도치 않은 동작: 개발자가 오토박싱/언박싱의 발생을 인지하지 못하면 예상치 못한 결과가 발생할 수 있다.
정리! 가능한 경우 기본 데이터 타입을 직접 사용하고, 특별히 필요한 경우에 래퍼 클래스를 활용하는 것이 좋다.
728x90
반응형
'Language > Java' 카테고리의 다른 글
가비지 컬렉션 (GC; Garbage Collection) (0) | 2024.12.08 |
---|---|
Inheritance와 Composition (클래스 간의 관계) (0) | 2024.12.07 |
Promotion(자동형변환)과 Casting(명시적형변환), Upcasting vs Downcasting (0) | 2024.12.05 |
String Interning (0) | 2024.12.04 |
String vs String Builder vs String Buffer (0) | 2024.12.03 |