프로그래밍/java

[JAVA] Wrapper 클래스

승민아 2022. 5. 21. 18:49

Wrapper 클래스

: 자바 기본 타입을 클래스화 한 것 -> 유용한 메소드가 제공됨 -> JDK의 많은 클래스는 대부분 객체만 다룬다

-> 그래서 클래스화

 

기본 타입 byte short int long char float double boolean
Wrapper 클래스 Byte Short Integer Long Character Float Double Boolean

-> ex) java.lang.Integer, java.lang.Character

 

Wrapper 객체 생성 ( 기본 타입으로 )

public class Hongong {
    
    public static void main(String args[]){
        Integer i = Integer.valueOf(10);
        Character c = Character.valueOf('c');
        Double d = Double.valueOf(3.14);
        Boolean b = Boolean.valueOf(true);
    }
}

-> static Integer valueOf(int i)로 메소드가 있기에 저렇게 만들 수 있음

-> static Integer valueOf(String s)도 존재하기에 아래처럼 문자열로 생성 가능

 

단, Float 객체는 float 타입으로 생성해야함

Float ff = Float.valueOf((float)3.14);

 

 

(String으로 생성)

public class Hongong {

    public static void main(String args[]){
        Integer i = Integer.valueOf("10");
        Double d = Double.valueOf("3.14");
        Boolean b = Boolean.valueOf("true");
        Float f = Float.valueOf("3.14");

    }
}

 

java9 이후로 생성자를 이용한 Wrapper 객체 생성이 불가함

 

Wrapper 객체 메소드

int -> Integer 객체

Integer i = Integer.valueOf(10);

 

Integer -> int

Integer i = Integer.valueOf(10);
int ii = i.intValue();

 

다른 자료형들도 똑같다.

Character c = Character.valueOf('c');
char cc = c.charValue();

Double d = Double.valueOf(3.14);
double dd = d.doubleValue();
        
Boolean b = Boolean.valueOf(true);
boolean bb = b.booleanValue();

 

박싱과 언박싱

  • 박싱 : 기본 타입의 값을 Wrapper 객체로 변환
  • 언박싱 : Wrapper 객체에 들어있는 기본 타입의 값을 빼냄

박싱은 아래와 같은 거 ( int -> Integer )

Integer ten = Integer.valueOf(10);

 

언박싱 ( Wrapper -> int )

int n = ten.intValue();

 

자동 박싱과 언박싱

자동 박싱

Integer ten = 10; // Integer.valueOf(10) 이 자동

 

자동 언박싱

int n = ten; // ten.intValue()로 자동 처리

 

예제 코드

public class Hongong {

    public static void main(String args[]){

        int n = 10;
        Integer intObject = n; // 자동 박싱
        System.out.println(intObject);

        int m = intObject + 10; // 자동 언박싱
        System.out.println(m);
    }
}

 

Wrapper 주요 메소드

문자열을 기본 데이터 타입으로 변환 ( ex, Integer.parseInt("123") )

public class Hongong {

    public static void main(String args[]){
        
        int i = Integer.parseInt("123");
        boolean b = Boolean.parseBoolean("true");
        double d = Double.parseDouble("3.14");
        
    }
}

 

기본 타입 -> 문자열 변환 (ex, Integer.toString(123) )

public class Hongong {

    public static void main(String args[]){
        String s1 = Integer.toString(123);
        String s2 = Integer.toHexString(123);
        String s3 = Double.toString(3.14);
        String s4 = Character.toString('a');
        String s5 = Boolean.toString(true);

    }
}

 

2진수 문자열로 변환

System.out.println(Integer.toBinaryString(25));

 

2진수의 1의 개수

System.out.println(Integer.bitCount(28));

 

Character 메소드

소문자로 변환 ( Character.toLowerCase() )

System.out.println(Character.toLowerCase('A'));

 

숫자인가? ( Character.isDigit() )

public class Hongong {

    public static void main(String args[]){

        char c = '4';
        if(Character.isDigit(c))
            System.out.println("숫자입니다.");

    }
}

 

영문자인가? ( Character.isAlphabetic() )

public class Hongong {

    public static void main(String args[]){

        char c = 'F';
        if(Character.isAlphabetic(c))
            System.out.println("영문자 입니다.");

    }
}