ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] parseInt() 메서드 직접 구현하기
    Java 2024. 9. 4. 21:14

    요즘 코딩 테스트 공부를 하고 있다. 코딩 테스트 문제를 풀다 보면 Integer 클래스의 parseInt() 메서드를 자주 사용하게 되는데, 문득 문제를 풀다가 parseInt() 메서드를 직접 구현해 보고 싶었다. 바로 시작하자.

     

    메서드 시그니처

    • 객체 생성 없이 바로 호출 가능하도록 static 메서드로 정의
    • 문자열을 숫자로 변환할 수 없는 경우 예외를 던지도록 unchecked 예외 선언
    public static int parseInt(String str) throws NumberFormatException

     

    메서드 구현!

    • isBlank() 메서드는 isEmpty() 메서드를 포함하므로 isEmpty() 메서드는 생략 가능하다.
    • 첫 글자가 부호일 수도 있으므로 부호에 따라 적절히 처리한다.
    • 문자열을 순회하며 숫자로 변환하고 숫자로 변환할 수 없는 경우 예외를 던진다.
    • result 변수에 10을 곱하여 자리를 만들고 변환된 숫자를 더해준다.
    • 마지막으로 부호를 곱한 값을 return한다.
    public class CustomParseInt {
        public static int parseInt(String str) throws NumberFormatException {
    
            // 문자열 검증
            if (str == null || str.isBlank()) {
                throw new NumberFormatException("str is null or blanked.");
            }
    
            int result = 0; // return value
            int sign = 1;   // 부호 (양수 : 1 / 음수 : -1)
            int index = 0;  // str을 순회할 index
    
            // 첫 글자가 부호일 경우 index에 1 저장
            char first = str.charAt(0);
            if (first == '-') {
                sign = -1;
                index = 1;
            }
    
            if (first == '+') {
                index = 1;
            }
    
            // 문자열 순회
            for (int i = index; i < str.length() ; i++) {
                char c = str.charAt(i);
    
                // 문자가 있으면 예외 던짐
                if (c < '0' || c > '9') {
                    throw new NumberFormatException("Invalid char : " + c);
                }
    
                // 문자에서 '0'을 빼면 숫자로 변환됨
                int number = c - '0';
    
                // 10을 곱하여 자릿수 이동
                result = result * 10 + number;
            }
    
            // 부호를 고려한 최종 결과 반환
            return result * sign;
        }
    }

    테스트

    public static void main(String[] args) {
        System.out.println("result = " + parseInt("10"));  // 10
        System.out.println("result = " + parseInt("+99"));  // 99
        System.out.println("result = " + parseInt("-1234"));  // -1234
        System.out.println("result = " + parseInt("12a34")); // Exception!
    }

    테스트 성공!


    자주 사용하는 메서드를 직접 구현하는 데 성공해서 기쁘다! 실제 메서드 구현보다는 간단하지만 그래도 잘 동작하는 것 같다..! 궁금하신 분들은 직접 Integer 클래스의 parseInt() 메서드를 열어보시라 ㅋㅋ!