1. 왜 형 변환이 필요한가?
Java는 엄격한 타입 언어입니다. 컴퓨터에 “숫자용 상자”가 있다면, 그 안에 텍스트를 억지로 넣으려는 시도는 포크를 USB 포트에 꽂으려는 것과 비슷합니다. 컴파일러가 가만두지 않아요! 😡
하지만 실제로는 서로 다른 데이터 타입을 동시에 다루는 일이 많습니다. 예를 들어 숫자를 담고 있는 문자열이 있을 수 있죠. 이럴 때 필요한 것이 바로 변환(또는 형 변환)입니다.
예를 들어 봅시다. 사용자 수를 저장하고 싶다고 해봅시다:
int a = 1;
int b = "2";
int c = "셋";
컴파일러는 곧장 이렇게 말할 겁니다: “나는 문자열을 숫자로 자동 변환하지 못해. 네가 명시적으로 문자열을 숫자로 바꿔 줘야 해”.
Java에는 여러 가지 변환 방법이 있고, 각각 장단점과 자주 밟는 함정이 있습니다.
2. int를 String으로
작업하다 보면 숫자의 문자열 표현이 자주 필요합니다. 예를 들어 화면에 출력하거나, 파일에 저장하거나, 네트워크로 전송하거나, 텍스트와 결합하는 경우죠. 이를 위해 Java에는 여러 가지 방법이 있으며, 상황에 따라 더 편리한 방법이 다릅니다.
String.valueOf() 함수
가장 기본적이고 널리 쓰이는 방법입니다:
int number = 42;
String str = String.valueOf(number); // str == "42"
String.valueOf()는 전달된 객체의 타입에 맞는 문자열 표현으로 변환합니다.
빈 문자열과의 연결
오래됐지만 여전히 동작하는 방법입니다:
int number = 42;
String str = "" + number;
간단한 경우에는 빠르고 편하지만, 코드를 읽는 개발자에게는 덜 명확할 수 있습니다.
3. 문자열로의 암묵적 변환
앞서 말했듯, Java에서는 모든 변수, 객체, 표현식을 String으로 변환할 수 있습니다.
게다가 String과 다른 타입을 더하면 이 변환이 자동으로 일어납니다. 예:
int a = 5;
String name = "Anya" + a; // name에는 문자열 Anya5가 들어 있음
int a = 5;
String city = a + "New York" + a; // city에는 문자열 5New York5가 들어 있음
int number = 10;
String code = "Yo";
String message = "Hello! " + number + code; // message에는 문자열 Hello! 10Yo가 들어 있음
위 세 가지 예에서 int와 String을 더했지만, 결과 타입은 항상 String입니다.
예시:
int a = 5;
String name = "1" + a; // name에는 문자열 15가 들어 있음
int a = 5;
String city = a + "9" + a; // city에는 문자열 595가 들어 있음
int number = 10;
String code = "10";
String message = "" + number + code; // message에는 문자열 1010이 들어 있음
덧셈(+) 연산은 왼쪽에서 오른쪽으로 수행되므로 결과가 다소 예상과 다를 수 있습니다. 예:
int a = 5;
String name = a + a + "1" + a; // name에는 문자열 1015가 들어 있음
평가 순서: ((a + a) + "1") + a
4. 문자열을 숫자로 변환하기
Java에서 숫자를 문자열로 바꾸려면 빈 문자열과 더하면 됩니다:
String str = "" + chislo;
그렇다면 문자열을 숫자로 바꾸려면 어떻게 할까요? 모든 문자열을 숫자로 바꿀 수는 없습니다. 하지만 문자열이 숫자만으로 이루어져 있다면 가능합니다. 이를 위해 Java에는 전용 함수가 있습니다.
다음과 같이 씁니다:
int x = Integer.parseInt(문자열);
여기서 int x는 정수 변수 x의 선언이고, 문자열은 숫자만으로 된 문자열(숫자로만 구성된 문자열)입니다.
예시:
String str = "123";
int number1 = Integer.parseInt(str); // number1에는 숫자 123이 들어 있음
int number2 = Integer.parseInt("321"); // number2에는 숫자 321이 들어 있음
int number3 = Integer.parseInt("321" + 0); // number3에는 숫자 3210이 들어 있음
int number4 = "321"; // 컴파일되지 않음: 변수는 int 타입이고, 값은 String 타입임
음수에도 작동합니다. Integer.parseInt() 함수는 매우 똑똑합니다.
GO TO FULL VERSION