프로그래밍에서는 값의 종류에 따라 서로 다른 데이터 타입을 사용합니다. 예를 들어 텍스트 데이터는 문자열(String)로 저장하고, 정수는 int 또는 Integer 타입으로 저장합니다.
코드를 작성하다 보면 어떤 값의 데이터 타입을 다른 타입으로 변환해야 하는 경우가 자주 발생합니다. 그중에서도 Java에서 가장 흔히 수행되는 타입 변환은 바로 문자열을 정수로 바꾸는 작업입니다. 이때 사용되는 것이 바로 parseInt()와 valueOf() 메서드입니다.
이 글에서는 Java의 parseInt()와 valueOf() 메서드를 사용해 문자열을 정수로 변환하는 방법을 실제 예제와 함께 자세히 살펴보겠습니다.
Java 데이터 타입의 기본
다른 프로그래밍 언어와 마찬가지로 Java는 값이 담고 있는 데이터의 종류를 분류하기 위해 여러 데이터 타입을 사용합니다. 예를 들어 참/거짓 값은 boolean으로 저장되고, 텍스트는 String으로 저장됩니다.
데이터 타입이 중요한 이유는 값의 타입에 따라 해당 값을 조작하는 방식이 달라지기 때문입니다. 예를 들어 정수나 실수에는 사칙연산 같은 수학적 연산을 수행할 수 있지만, 문자열에는 그럴 수 없습니다.
따라서 프로그래밍 중에 문자열 형태로 저장된 숫자에 수학적 연산을 적용해야 한다면, 먼저 해당 값의 데이터 타입을 정수로 변환해야 합니다.
parseInt() 메서드로 문자열을 정수로 변환하기
Java에서 문자열을 정수로 변환할 때 가장 널리 사용되는 방법은 Integer 클래스의 parseInt() 메서드입니다. parseInt()는 하나의 매개변수, 즉 정수로 변환하고자 하는 문자열 값을 받습니다.
기본 문법은 다음과 같습니다.
Integer.parseInt(value);
예를 들어 테마파크 입장 시 고객의 나이를 확인하는 프로그램을 작성한다고 가정해 보겠습니다. 고객의 나이가 문자열로 저장되어 있지만, 최소 나이 기준과 비교하려면 정수로 변환이 필요합니다. 다음 코드처럼 parseInt()를 사용할 수 있습니다.
class ConvertAge {
public static void main(String[] args) {
String age = "15";
Integer integer_age = Integer.parseInt(age);
System.out.println("This customer's age is: " + integer_age);
}
}
실행 결과:
This customer's age is: 15
코드를 하나씩 살펴보겠습니다. ConvertAge 클래스의 첫 번째 줄에서는 고객의 나이를 저장하는 문자열 변수 age를 선언합니다.
그다음 parseInt() 메서드를 사용해 문자열 값을 파싱하여 정수로 변환하고, 그 결과를 integer_age 변수에 할당합니다. 마지막으로 고객의 나이를 담은 메시지를 화면에 출력합니다.
instanceof로 데이터 타입 확인하기
instanceof 키워드를 사용하면 변수의 실제 데이터 타입을 확인할 수 있습니다. instanceof는 검사 대상이 특정 데이터 타입에 해당하는지 여부에 따라 true 또는 false를 반환합니다. 앞선 프로그램에 다음 코드를 추가하면 integer_age가 실제로 정수인지 검증할 수 있습니다.
System.out.println("Is age an integer? " + (integer_age instanceof Integer));
실행 결과:
This customer's age is: 15
Is age an integer? true
여기서 주의할 점이 있습니다. instanceof는 산술 연산자보다 우선순위가 낮기 때문에, 괄호 없이 작성하면 문자열 연결이 먼저 실행되어 의도와 다른 결과가 나올 수 있습니다. 반드시 (integer_age instanceof Integer)처럼 괄호로 감싸 주세요. integer_age는 Integer 타입이므로 instanceof는 true를 반환합니다.
valueOf() 메서드로 문자열을 정수로 변환하기
문자열을 정수로 변환하는 또 다른 방법은 valueOf() 메서드를 사용하는 것입니다. valueOf() 역시 하나의 매개변수, 즉 정수로 변환할 값을 받습니다.
valueOf() 메서드의 기본 문법은 다음과 같습니다.
Integer.valueOf(value);
valueOf() 메서드의 동작 방식을 예제를 통해 확인해 보겠습니다. 커피숍에서 판매된 콜롬비아 로스트 원두와 이탈리안 로스트 원두의 판매 수량을 저장하는 프로그램을 작성한다고 가정해 봅시다. 현재 이 수량들은 문자열로 저장되어 있으며, 이를 정수로 변환하려고 합니다. 다음 코드로 이 작업을 수행할 수 있습니다.
class ConvertQuantities {
public static void main(String[] args) {
String columbian = "15";
String italian_roast = "19";
Integer columbian_integer = Integer.valueOf(columbian);
Integer italian_roast_integer = Integer.valueOf(italian_roast);
System.out.println("Quantity of Columbian coffee beans: " + columbian_integer);
System.out.println("Quantity of Italian roast coffee beans: " + italian_roast_integer);
}
}
실행 결과:
Quantity of Columbian coffee beans: 15
Quantity of Italian roast coffee beans: 19
코드를 분석해 보겠습니다. ConvertQuantities 클래스의 첫 줄에서는 콜롬비아 원두 수량을 담는 columbian 변수를 선언하고 15를 할당합니다. 그다음 이탈리안 로스트 원두 수량을 담는 italian_roast 변수를 선언하고 19를 할당합니다.
이후 valueOf() 메서드로 columbian의 값을 정수로 변환하여 columbian_integer에 저장하고, 같은 방식으로 italian_roast의 값을 정수로 변환하여 italian_roast_integer에 저장합니다.
마지막으로 두 원두의 수량을 각각의 정수 값을 사용해 출력합니다.
parseInt()와 valueOf()의 차이점
두 메서드 모두 문자열을 정수로 변환하지만 반환 타입에 차이가 있습니다. parseInt()는 기본형(primitive)인 int를 반환하는 반면, valueOf()는 객체형인 Integer를 반환합니다. 따라서 성능이 중요한 상황이라면 박싱 오버헤드가 없는 parseInt()를, Integer 객체 자체가 필요하거나 컬렉션에 저장해야 하는 경우라면 valueOf()를 사용하는 것이 좋습니다.
NumberFormatException 예외 처리하기
참고로 두 메서드 모두 숫자로 해석할 수 없는 문자열(예: "abc")을 전달하면 NumberFormatException이 발생합니다. 따라서 사용자 입력처럼 신뢰할 수 없는 값을 변환할 때는 try-catch 블록으로 예외를 처리하는 것이 안전합니다.
try {
int number = Integer.parseInt(input);
} catch (NumberFormatException e) {
System.out.println("유효한 숫자가 아닙니다.");
}
마무리
Java에서 문자열을 정수로 변환하는 방법은 크게 두 가지입니다. 바로 parseInt() 메서드와 valueOf() 메서드입니다. 이 글에서는 Java 데이터 타입의 기본 개념과 함께 두 메서드를 사용해 문자열을 정수로 변환하는 방법을 알아보았고, 각 메서드의 실제 동작 예제와 두 메서드의 차이점, 예외 처리 방법까지 살펴보았습니다.
이제 여러분도 전문가처럼 Java에서 문자열을 정수로 변환할 준비가 되었습니다!