- 자바의 기본 데이터타입 8가지와 1:1로 대응하는 8개의 클래스의 모음(ex. java.lang 패키지)
- 대부분 클래스명은 기본 데이터 타입의 첫 글자를 대문자로 사용한다.
=> char - Character, int - Integer
- 기본 데이터타입 변수로 할 수 있는 일이 한정적(데이터 저장 및 사용)이므로
이에 대한 클래스를 정의하여 클래스 내에 상수 및 다양한 메서드를 제공함으로써
기본 데이터타입에 대한 다양한 정보를 저장하거나 or 다양한 작업을 수행하도록 지원한다.
=> 즉, 좀 더 효율적인 프로그래밍이 가능하도록 도와주는 클래스들의 모음이다.
- 기본 데이터타입 데이터(Stack 영역)를 Wrapper 클래스 타입 참조변수로 관리 가능하다
- Wrapper 클래스 내부에는 Object 클래스의 toString() 메서드가 오버라이딩 되어 있으므로
Wrapper 클래스 타입 객체에 저장된 값을 출력하면 출력문에 변수값을 그대로 사용하면 된다.
ex) String str = "String";
System.out.println(str); <= 변수값만 사용
✍ Wrapper 클래스의 대표적인 예
public static void main(String[] args) {
System.out.println(Integer.SIZE); // int 타입 메모리 크기
System.out.println(Integer.BYTES); // int 타입 메모리 크기
System.out.println(Long.SIZE); // long 타입 메모리 크기
System.out.println(Long.MAX_VALUE); // long 타입 최대값
System.out.println(Float.MIN_VALUE); // long 타입 최소값
}
--> 위와 같이 Wrapper 클래스는 기본형 첫 글자를 대문자로 바꾸어 클래스명으로 사용한다.
데이터 타입의 크기, 최소값, 최대값등을 편리하게 사용할 수 있다.
✍
- 기본 데이터타입은 Stack 공간에 실제 데이터(리터럴) 형태를 직접 저장하고 관리하지만
참조 데이터타입(객체)은 Heap 공간에 실제 데이터가 저장되며, 참조변수가 해당 공간의 주소값을 저장 및 관리한다.
=> 따라서, 기본 데이터타입 변수와 참조 데이터타입 변수는 서로 호환이 불가능했다.
하지만 !!!!!!!!!!!!!!!!!!!!
Java(JDK) 1.5 버전 부터 오토 박싱, 오토 언박싱 기능에 제공되면서 두 데이터타입들이 자동 변환 가능해졌다.
1. 오토 박싱(Auto Boxint)
- 기본 데이터타입(물건) -> Wrapper 클래스 타입 객체(박스)로 자동(Auto) 변환(포장)
2. 오토 언박싱(Auto Unboxing)
- Wrapper 클래스 타입 객체(박스)의 포장을 뜯어서 기본데이터타입 꺼내기
✍ 오토 박싱
public static void main(String[] args) {
Integer n1;
int num1 = 20;
n1 = Integer.valueOf(num1); // num1의 값을 n1에 저장
System.out.println("기본 데이터 타입 num1의 값 : " + num1);
System.out.println("참조 데이터 타입 n1의 값 : " + n1);
}
--> 자바 초기에는 위와 같이 valueOf() 메서드를 이용하여 참조 데이터 타입에 기본 데이터 타입을 저장해야 했다.
💻
그러나 자바 1.5 버전 이후엔
public static void main(String[] args) {
Integer n1;
int num1 = 20;
n1 = num1;
System.out.println("기본 데이터 타입 num1의 값 : " + num1);
System.out.println("참조 데이터 타입 n1의 값 : " + n1);
}
--> 이렇게 그냥 바로 참조 데이터 타입에 기본 데이터 타입의 값을 저장할 수 있다.
✍ 오토 언박싱
Integer n2 = new Integer(20);
int num2;
num2 = n2.intValue();
System.out.println("기본 데이터타입 num2 = " + num2);
System.out.println("참조 데이터타입 n2 = " + n2);
--> 자바 초기에는 이렇게 intValue() 메서드를 통해 Wrapper 클래스 타입 객체를 뜯어 기본 데이터 타입을 꺼내야 했다
💻
그러나!!!!!!!!!!!!!!!!
Integer n2 = new Integer(20);
int num2;
num2 = n2;
System.out.println("기본 데이터타입 num2 = " + num2);
System.out.println("참조 데이터타입 n2 = " + n2);
--> 자바 1.5 버전 이후엔 그냥 기본데이터타입 변수에 참조 데이터타입을 저장할 수 있다.
결과는 똑같다 !!
💻
--> 결과는 동일하다.
🔍 문자열을 기본 데이터로 변환하기
주로 웹의 <form> 태그나 GUI 환경에서 데이터를 입력받았을 때 수치데이터를 입력하더라도 모두 문자열로 취급된다.
(ex, request.getParameter(str) -> 문자열로 된 정수를 int형 정수로 변환 필요)
따라서, 해당 문자열을 실제 연산을 위해 기본 데이터타입으로 변환하려면 Wrapper 클래스에서 제공하는
메서드를 통해 해당 타입으로 변환해주어야 한다 !
✍ 기본 문법
Wrapper클래스명.parseXXX(문자열 변수 또는 리터럴);
XXX는 자바의 기본 데이터 타입 이름
ex)
정수형으로 변환할 경우 : Integer.parseInt("100");
실수형으로 변환할 경우 : Double.parseDouble("3.14");
✍
public static void main(String[] args) {
String strNum = "100";
System.out.println(Integer.parseInt(strNum));
System.out.println(strNum + 100);
System.out.println(Integer.parseInt(strNum) + 100);
}
이 코드를 출력하면 어떤 결과가 나올까?
💻
=> strNum을 int 형으로 바꿔주지 않으면 문자열이기 때문에 100을 더해 주어도 200이 아니라
100100 으로 출력된다.
strNum을 parseInt를 통해 정수 타입으로 변환하고 나면 연산결과가 200으로 출력된다.
🔍 Wrapper 클래스의 다양한 메서드
✍ Integer 클래스를 활용하여 대소관계 비교 하기
public static void main(String[] args) {
int num1 = 10;
int num2 = 20;
System.out.println(Integer.max(num1, num2));
}
💻
=> num1과 num2중에 더 큰 값이 출력되었다.
✍ 정수의 진법 변환
public static void main(String[] args) {
int num1 = 10;
System.out.println("2진수 변환 : " + Integer.toBinaryString(num1));
System.out.println("8진수 변환 : " + Integer.toOctalString(num1));
System.out.println("16진수 변환 : " + Integer.toHexString(num1));
}
정수를 2진수, 8진수, 16진수를 변환하는 메서드도 존재한다.
💻
✍ Character 클래스의 메서드 활용
public static void main(String[] args) {
char ch = 'A';
System.out.println(Character.isUpperCase(ch));
System.out.println(Character.isLowerCase(ch));
}
=> Character 클래스 내부에도 다양한 메서드가 있다.
위의 코드는 대문자와 소문자를 판별하는 메서드를 활용한 예시이다. 이 외에도
Character.isDigit(ch);
Character.isSpaceChar(ch);
위와 같이 숫자(0~9)인지 공백문자인지를 판벽하는 메서드들도 있다.
'개발 > Java' 카테고리의 다른 글
[Java] try ~ catch ~ finally (0) | 2023.03.01 |
---|---|
[Java] try~catch (0) | 2023.03.01 |
[Java] toString() 메서드 (0) | 2023.02.25 |
[Java] Enum 설계하기 (0) | 2023.02.22 |
[Java] 인터페이스의 장점 (0) | 2023.02.20 |