ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • (JAVA) 자바 래퍼(Wrapper) 클래스
    JAVA/컨셉 , 예제 2018. 8. 24. 13:31

    개발자의 입장에서 문자열을 숫자로 바꾸어 원하는 연산을 할 수 있도록 가공하는 절차는 필수적이다. 하지만 문자열과 숫자는 데이터 타입이 다르기 때문에 형변환이 필수적이다. 일반적으로 문자열을 특정 토큰에 따라 나누는 split 메소드를 사용한다.

    다음과 같이 공백을 기준으로 String을 나누어 값을 출력한다.
    여기서 모든 값들을 더하고 싶은 경우 어떻게 할까?

    System.out.println("sum of points : "+ msg[0]+msg[1]+msg[2]);

    다음과 같이 생각할 수도 있다. 하지만 결과는

    다음과 같이 50100200이 나온다. 데이터 타입이 문자열이고, 문자열에서 +연산은 단순히 문자를 이어쓰는 것에 불과하다. 산술 연산을 하지 않는다는 말이다. 이를 해결하기 위해 각각의 문자열을 산술 연산을 할 수 있는 원시(Primitive) 데이터 타입 형태로 바꾸는 형변환(Casting)이 필요하다. 앞서 포스팅했던 글대로라면 

    (int)(msg[i])

     다음과 같은 형태로 하면 될까? 되지 않는다. int는 원시 타입이고, msg[i]는 레퍼런스 타입이기 때문이다. 자바에서 이를 허용하지 않는 가장 큰 이유는 타입간 상이한 메모리 저장방식에 있다.

    기본 타입의 데이터는 바이트 크기는 다르지만 데이터의 시작 주소부터 해당 데이터 타입의 크기만큼 인접해 메모리 공간을 차지한다. 메모리 구조가 동일하기 때문에 번거로움을 감수하고 원시타입끼리의 형변환을 자바에서 허용해 주는 것이다. 이와 마찬가지의 이유로 레퍼런스 타입의 데이터들 사이에서도 데이터 구조가 비슷한 상속 관계에서만 형변환을 허용한다.

      레퍼런스 타입의 문자열을 원시 타입의 변수(특히 int)로 처리해주는 일은 빈번하게 필요했고, 이를 래퍼(Wrapper) 클래스를 통해 지원해준다. 이해하기 쉽도록 원시 타입의 데이터와 작명 규칙이 굉장히 유사하다.

    다음과 같이 문자열을 숫자로 바꾸기 위한 래퍼 클래스들이 존재한다.
    문자열을 int로 형변환 하고 싶으면 그에 해당하는 Integer 클래스를 사용하면 된다.

    다음과 같이 래퍼 클래스의 메소드 parseInt()를 통해 원시(Primitive) 타입의 int 변수에 할당한다. 그래야 산술 더하기 연산을 한다. 
    만약 double형으로 바꾸고 싶은 경우는 Double.parseDouble(msg[0]);
    long형으로 바꾸고 싶은 경우 Long.parseLong(msg[0]);
    위와 같은 식으로 응용할 수 있다.

Designed by Tistory.