오늘은 형변환을 응용한 예제를 코드로 작성해보려 한다.
우선 처음으로는 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 문법식 대소문자 변환 출력프로그램이다. 다음 포스팅에서는 자바 문법식 대소문자 변환 출력프로그램으로
코드를 작성해보겠다.
'JAVA의 정석' 카테고리의 다른 글
String 배열과 String 클래스의 주요 메서드 (0) | 2023.08.06 |
---|---|
배열의 생성,초기화 / 배열의 활용 (0) | 2023.08.05 |
전위증감연산자와 후위증감연산자 (0) | 2023.08.05 |
타입간의 변환방법 (0) | 2023.07.23 |
숫자를 문자열로 문자열을 숫자로 (0) | 2023.07.22 |