[java] wrapper 클래스 어떨 때 쓰는가

심심이·2024년 1월 19일
0

java

목록 보기
8/46
	   ------------------------------------------------
	     기본자료형(원시형, primitive)     wrapper 클래스
	   ------------------------------------------------
	    byte                           Byte 
	    short                          Short
	    int                            Integer  
	    long                           Long
	    char                           Character
	    float                          Float
	    double                         Double
	    boolean                        Boolean 
	    ------------------------------------------------

기본자료형(원시형)은 데이터 저장 및 4칙연산 에서만 사용하는 것이다.
반면, wrapper 클래스는 데이터 저장 및 4칙연산 등 다양한 기능의 메소드가 제공되어 다방면으로 사용된다고 한다.

결론: 기본 타입의 데이터를 객체로 다루기 위해서 사용하는 클래스들을 래퍼 클래스라고 한다.

자바는 객체지향 언어로, 기본형도 객체로 다루는 것이 필요할 때가 있다.
왜 자바는 모든것을 객체로 하지 않고 기본형으로 썼을까?
=>그 이유는 성능 때문이다. 기본형은 리터럴 값을 넣지만, 참조변수로 메모리 주소를 받아서 참조하는 참조형의 경우 기본형에 비해 성능이 떨어질 수밖에 없다.

  • Wrapper클래스 : 8개의 기본형을 객체로 다뤄야 할 때 사용

래퍼 클래스 사용 예시>

    public static void main(String[] args) {
        Integer i = new Integer(100);
        Integer i2 = new Integer(100);

        System.out.println(i == i2); //false, Integer 클래스 - 참조형,
        // 그러므로 i와 i2의 메모리 참조주소가 다르므로 false
        System.out.println(i.equals(i2));
        //equals() 값 비교-> Integer는 참조형이기 때문에 값 비교를 equals로 할 수 있다.
        //같으면 true, 다르면 false
        //compareTo의 경우 같으면 0, 작으면 양수, 크면 음수로 계산한다.

   }
  • compareTo(num) : 같으면 0, 작으면 양수, 크면 음수
  • Number클래스 : 모든 숫자 레퍼 클래스의 조상
  • BigInteger, BigDecimal : 아주 큰 정수와 실수
  • wrapper obj -> 기본형으로 바꾸는 메서드

Character 클래스 사용하기 :
-입력받은 값을 대문자로 출력하기 : Character.toUpperCase()

char ch2 = 'c';
if('A' <= ch2 && ch2 <= 'Z') { // 대문자 인지 알아본다.
			System.out.println(ch2+" 는 대문자 입니다.");
		}

-입력받은 값을 소문자로 출력하기 : Character.toLowerCase()

if('a' <= ch2 && ch2 <= 'z') { // 소문자 인지 메서드 사용 없이 알아보는 방법 
			System.out.println(ch2+" 는 소문자 입니다.");
		}


	char ch2 = 'c';
    if(Character.isLowerCase(ch2)) {
      System.out.println(ch2+" 는 소문자 입니다.");
    }
    System.out.println(Character.toLowerCase('A')) // a 출력


문자열을 숫자로 변환하기

 int i = new Integer("100").intValue();
 혹은, 
 int i = new Integer.Valueof("100");
 혹은,
 int i = Integer.parseInt("100"); // 주로 이 방법을 많이 사용함.
 //Integer클래스를 int로 반환할 때 intValue를 사용한다.
 

1. Boxing(박싱, 포장을 하는것) 이란 ?
==> 기본자료형(boolean, byte, short, int, long, char, float, double)으로 되어진 변수를 객체타입인 Wrapper 클래스(Boolean, Byte, Short, Integer, Long, Character, Float, Double) 타입의 객체로 만들어주는 것을 말한다. = 기본형->참조형변환

  • int => Integer : 오토박싱
int a1 =10;
Integer a2 = Integer.valueOf(a1);  // Boxing(박싱)
System.out.println("a2 => " + a2);


int i = 5;
Integer j = new Integer(7);

int sum = i + j.intValue(); //에러 - 기본형,참조형 덧셈 불가
System.out.println(sum); //컴파일러가 "자동"으로 int sum = i + j.intValue();로 바꿔준다


2. UnBoxing(언박싱, 포장을 푸는것) 이란?
==> Wrapper 클래스(Boolean, Byte, Short, Integer, Long, Character, Float, Double)로 되어져 있는 객체를 기본자료형(boolean, byte, short, int, long, char, float, double)으로 만들어주는 것을 말한다. 참조형->기본형변환

  • Integer => int : 언박싱(오토언박싱)
	Integer a3 = Integer.valueOf(20);
	int a4 = a3.intValue();//UnBoxing(언박싱)
	System.out.println("a4=" +a4); //20
	
	int a5 = Integer.valueOf(20); //오토 언박싱
	System.out.println("a5" + a5);
	

JDK1.5 이전에는 기본형과 참조형간의 연산이 불가능했다. 하지만 그 이후로는 컴파일러가 자동으로 바꾸어준다.

참고 사진


profile
개발하는 심심이

0개의 댓글

관련 채용 정보