주인장의 프로그래밍 개발 공부방

[자바 프로그래밍 기초] 5. Integer.parseInt(String타입의 값) 본문

Java/자바 프로그래밍 기초

[자바 프로그래밍 기초] 5. Integer.parseInt(String타입의 값)

거신 2019. 6. 27. 09:42

오늘은 지난 번 charAt()에 이어서 또다른 변환방법에 대해서 알아볼 것이다.

이번에도 String타입을 이용해 다른 형태로 변환시키는 것이다.

 

1. parseInt()란?

 

이전에 봤던 charAt()String타입의 문자열에서 우리가 원하는 단어만

뽑아와서 char타입으로 변환시켜주는 명령어였다.

이번에는 parseInt()라는 것인데 당연히 기능도 다르고 사용법도 다르다.

하지만 String타입을 변환시키는데 있어서 많이 쓰이는 녀석이니 잘 알아보도록 하자.

 

먼저 parseInt()의 기능은 String타입의 숫자를 int타입으로 변환해주는 녀석이다.

이게 왜 필요한가 궁금할 수도 있는데

예를 들자면 이런 경우가 있을 수 있다.

 

예시1)

String number1 = new String("1234");
String number2 = new String("4321");
System.out.println(number1 + number2);

이런 예시가 있다고 생각해보자.

일단 결과를 출력하면 12344321이라고 출력이 될 것이다.

원래라면 숫자 2개를 + 연산을 했으니 당연히 1234 + 4321이 되어

결과가 5555가 출력되어야 한다고 생각할 수 있겠지만

현재 number1과 number2의 타입은 숫자 타입이 아니라 String, 즉, 문자열 타입이기 때문에

+ 연산을 사용하면 계산이 아니라 단순히 문자열을 연결해주는 것 밖에 되지 않는다.

따라서 1234라는 문자열 뒤에 4321이라는 문자열을 연결시켜 출력하는 것이다.

 

그렇담 여기에서 number1과 number2를 숫자 타입으로 바꿔서 결과가 5555가 나오게 할 순 없을까?

그래서 등장한 것이 바로 parseInt()라는 녀석이다.

아니 애초에 처음부터 int타입으로 숫자를 저장하면 되는거 아니냐라고 할 수도 있겠지만

의외로 저런 문자열로 숫자를 입력하는 경우가 꽤 발생하기 때문에

이 녀석이 등장하게 되었고 또 우리들도 앞으로 자주 사용하게 될 것이다.

 

2. parse의 종류?

 

앞서 봤던 parseInt()문자열 String타입의 숫자를 int타입으로 변환해주는 녀석이다.

그런데 int만 가능할까?

아니 그렇지 않다.

int뿐만 아니라 byte, short, long, float, double 등 숫자와 관련된 타입은 전부 가능하다.

각각

Byte.parseByte();

Short.parseShort();

Integer.parseInt();

Long.parseLong();

Float.parseFloat();

Double.parseDouble();

로 존재하고 있다.

(char는 parseChar()가 아니라 이 전에 알아봤던 charAt()이라는 녀석으로 존재하고 있다.)

(boolean은 없다.)

 

우리는 그 중에서 대표적으로 int가 가장 친숙하니 int를 사용해보자.

 

3. Integer.parseInt() 사용법

 

거두절미하고 예시부터 보자.

 

예시2)

String strNum1 = new String("1234");
String strNum2 = new String("4321");

int num1 = Integer.parseInt(strNum1);
int num2 = Integer.parseInt(strNum2);

System.out.println(num1 + num2);

이렇게 예시와 같이 작성하고 프로그램을 실행하면

결과에 5555라고 정확하게 출력이 될 것이다.

parseInt()를 사용하면 "1234"와 같이 문자열 타입으로 되어 있는 숫자를

int타입의 숫자 타입으로 바꿔주기 때문에

num1 + num2와 같이 연산을 하면

1234 + 4321 = 5555

