Wrapper클래스
- 값들을 싸고 있는 것과 같다고 하여 Wrapper Class 라고 부릅니다.
기본타입(primitive type) 래퍼클래스(wrapper class)
| byte | Byte |
| char | Character |
| int | Integer |
| float | Float |
| double | Double |
| boolean | Boolean |
| long | Long |
| short | Short |
- char, int의 래퍼 클래스는 각각 Integer와 Character이고 나머지는 대문자로 시작된다는 점 외 이름은 동일
Wrapper 클래스가 필요한 이유
- 기본 값이 있는데도 불구하고 래퍼 클래스가 필요한 이유는 아래 있는 두 가지의 이유와 같습니다
- 래퍼 클래스는 추가적인 옵션을 다양하게 제공해주기 때문
- 예를 들어
Integer hundred = Integer.valueOf("100"); Boolean value = Boolean.valueOf("True"); //valueOf = 객체를 “클래스에 따라 변환”하는 데 사용되는 함수입니다- 스트링에서 boolean 값 또는 integer 값을 출력할 경우 래퍼 클래스를 이용해 실행할 수 있습니다
- 래퍼 클래스는 유틸리티 메소드를 제공
- float가 있고 이 특정 float의 정숫값을 출력하려고 할 때 intValue 메서드를 사용할 수 있습니다
- 추가로, 만약 2진법으로 이루어진 스트링을 전환하고 싶을 때,
- 다시, 2진법 형태의 스트링이 정수를 나타내도록 전환시키고 싶은 경우, 래퍼 클래스에는 이런 것들을 실행할 수 있는 많은 유틸리티 메소드가 있다
- 또 래퍼 클래스의 추가적인 기능으로는 기본 값들을 컬렉션에 저장시킬 수 있습니다
- 컬렉션에 저장하려면 추가 대상이 꼭 객체여야하고 래퍼 클래스는 이 기본값에 객체를 제공하는 역할을 해야합니다
- //Conversion Float floatWrapper = Float.valueOf(57.0f); int floatToInt = floatWrapper.intValue(); // 57 Integer seven = Integer.valueOf("111", 2); Integer.toString(seven,2);
래퍼 클래스의 생성자로 정수 생성하기
Integer integer = new Integer(5);
Integer integer1 = new Integer(5);
//Integer(int) 생성자는 Java 9부터 deprecated 되었으며, 사용이 권장되지 않는다.
래퍼 클래스의 정적 메서드로 정수 생성하기
Integer integer = Integer.valueOf(5);
Integer integer1 = Integer.valueOf(5);
- 각각의 래퍼 클래스는 모두 정적 메소드를 갖고 있는데
Integer integer = Integer.valueOf("54654");
- 이런식으로 값으로 스트링을 넣을 수 있습니다
둘 중 어떤 것이 좋을까?
Integer i1 = new Integer(5);
Integer i2 = new Integer(5);
Integer i3 = Integer.valueOf(5);
Integer i4 = Integer.valueOf(5);
i1== i2
//false ❗ (캐시 범위 밖)
i3 == i4 // true ✅ (캐시 범위 안)
//Integer.valueOf()는 -128~127 범위의 값에 대해 동일한 객체를 재사용하므로, 이 범위 내에서는 == 비교 시 true가 나올 수 있다.
- integer 참조 타입
- i1 참조하는 값
- 참조 변수에 대해 {==}는 값을 비교하지 않습니다
- 값의 메모리 주소를 비교
- 스트링 클래스와 동일하게 모든 래퍼 클래스 또한 불변성을 갖습니다
- 그 말은 값이 지정된 이후에는 변경될 수 없다는 말
- 여기 보면 i1에 대해 새로운 정수 변수가 생성되었고, i2에 대해 또 다른 정수 변수가 생성이 됐는데 값은 같은 숫자를 가지고 있는 것
- Integer.valueOf()의 기능은 존재하는 객체 중 같은 값을 가지는 게 있는지 체크한 후 있다면 재사용합니다.
- 만약 다른 객체에서 동일한 값을 찾는다면, 그 값을 다시 사용하고 동일한 결과를 출력
- 해당 객체의 값이 변하는 것이 아니기 때문에 괜찮다
- 정수 → 불변성 따라서 괜찮
- 그렇기 때문에 두 개의 다른 참조 값이 하나의 객체를 가리키고 있다고 해도 전혀 문제가 되지 않습니다.
추천 방식
- Integer.valueOf() 또는 valueOf()를 사용해서 어떤 래퍼든 메서드를 생성하고 객체가 생성되어 있다면 매번 새로운 객체를 생성하지 않아도 되게 다시 활용할 수 있게 하는 것이 좋습니다.
- 만약 new를 사용한다면 새로운 객체를 매번 사용하고 있는 걸 의미하는데
- Integer.valueOf()는 그런 방식x
- 이 메서드는 Heap 안에 존재하는 기존 객체를 다시 사용하려고 할 것입니다. (정수에도 동일하게 적용)
- float, Double, String을 값을 받을 수 있습니다
- 이 모든 생성자를 이용할 수 있고 글자 생성자를 이용할 수 있습니다
- 나아가 boolean과 스트링을 입력할 수 있습니다
- boolean 생성자도 이용가능
- 문자열이 "true"(대소문자 무관)일 때만 true, 그 외 모든 값은 false
- 이걸 통해 값을 출력할 수도 있습니다.
- Boolean b1 = new Boolean("true"); // true Boolean b2 = new Boolean("True"); // true Boolean b3 = new Boolean("False"); // false Boolean b4 = new Boolean("SomeString"); // false
'Programming Language > Java' 카테고리의 다른 글
| [TIL] 자바 객체 설계부터 상속까지 (+ toString이 자동 호출되는 이유) (0) | 2026.02.03 |
|---|---|
| [TIL] JAVA 배열에 관해서 (0) | 2026.01.30 |
| [TIL] String 클래스 (0) | 2026.01.28 |
| [TIL]자바 프로그래밍의 참조 자료형 (0) | 2026.01.28 |
| [WIL] 자바 반복문 그리고 아쉬운 부분 (0) | 2025.11.02 |
