ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 학원 DAY19. Wrapper 클래스
    기록 2022. 10. 3. 22:52

    - 기본자료형 값을 담은 객체를 생성하는 클래스다.

    - java.lang패키지에 정의되어 있다.

    ex. Integer x = new Integer(10);   // x라는 변수에는 주소값이 들어있으며, Integer객체에 멤버변수의 이름은 모르지만 10이라는 값이 들어있다는 의미이다. 즉, Integer라는 객체는 정수값10을 갖고 있는 객체이다.

     

    사용해야 할 때 :

    • 기본자료값이 아닌 객체로 저장해야 할 때 (자바의 자료구조 안에는 기본자료형을 담을 수 없고 객체만 담을 수 있다.)
    • 호출할 메소드의 매개변수가 객체를 요구할 때
    • null값이 저장될 가능성이 있을 때 (기본자료형은 null값을 저장할 수 없다.)
    • 해당 기본자료형값에 대한 다양한 기능을 실행해야 할 때

    각각의 기본자료형마다 대응되는 Wrapper클래스가 존재한다.

    byte  --- Byte
    short --- Short
    int  --- Integer
    long  --- Long
    float --- Float
    double --- Double
    char   --- Character
    boolean --- Boolean

     

    Boxing : 박스안에 값을 담는 것

    unboxing : 박스안에 들어있는 기본 자료형 값을 꺼내는 것

     

    < Auto-boxing을 이용해서 Wrapper 객체에 기본자료형값 담기 >
        Integer x = 10;        // Integer x = new Integer(10);  (이러한 형태는 API에서 depricated상태임.)
        Long x = 1000000000L;        // Long x = new Long(100000000L);
        Double x = 3.14;       // Double x = new Double(3.14);
        Boolean x = true;      // Boolean x = new Boolean(true);

    => 오토박싱은 변수의 타입이 Wrapper클래스 타입이면 왼쪽 코드와 같이 적었을 때,
         실제로 오른쪽 코드가 실행되는 것이다. 

     

    < Auto Unboxing을 이용해서 Wrapper 객체를 기본자료형타입 변수에 대입하기 >
        Integer x = new Integer(10);
        int y = x;          // int y = x.intValue();       x가 참조하는 Integer객체의 값 10이 대입된다.

      => 오토언박싱은 Wrapper객체를 기본자료형타입의 변수에 대입하면
            Wrapper객체의 xxxValue() 메소드를 실행해서 Wrapper객체에 저장된 값이 대입된다.

    package day19;
    
    public class WrapperApp1 {
    
    	public static void main(String[] args) {
        	// 오토박싱이 지원되기 때문에 기본자료형값을 대입하면 
    		// 1. 지정된 값을 담고 있는 Wrapper객체가 생성된다.
    		// 2. 생성된 Wrapper객체의 참조값이 참조변수에 대입된다. 
    		Integer a = 10;  		// a는 Integer객체의 주소값을 가지고 있다.
    		Long b = 1000000000L;   // b는 Long객체의 주소값을 가지고 있다.
    		Double c = 3.14;		// c는 Double객체의 주소값을 가지고 있다.
    		
    		System.out.println(a);  // System.out.println(a.toString()); 문자열"10"이 출력된다.
    		System.out.println(b);  // System.out.println(b.toString()); "1000000000"이 출력된다.
    		System.out.println(c);  // System.out.println(c.toString()); "3.14"가 출력된다.
    		
    		int x = a;  			// a가 참조하는 Integer객체의 정수값 10을 가지고 있다.
    		long y = b;				// y는 b가 참조하는 Long객체의 정수값 100000000을 가지고 있다.
    		double z = c;           // z는 c가 참조하는 Double객체의 실수값 3.14를 가지고 있다.
    		
    		System.out.println(x);   // 정수값 10이 출력된다.
    		System.out.println(y);   // 1000000000이 출력된다.
    		System.out.println(z);   // 3.14가 출력된다.
    		
    		Integer k = 10;
    		Integer i = 100;
    		Double j = 3.0;
    		
    		// k, i, j는 객체의 주소값을 가지고 있지만, 
    		// 사칙연산에 참여하게 되면 그 객체가 가지고 있는 기본자료형값이 사칙연산에 이용된다.
    		System.out.println(k + i + j);
    		
     	}
    
    }

     

    Wrapper클래스의 메소드

    메소드 이름에 parse가 붙어있으면 문자열을 다른형태로 변환하는 경우이다.

    - 문자열을 정수로

         Integer.parseInt(문자열) -> 정수값

         Long.parseLong(문자열) -> 정수값

    - 문자열을 실수로

         Double.parseDouble(문자열) -> 실수값

    - 문자열을 불린으로

         Boolean.parseBoolean("true") -> true

         Boolean.parseBoolean("false") -> false

    - 문자열을 날짜로

         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

         sdf.parse("2022-09-28") -> Date 객체

    댓글

Designed by Tistory.