와 같이 우리가 처음에 원했던 결과를 출력하게 된다.

 

물론 parseInt()를 사용하면 타입이 String에서 int로 바뀌기 때문에

당연히 int타입의 변수에 저장해야 된다.

(기본형 타입의 형변환이 가능하기 때문에

double이나 long타입으로 저장이 가능하고

만약 byte나 short에 저장할 때는 강제 형변환이 필요하다.)

 

4. Integer? Byte?

 

여기에서 다소 생소한 부분이 언급되어서 조금 의문이 들 것이다.

바로 Integer나 Byte, Double과 같이 첫 글자가 대문자로 된

기본형 변수 타입같은 녀석들이다.

이 녀석들은 Integer.parseInt(), Double.parseDouble()과 같이

. 앞에 붙어있는데 이 부분에 대한 것은

아~~~주 나중에 객체지향에 대해서 알아볼테니

지금은 그냥 이렇게 쓰는구나~~라고만 알고 있으면 되겠다.

 

어쨌든 우리는

Byte.parseByte();

Short.parseShort();

Integer.parseInt();

Long.parseLong();

Float.parseFloat();

Double.parseDouble();

의 형태를 그대로 사용하면 되겠다.

물론 ( )안에는 문자열 타입의 숫자를 넣어주면 된다.

 

5. 매개변수인 문자열의 형태

 

그런데 여기에서 아주 중요한 점이 있다.

바로 매개변수로 사용되는 문자열의 형태가 그 것이다.

갑자기 무슨 말인가 의문이 들 것이다.

매개변수가 뭐지?

쉽게 말하면 ( ) 안에 들어가는 변수를 우리는 매개변수라고 한다.

이 부분은 나중에 메서드를 배울 때 더 자세하게 알아볼 예정이다.

 

다시 본론으로 돌아와서 이 매개변수의 형태가 왜 중요하냐면

일단 parse를 사용하는 녀석들은 전부 숫자타입으로 변환을 시켜주는 것들이다.

즉, String타입의 값이 타입만 String이지 숫자의 형태를 띄고 있어야 된다는 뜻이다.

다시 말해, "1234"는 아무 문제가 없지만 "a1234" 또는 "1234a"와 같은 형태

절대 사용할 수가 없다는 뜻이다.

예시를 살펴보자.

 

예시3)

String strNum = new String("10a");
int number = Integer.parseInt(strNum);
System.out.println(number);

이렇게 코드를 작성하고 프로그램을 실행하면

분명 빨간줄은 출력되지 않았는데 갑자기 debug니 뭐니하면서

이상한 창들이 마구 뜰 것이다.

바로 "10a" 때문이다.

10a는 우리도 숫자형태로 바꿀 수가 없는 녀석이다.

10a라는 숫자가 도대체 어디에 있는가?(16진수라면 몰라도)

그렇기 때문에 숫자로 변환할 수 없다고 에러를 마구 띄우면서 이상한 창들이 뜨는 것이다.

 

그렇기 때문에 parse를 사용할 때에는 문자열이 꼭 숫자로만 되어 있어야 한다는 점을

꼭 기억하도록 하자.

 

6. 마무리

 

이번 시간에는 parse라는 녀석에 대해서 알아봤다.

대표적으로 Integer.parseInt();라는 것이 있고

이 녀석은 String타입으로 되어 있는 숫자를

기본형 타입의 숫자로 변환해주는 역할을 한다.

parseInt()는 int타입으로 변환해주는데 int뿐만 아니라

Byte.parseByte();

Short.parseShort();

Integer.parseInt();

Long.parseLong();

Float.parseFloat();

Double.parseDouble();

와 같이 기본형 타입에서 숫자와 관련된 타입은 전부 지원한다.

그런데 parse를 사용하기 위해선

String타입의 문자열이 무조건 숫자로만 이루어져 있어야 하고

a123과 같이 문자가 섞여있다면 변환이 불가능하고 에러를 발생시킨다.

Comments