• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

wrapper 클래스

23.02.20 03:27 작성 조회수 200

0

 제네릭 클래스에서는 wrapper가 이러한 형식으로 쓰이는 가보다라고 문법처럼 이해를 했습니다. 근데 본질적으로 wrapper 클래스 강의를 보다 보니까 왜 원시자료형을 쓸 때는 intvValue(), doubleValue() 등등이 안되는지 이해가 안됩니다. 대충 알아보니 박싱 언박싱 개념이 나오는데... 그냥 메소드를 사용하려면 참조형이 되야 한다라고 생각하고, wrapper를 쓰면 원시-> 참조로 바뀐다고 생각하면 되나요?

그리고 parseInt()와 intValue()의 차이도 알고싶습니다. 혹시 이것도 parseInt()는 원시자료형이 필요하고 intValue()는 참조형이 필요하다고 생각하면 되나요?

 

답변 1

답변을 작성해보세요.

0

안녕하세요?

Wrapper 클래스는 기본적으로 기본 자료형을 객체로 다룰 수 있도록 하는 역할을 합니다. 이때, 기본 자료형과 객체 간의 변환을 처리하는 박싱(boxing)과 언박싱(unboxing)이 일어나는데요. 박싱은 기본 자료형을 해당하는 Wrapper 클래스의 객체로 변환하는 과정을 말하며, 언박싱은 Wrapper 클래스의 객체를 기본 자료형으로 변환하는 과정을 말합니다.

예를 들어, int 자료형을 참조형 Integer 객체로 변환하면 박싱이 일어납니다. 그리고 Integer 객체를 다시 int 자료형으로 변환하면 언박싱이 일어납니다. 따라서, Wrapper 클래스를 사용하면 원시 자료형을 참조형으로 변환할 수 있지요.

그러나 Wrapper 클래스에서 제공하는 intValue(), doubleValue() 등의 메소드는 해당 Wrapper 클래스의 객체를 기본 자료형으로 변환하는 역할을 합니다. 이 메소드들은 객체를 기본 자료형으로 변환하는 것이라서 기본 자료형을 직접 사용하는 int, double 등의 자료형에서는 사용할 수 없습니다.

parseInt() 와 intValue() 는 서로 다른 메소드입니다. parseInt() 는 문자열을 정수로 변환하는 메소드로 기본 자료형 int를 반환합니다. intValue() 는 Integer 객체를 int 자료형으로 변환하는 메소드로 Wrapper 클래스에서 제공하는 메소드입니다. parseInt() 는 문자열을 처리하므로 기본 자료형이 아니더라도 사용할 수 있습니다. intValue() 는 Wrapper 클래스의 메소드이므로, 해당 클래스의 객체를 인자로 전달해야 합니다.

// parseInt() 예제
String strNum = "123"; // 정수형 문자열
int num1 = Integer.parseInt(strNum); // 문자열을 int 형으로 변환
System.out.println(num1); // 123

// intValue() 예제
Integer wrapperNum = 456; // Integer 객체
int num2 = wrapperNum.intValue(); // Integer 객체를 int 형으로 변환
System.out.println(num2); // 456

num2 = wrapperNum; // .intValue() 생략 가능 (자동 변환)
System.out.println(num2); // 456

위 예제에서 parseInt() 메소드를 사용하여 문자열 "123" 을 int 형으로 변환했고, intValue() 메소드를 사용하여 Integer 객체를 int 형으로 변환했습니다. parseInt() 메소드는 문자열을 처리하므로 문자열을 인자로 전달합니다. 반면, intValue() 메소드는 Wrapper 클래스에서 제공하는 메소드이므로, 해당 클래스의 객체를 인자로 전달합니다.

그리고 Wrapper 클래스의 객체를 해당하는 기본 자료형으로 변환할 때, 자동으로 언박싱이 발생하여 기본 자료형으로 변환됩니다. 그래서 .intValue() 를 생략하고 그냥 num2 = wrapperNum; 라고 작성해도 동일한 결과를 반환합니다 😊

감사합니다.

sjgio0515님의 프로필

sjgio0515

질문자

2023.02.24

항상 감사합니다!