본문 바로가기

JAVA의 정석

형변환 응용 (대문자를 소문자로 소문자를 대문자로 )(1)

 

오늘은 형변환을 응용한 예제를 코드로 작성해보려  한다.

 

우선 처음으로는 c언어의 문법과 유사하게 풀어낸 대소문자 변환프로그램을 작성한 후,

 

자바문법스러운(?) 대소문자 변환프로그램을 작성해보자.

 

우선 ASCII 코드 대문자를 살펴보고, A부터 Z는 숫자 65 ~ 90 소문자 a는 97 부터  122임을 알아야한다.

 

우선 str.length() 을 통해 배열의 길이까지 반복하여,

 

문자열에 입력 받은 문자들을 지난번에 사용했던 .charAt() 메소드를 통해, ch[]라는 문자배열에 반환받는다.

 

그리고 ch[] 문자배열에 담긴 문자들을 조건문을 사용해 32만큼 더해주거나 빼준다.

 

(대문자로 입력받았다면 +32 만큼, 소문자로 입력받았다면 -32만큼 )

 

그리고 이 문자배열을 반복하여 출력한다. 

 

 

그런데, 컴파일 오류가 뜨는 모습을 확인할 수 있다. 왜 컴파일 오류가 뜨는 것 일까?  

 

보통 연산을 할 때에는, 서로 다른 피연산자의 타입을 같게 일치시켜야한다. ( 둘 중 큰 타입으로 일치 ) 

 

불가피하게 피연산자의 타입이 일치되지 않는다면 자바는 자체적으로 보다 큰 타입으로 변환 시키는데

 

이를 산술변환이라 한다.  (산술변환이란 그저 연산직전에 발생하는 자동 형변환일 뿐이니 어렵게 생각하지 말자. )

 

예를 들어 , 

 

 

double 은 8바이트로 표현되는 타입이고, int는 4바이트로 표현되는 타입이다. 하지만 위 화면처럼 b는 double 형태로 따로 변환을 주지

 

않았음에도 불구하고 result 값에 정상적으로 계산된 값이 저장되어 출력되고 있다.

 

a에 저장되어있는 값 5.5 에서 int 타입의 b라는 변수는 3.0으로 자동 형변환되어 8.5라는 값이 저장되었다는 것을 알 수 있고 , 이를 통해

 

자바 자체적으로 형변환이 이루어짐을 알 수 있다. 

 

이외에도 자바에는 피연산자의 타입이 int보다 작은 타입이면 자동으로 int로 변환되는데

 

byte + short = int + int = int

 

char + short int + int = int 

 

타입으로 변환된다.

 

그렇다. 위 1번 화면에서 컴파일 오류가 뜬 이유 이런 자동형변환 의해서 이다. 

 

char + int = int 타입을 갖기 때문에 선언했던 문자배열 ch[]에 타입과 일치하지 않아 컴파일 오류를 띄지 않는 것이다. 

 

그렇다면 이 과정을 확인하기 위해 o 라는 int형 변수를 선언하여 저장해보자. 

 

 

 

정상적으로 컴파일 오류없이,  o라는 변수에 정수 형태의 변수가 자동형변환되어 저장되어 있는 모습을 볼 수 있다. 

 

그렇다면 이제 컴파일 오류없이 대문자는 소문자로 소문자는 대문자로 변환하기 위한 코드를 짜기 위해서, 저 int의 결과 값을 char 타입

 

으로 변환해보자.  우선 자바에서 연산 우선순위는 산술연산자가 캐스팅 연산자의 순위 보다 높다 . 따라서 (char) 캐스팅연산자 뒤에 (x+y)

 

라는 산술연산을 작성해도 뒤에 있는 x+y가 우선으로 계산될 것이다 . 따라서 코드는 다음과 같다. 

 

 

 

이제는 정상적으로 화면에 대문자와 소문자가 엇갈려서 출력되는 것을 확인할 수 있다.

 

이제 여기까지가 C 문법식 대소문자 변환 출력프로그램이다. 다음 포스팅에서는 자바 문법식 대소문자 변환 출력프로그램으로 

 

코드를 작성해보겠다.