- Wrapper 클래스
=> 기본 자료형을 객체로 포장해주는 클래스
- 언제 사용하는가? 기본 자료형으로 사용할 수 있지만 경우에 따라 "객체"로 취급해야 하는 경우가 있다.
이때 Wrapper 클래스를 사용해야 우리가 원하는 기능을 호출할 수 있다.
ex) 우리가 원하는 기능을 호출할 때 메소드의 매개변수로 객체 타입만이 요구된다면
int가 가질 수 있는 정수값을 가지되, 객체로 표현해놓은 Wrapper 클래스라면 매개변수로 보낼 수 있다.
기본 자료형 Wrapper 클래스
boolean Boolean
char Character
byte Byte
short Short
int Integer
long Long
double Double
*integer와 char는 Wrapper클래스에서 풀네임으로 작성하니 주의하자
public class A_DateTest {
public void method1() {
//기본자료형과 대응하는 Wrapper클래스 박싱 언박싱 테스트를 해보자.
// Boxing : 기본 자료형 => Wrapper 클래스
// -> 기본자료형을 Wrapper 클래스 타입으로 박스에 담아준다, 포장한다는 의미
// 1. 객체 생성을 통한 방법
Integer i1 = new Integer(num1);
Integer i2 = new Integer(num2);
// 기본자료형일 때는 메소드를 활용할 수 없지만
// 객체로 바뀌었을 때는 Integer라는 클래스에 존재하는 여러가지 메소드를 이용할 수 있다.
// 객체로 변경하면 메소드 이용 가능
System.out.println(i1.equals(i2)); // 결과 : true 값비교니까.
System.out.println(i1.compareTo(i2)); //결과 : 0
// => 두 값을 비교해서 i1이 크면 1 반환 / i2가 크면 -1 반환 / 같으면 0 반환
// 2. 객체 생성을 하지 않고 바로 대입(Auto Boxing)
Integer i3 = num2; // Integer 클래스 타입에 int값 바로 대입 -> 자동박싱 처리가 됨
// unBoxing : Wrapper 클래스 -> 기본 자료형
// -> 박스에 있던 걸 다시 꺼내는 거니 unBoxing
// 1. Wrapper 클래스의 ~ Value() 메소드 이용 -> 타입에따라 달라서 ~ 표시
int num3 = i1.intValue();
int num4 = i2.intValue();
// i1이 가지고 있는 객체로부터 intValue 호출하면 객체가 가진 int값 호출. float였으면 객체.floatValue();
// 1. 메소드 사용한 방법
// Wrapper 클래스의 ~ Value() 메소드 이용 -> 타입에따라 달라서 ~ 표시
int num3 = i1.intValue();
int num4 = i2.intValue();
// i1이 가지고 있는 객체로부터 intValue 호출하면 객체가 가진 int값 호출. float였으면 객체.floatValue();
// 2. 메소드 사용하지 않고 바로 대입(Auto UnBoxing)
int num5 = i1; // 기본자료형과 i1 객체는 다른 타입이지만 대입시켜주는 부분에서 자동으로 처리 Auto UnBoxing
System.out.println(num5); //결과 : i1 객체가 가지고 있는 10이 출력
*** 정리 ***
// 핵심 : 기본자료형을 객체화할 수 있다. (기본 자료형 -> Wrapper 클래스)
// 정수값, 실수값인데 객체타입으로 다뤄져야 하는 상황에서 사용!
// 그때 기본자료형을 Wrapper클래스화 시키기
// Wrapper클래스는 java.lnag.*; 하위에 있어서 import처리 필요 없음
// new Integer(자료형 -> Wrapper class) Or intValue();(Wrapper class -> 자료형)
// 위와같이 할 필요 없음 Auto Boxing, Auto UnBoxing 되기 때문에 값 대입만 해주면 됨
}
}
public class B_WrapperStringTest {
// 문자열 => 기본자료형
// 기본자료형 => 문자열
// ex) "123" + "456" 문자열 타입으로는 더할 수 없음, 나에게 입력된 값은 String인데 실제로 다루고자 하는 타입은 숫자(정수)타입으로 다루고 싶음
// 문자열 -> 기본자료형, 기본자료형 -> 문자열 처리가 돼야 다루는데 문제가 없음
public void method1() {
// 문자열 => 기본자료형 바꾸는 방법 테스트
// 문자열 => 기본자료형 으로 바꾸는 걸 "파싱"이라고 함
String str1 = "10";
String str2 = "15.3";
System.out.println(str1 + str2); // "10" + "15.3" => "1015.3"
// 1. String -> 기본 자료형 // Wrapper클래스안에는 여러 메소드가 있음
// 해당Wrapper클래스.parse~() 메소드 호출 : 파싱처리
byte b = Byte.parseByte(str1); // 문자열을 byte값으로 변환한다
//-> str1을 byte타입으로 변환시키고 싶다면 Byte Wrapper클래스가 가지고 있는 메소드 중 parseByte 메소드 호출하고 str1이라는 문자열을 넣는다.
short s = Short.parseShort(str1); //문자열을 short값으로 변환한다.
int i = Integer.parseInt(str1); // 문자열을 int값으로 변환한다.
long l = Long.parseLong(str1); // 문자열을 long값으로 변환한다.
// 만약 str2를 전달하면 실수기 때문에 java.lng.NumberFormatException 발생 -> 문자열 정수타입이 들어가야함
// Number : 숫자, Format : 형식, Exception : 오류 -> 숫자 형식 오류 에러
//str2 "15.3" -> 기본자료형
float f = Float.parseFloat(str2); // 문자열을 float값으로 변환한다.
double d = Double.parseDouble(str2); // 문자열을 double값으로 변환한다.
System.out.println(i + d); // 출력 결과 : 25.3 (10+ 15.3 이니까)
// 알아보고 싶었던 결과 : 문자열 + 문자열 못하니 자료형으로 변환시켜 처리
boolean bool = Boolean.parseBoolean("true");
System.out.println(bool);
// true, false로 파싱 가능 -> return 값 자체가 boolean 타입이기 때문에
// 정확하게 문자열이 true인 경우 true로 파싱, 그 외 문자열은 false로 파싱
// true 혹은 false로 파싱 가능
// 다른 문자열 넣으면 무조건 false로 파싱
// 문자열을 char(문자)로 파싱하지 못하고 charAt()으로 문자 하나만 분리해냄
char c = "abc".charAt(0);
// 기본자료형 => 문자열 바꾸는 방법 테스트
// 2. 기본자료형 -> String // 객체가 아니니 메소드 호출 불가능
// 기본자료형 -> Wrapper -> String // 메소드 호출 가능
// 해당Wrapper클래스.valueOf().toStirng()
String strI = Integer.valueOf(i).toString();
String strD = Double.valueOf(d).toString();
// Wrapper 클래스가 아닌 String 클래스 활용
// String클래스의 vaLueof()메소드 통해 전달되는 다양한 타입을 문자열로 리턴
String strI2 = String.valueOf(i); // int 변수의 문자열 리턴
String strD2 = String.valueOf(d);
System.out.println(strI2 + strD2); / 출력 결과 : 문자열 + 문자열 -> 1015.3
'kh정보교육원 JAVA' 카테고리의 다른 글
InputStreamReader/OutputStreamWriter (0) | 2021.07.23 |
---|---|
Stream, FileOutputStream, FileInputStream (0) | 2021.07.21 |
KH정보교육원 강남지점 19일차 - java.util.Date class, java.text.SimpleDateFormat calss, (0) | 2021.07.20 |
KH정보교육원 강남지점 JAVA 18일차 중 내용 정리 1 - 자바란?, 자바 설치 및 환경 설정, 이클립스 설치, 프로그래밍 순서(코드 쓰는 방법(패키지, 클래스, 메소드)) (0) | 2021.07.18 |