본문 바로가기

Programming/Java

#05. 명시적,자동적 데이터 변환

이번 소개에서는 명시적, 자동적 데이터변환에 대해서 소개 해드리겠습니다.

이번 자바 프로젝트 이름은 Java#05, class이름은 Ex01로 했습니다.


데이터 변환이라는것은 서로 다른 데이터 종류를 변환 시키는것인데요, 주로 서로 종류가 다른 데이터끼리 연산을 할시 명시적, 자동적으로 데이터를 변환해서 연산을 합니다.


일단 숫자의 데이터타입에 대해서 설명 드릴께요.


정수

byte :  1byte의 저장 공간(8bit)


short : 2byte의 저장공간(16bit)


int : 4byte의 저장공간(32bit)


long : 8byte의 저장공간(64bit)


실수

float : 4byte의 저장공간(32bit)


double : 8byte의 저장공간(64bit)


이러한 서로 다른 타입들끼리 연산 될 경우 쓰이는것이 바로 데이터 변환입니다.



1. 자동적 데이터변환


우선 자동적 데이터 변환부터 설명드릴께요.

자동적 변환은 프로그래머가 아무런 데이터 변환 없이 서로 다른 타입의 데이터를 연산할때

자동적으로 자바가 변환 시켜주는걸 말합니다.



자동적 변환할때는 기준이있는데요, 두개의 값을 연산할때 둘중 저장공간이 더 넓은쪽으로 따라서 변환이됩니다(int 보다 작은 타입들은 모두 int를 따라갑니다).

다만, 정수와 실수가 연산이 된다면 정수는 실수를 따라가게 되있어요.



이제 코드로 예를 들어보겠습니다.



일단 정수와 정수부터 살펴보겠습니다.


short a변수와 int e변수 둘은 왜 에러가 뜨는걸까요?



short a변수부터 보겠습니다. 분명 byte타입의 데이터와 short타입의 데이터를 연산 하였으니 큰쪽을 따라가 short타입이 나오겠구나 하지만 short a변수는 계산된 값을 저장 못하지요.

이유는 int보다 작은 정수 데이터 타입들은 연산이 됬을때, 무조건 int로 따라가게 되어있습니다. 그렇기 때문에 int는 자신보다 작은 short로 자동변환이 되지 못하고 저장이 안됩니다.



int e변수를 보겠습니다. int타입long타입의 연산이 int변수에 저장이 되질않네요.

이도 위와 같은 이유로 저장이 되지 않는겁니다. int는 long보다 작은 저장공간을 가지고 있기때문이죠.



이번엔 정수와 실수 연산들을 보겠습니다.

int f변수에 에러가 떠있네요. 왜뜨는걸까요?


int 와 float가 연산이 된다면 int(정수)는 float(실수)를 무조건 따라갑니다. 그렇기때문에 int변수인 f에 저장이 되질않는거죠.



실수와 실수를 봐보겠습니다.

이번에도 float h변수에 에러가 떠있네요, 왜그럴까요?


float타입double타입연산이 된다면 float보다 큰 저장공간을 가지고있는 double타입으로 변환이 되게 되어있습니다. 그렇기때문에 float변수에 자신보다 큰 double타입 데이터를 저장하지 못하는거죠.



이번 자동적 데이터변환 개념은 마니 헷갈리는부분이 많습니다. 충분히 읽어보시고 이해하시길 바랄께요 ^^



2. 명시적 데이터 변환


명시적 데이터변환은 자동적 데이터변환과 달리 우리가 직접 데이터를 변환시켜 연산을 하는겁니다.


명시적 데이터 변환에 쓰이는 연산자가 바로 (cast)입니다. 저번 소개에서 설명을 드리지 못하고 이번 소개에서 설명을 드린다고 말씀드렸지요? 이제부터 설명 해드릴께요.


위에서 썼던 예제와 똑같이 써보고 이번엔 명시적 데이터 변환을 써보겠습니다.



위에 예제와 똑같은 예제입니다. 근데 이번엔 에러가 모두 사라졌네요.

에러가 뜬부분들은 명시적 데이터변환을 사용해 강제적으로 데이터타입을 바꿔보았습니다.


지금 강제적으로 바껴진 변수 a, e, f, h 모두 큰 데이터 타입에서 작은 데이터 타입으로 강제로 바껴있는데요. 이런식으로 큰 테이터타입을 작은 데이터타입으로 강제적으로 바꾸게 된다면 당연히 데이터에 손실이 올수밖에없습니다. 물론 작은 테이터가 저장이되어있으면 손실이 없을수도있지만 큰데이터들이 저장되어있다면 손실이 생겨 연산에 차질이생기지요.


하지만 작은데이터라면 이런식으로 에러뜨는걸 방지하며 코드를쓸수가 있씁니다~


이해하기 힘드시더라도 천천히 읽으시며 모두 이해하시길 바랄께요 ^^



3. Parse를 이용한 String을 숫자로 변환


여태까지 정수또는 실수들 데이터 타입을 변환 시켰지만 이번엔 String을 정수또는 실수로 변환 시키는법에 대해서 알아볼께요.


이번에 사용할 메소드는 parse라는 메소드입니다. 각데이터 타입 클래스들이 가지고있는 메소드 인데요, 이걸 이용해서 String을 숫자로 변환 시킬수있습니다.


일단 보기 쉽게 코딩을 보며 설명 드릴께요



위에서 보셔서 아시다 시피 String은 여태 우리가 배운 데이터변환으론 변환이 안되는걸 보실수있을겁니다. 하지만 parse메소드를 쓴 부분을 보시면 String이 숫자로 변환되어 저장이 가능한것이 보이지요. 이렇게 String을 변환시켜야할땐 각 데이타타입의 class 메소드 parse를 이용하여 변화하실수 있습니다 ^^



'Programming > Java' 카테고리의 다른 글

#07. 반복문, 제어문  (0) 2012.09.06
#06. if, else 조건문  (0) 2012.09.06
#04. 연산자  (0) 2012.09.06
#03. 입출력(I/O)기능2  (0) 2012.09.06
#02. 입출력(I/O)기능  (0) 2012.09.05