int to string과, string to int는 것은 생각보다 코딩 테스트에 상당히 자주 보이는 문제입니다. 물론 단독으로 출제되는 경우는 거의 없다시피 하고, 구현 문제의 중간 단계에서 필요한 경우가 왕왕 있습니다. 언젠가 정리해 두려고 했는데, 지금에 와서야 정리하게 되네요.

 


 먼저, string을 int로 바꾸는 것은 Integer의 parseInt로 합니다. string을 long으로 바꾼다면, Long의 parseLong으로 하겠죠. 생각보다 parseXXX를 자주 쓰게 될 겁니다. 역으로, int를 String으로 바꾸기 위해서 Integer의 toString을, long을 String으로 바꾸기 위해서 Long의 toString을 이용합니다.

 

 이것을 그림으로 그려보면 아래와 같아요.

 

 어렵지 않네요. 이제 예제 프로그램들을 보겠습니다.

 


 "101010"을 int로 변환하고, 변환한 결과를 다시 String으로 변환하도록 하겠습니다.

 

 

  먼저, 3번째 줄에서 Integer.parseInt를 썼는데요. 101010이 int 범위 내에 들어오니, parseInt를 썼습니다. 다음에 5번째 줄에, int형 변수 x를 String으로 변환하기 위해서 Integer.toString을 썼는데요. 그러면 문자열 101010이 출력될 겁니다.

 

 

 실행 결과는 위와 같아요. string을 10진수의 정수로 변환하거나, 10진수의 정수를 다시 string으로 변환하는 빈도가 압도적으로 많아서 그런 건지 모르겠지만 radix를 주지 않으면 default로 10진수로 해석해 버리게 됩니다. 그러면 수 50을 문자열로 변환시킬 때에는 "50"으로 변환이 되고, 문자열 "32"가 수로 변환될 때에는 32로 될 겁니다. 그런데, 우리는 2진수로 표현된 문자열 "101010"을 10진수로 바꾸고 싶습니다. 혹은, 42를 2진수로 바꾸고 싶습니다. 이럴 때는 어떻게 해야 할까요?

 

 


 

 이 메서드를 보시면, 2번째 인자가 radix이니 2를 넘겨주면 됩니다. 만약에 parseInt의 1번째 인자에 "101010"을 넘겨주고, 2번째 인자에 2를 넘겨줬다면 42가 나옵니다. 왜냐하면 "101010"을 2진수로 해석하면 2^1 + 2^3 + 2^5 = 2 + 8 + 32 = 42이기 때문입니다. 정말 그렇게 나오는지 프로그램을 돌려보겠습니다.

 

 

 3번째 줄에서 "101010"을 2진수로 읽은 결과를 출력합니다.

 

 

 결과는 놀랍게도 42가 나옵니다. 이제, int나 long을 String으로 바꾸기 위해서 toString을 쓴다고 했는데요. 이 메서드도 2번째 인자에 radix를 넣을 수 있습니다.

 

 

 radix를 넣으면, radix 진법으로 해석하라는 의미가 됩니다. 예를 들어, 수 42를 2진법으로 해석하면 101010이 될 겁니다. 이것을 문자열로 바꾸면 "101010"이 되겠죠.

 

 

 정말 그런지, 테스트 프로그램을 한 번 만들어 봐야 겠네요. 1번째 인자에 42, 2번째 인자에 2를 넣었습니다.

 

 

 결과는 "101010"이 나옵니다.