블로그 이미지
'무른모'란 부드럽다라는 뜻을 가진 '무르다'라는 말과 도구, 연장을 뜻하는 '연모'라는 순 우리말의 합성어로 소프트웨어를 말합니다. seanhigher

카테고리

분류 전체보기 (161)
Blog srart (16)
Dev Center (94)
Real Life (13)
Mac life (21)
Naver life (17)
Total633,812
Today36
Yesterday88
프로그래밍에서 다양한 데이터형을 사용하다보면 그 형태를 바꾸어야 할 경우가 있다. 문자의 형식으로 데이터를 입력했는데, 이것을 정수의 형태로 바꾸어야 한다면?? 자바에서는 가능하다면 자동으로 바꾸어준다. 하지만, 그렇지 않은 경우도 있다.


작은곳에서 큰곳으로는 자동으로! promotion.
자바는 생각보다 똑똑한 언어이다. 사용자가 알지 못하지만, 문제가 일어나지 않는 가능한 범위내에서 자동으로 이루어지는 것들이 많다. 프로모션의 형변환 같은 경우가 대표적이다. 만일 byte 형의 데이터가 있다고 하고, 이것을 short 형의 데이터에 넣고자 한다면...?

byte a = 10;
short b = a;

아무런 문제없이 프로그램이 실행되는것을 알 수 있다. 분명 다른 자료형이지만, 1byte의 공간을 가진 byte로 선언된 'a'를 2byte의 공간을 가진 short 형으로 선언된 'b'속에 담는 것은 크게 문제가 되는 일이 아니기 때문에 자동으로 변환이 이루어지는데 이것이 프로모션 기능이다. 하지만 한가지 기억해야 할것이 있다.

char a = 65;
short b = a;

위의 경우에는 문제가 발생하게 된다. char 의 경우는 2byte의 공간을 가지고 있고, short 의 경우 역시 2byte의 공간을 가지고 있다. 동일한 공간을 가진 데이터 형이라면 문제가 없다고 생각할 수 있겠지만, 서로 표현하는 공간이 다르다는 것이 문제의 원인이 된다. char의 경우는 0~65535 까지의 공간을 나타내지만, short 의 경우는 -32768 ~ 32767 의 공간을 나타내기때문에 만약 'a'의 데이터가 short 와 char의 겹치지 않는 공간에 있는 데이터라면 데이터 손실이 일어나기 때문에 자동으로 형변환이 되지 않고 에러가 발생하게 된다.


강제로 데이터 형태를 바꿀 수도 있다. casting.
자동으로 데이터가 변환되지 않는 상황에서 데이터를 바꾸고 싶다면!? 분명 그런 경우도 있을 것이다. 그런 경우에는 casting 연산자를 사용하여 강제로 형변환을 하는 것이 가능하다. 하지만, 한가지 주의해야 할 점은 강제로 형변환 되는 데이터에 대한 손실은 개발자의 판단에 맡긴다는 것이다. 이 캐스팅 연산자는 다음과 같이 사용할 수 있다.

int a = 100;
short b = (int)a;

위와 같이 변환하고자하는 목적 데이터형은 본래의 데이터앞에 써주기만 하면 된다. 확실하게 데이터 손실이 이루어지지 않는 형변환이나, 손실을 감수해야 하는 형 변환이라면 유용하게 사용할 수 있는 방법이다.


자료형을 변환하는 똑똑한 방법! Wrapper 클래스.
자바는 모든 기능들이 객체의 형태로 선언되어 있고 사용할 수 있다. 기본으로 사용되는 데이터 형까지 객체의 형태로 표현이 된다면 그 효율성은 극대화 될 것이다. 그러한 의미에서 사용되는 것중 하나가 랩퍼 클래스 이다. 다른 형태의 데이터 형을 변환할때 사용하기도 하지만, 그 데이터를 객체화 시킴으로써 효율적인 관리가 이루어지고, 은닉화를 통한 데이터의 보호기능도 갖게 된다. Wrapper 클래스는 일반적인 자료형의 이름과 같지만, int 와 char 은 조금 더 긴 이름으로 사용된다. (Boolean, Byte, Short, Character, Integer, Long, Float, Double) String 같은 경우는 이미 객체화 되어 있는 상태이기 때문에 Wrapper 클래스가 따로 존재하지 않는다. 랩퍼 클래스를 사용하는 방법은 다음과 같다.

int a = 100;
byte b = Byte.parseByte(a);

위와 같은 형태로 사용할 수 있는데, 각 클래스별로 Integer는 parseInt로 Shrot는 parsdShort와 같은 형식으로 사용될 수 있다. 좀더 자세한 형식이나 메소드에 대해서는 JAVA Document 를 참조하면 알 수 있다.

Posted by seanhigher

댓글을 달아 주세요

최근에 달린 댓글

글 보관함