-
[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() 메서드를 열어보시라 ㅋㅋ!
'Java' 카테고리의 다른 글
[Java] JVM의 메모리 영역 (JVM Memory Structure) (0) 2024.10.29 [Java] Comparable과 Comparator (0) 2024.10.25 [Java] 자바 직렬화에 대해서 (Serialization) (2) 2024.10.23 [Java] Immutable 클래스와 String 클래스 (0) 2024.07.08 [Java] 오버로딩의 제약 조건 (1) 2024.06.30