본문 바로가기

kh정보교육원 JAVA

KH정보교육원 강남지점 JAVA 19일차 - JAVA Wrapper Class, Wrapper String Test

  •  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