-
[프로그래머스 1단계] 알고리즘 14. 문자열 숫자로 바꾸기24년 11월 이전/레거시-알고리즘(3) 2018. 3. 27. 12:46반응형
문제 출처는 프로그래머스 알고리즘 연습 에서 볼 수 있습니다!(https://programmers.co.kr/learn/challenges)
알고리즘 14. 문자열 숫자로 바꾸기
strToInt 메소드는 String형 str을 매개변수로 받습니다. str을 숫자로 변환한 결과를 반환하도록 strToInt를 완성하세요. 예를들어 str이
1234
이면 1234를 반환하고,-1234
이면 -1234를 반환하면 됩니다. str은 부호(+,-)와 숫자로만 구성되어 있고, 잘못된 값이 입력되는 경우는 없습니다.public class StrToInt {public int getStrToInt(String str) {return 0;}//아래는 테스트로 출력해 보기 위한 코드입니다.public static void main(String args[]) {StrToInt strToInt = new StrToInt();System.out.println(strToInt.getStrToInt("-1234"));}}풀이:
이 문제의 해답은 다음과 같다.
public int getStrToInt(String str) {return Integer.parseInt(str);}문제에서 예외 사항을 제외하였기에 따로 처리해야할 필요 없이 Integer.parseInt() 정적 메소드를 통해서 문자열을 숫자로 바꿔주면 된다, 이렇게 하면 별로 알려줄 것이 없기 때문에 문제를 str이 null일 수도 있고 숫자가 입력이 안 될 수도 있는 상황이 있다는 가정을 추가하려한다. 먼저 일반적으로 푸는 방법이다.
public int getStrToInt(String str) {try{try{if(str == null)throw new Exception("str is null");return Integer.parseInt(str);}catch(Exception e){e.printStackTrace();}}catch(Exception e){e.printStackTrace();}return 0;}먼저 str이 널일 경우를 처리해야하기 때문에 try-catch로 감싸주어야 한다. 그 후 Integer.parseInt에서 문자열이 숫자가 아닐 때 예외가 발생하기 때문에 try-catch로 또 감싸주어야 한다. 이렇게 쉽게 풀 수 있다. 하지만 문제의 핵심은 parseInt와 그에 따른 예외처리만 있으면 되는데 이를 처리하기 위해서 이중으로 try-catch로 코드를 감싸면서 코드가 더러워지는 것을 확인할 수 있다. 이를 자바 8의 Optional을 이용하여 해결하려 한다. Optional 클래스는 null이 될 수 있는 객체를 감싸는 래퍼 클래스이다. Optional류의 클래스들은 자신이 담고 있는 null이 될 수 있는 객체가 야기시키는 NullPointException을 더 쉽고 명확하게 해결하기 위해 만들어졌다. 단적인 예로 위의 방식처럼 여러 try-catch로 감싸는 코드가 어떻게 깔끔해지게 바뀌는지 아래에 Optional을 활용하여 문제를 푼 코드를 보면서 확인해보자.
public int getStrToInt(String str) {return Optional.ofNullable(str).map(Integer::parseInt).orElseThrow(() -> new RuntimeException("No data!"));}먼저 첫 번째 코드 Optional.ofNullable() 이 코드는 널이 될 수 있는 객체를 받아 Optional 클래스로 감싼다. 두번째 map(Integer::parseInt)을 통해서 그 객체를 파싱한다. 그리고 세번째 그에 따른 예외처리를 orElseThrow(()->new ...)로 처리한다. 문제의 주어진 예외 상황도 처리하면서 굉장히 깔끔한 코드를 얻을 수 있다. 결론은 자바8 찬양하자!
728x90'레거시 > 레거시-알고리즘(3)' 카테고리의 다른 글
[프로그래머스 1단계] 알고리즘 16. 삼각형 출력하기 (0) 2018.03.30 [프로그래머스 1단계] 알고리즘 15. 서울에서 김서방 찾기 (0) 2018.03.29 [프로그래머스 1단계] 알고리즘 13. x만큼 간격이 있는 n개의 숫자 (0) 2018.03.23 [프로그래머스 1단계] 알고리즘 12. 문자열 내림차순으로 배치하기 (0) 2018.03.22 [프로그래머스 1단계] 알고리즘 11. 나누어 떨어지는 숫자 배열 (0) 2018.03.21