20240816(금) 프로그래머스 [Q18] +
Index
프로그래머스 코드리뷰 | 문자열을 정수로 바꾸기 |
Programmers Code Review
[Q18] 문자열을 정수로 바꾸기
문제 설명 |
문자열 s 를 숫자로 변환한 결과를 반환하는 함수 solution을 완성하세요. |
제한 조건 |
- s 의 길이는 1이상 5이하 입니다 - s 의 맨앞에는 부호(+,-) 가 올 수 있습니다. - s 는 부호와 숫자로만 이루어져 있습니다. - s 는 "0" 으로 시작하지 않습니다. |
입출력 예 |
예를 들어 str 이 "1234" 이면 1234 를 반환하고, "-1234" 이면 -1234를 반환하면 됩니다. str 은 부호(+,-) 와 숫자로만 구성되어 있고, 잘못된 값이 입력되는 경우는 없습니다. |
class Solution {
public int solution(String s) {
int answer = Integer.parseInt(s);
return answer;
}
}
1. parseInt 메서드
1-1. 기본 사용법 :
'Integer.parseInt(String s)' 메서드는 주어진 문자열 's'를 10진수로 해석하여 정수로 변환한다. |
만약에 주어진 문자열이 숫자로 반환할 수 없는 경우, 'NumberFormatException' 예외가 발생한다. 그래서 이 메서드를 사용할 때는 예외 처리를 통해 잘못된 입력에 대한 대응이 필요하다. |
1-2. 기수(radix) 사용 :
'Integer.parseInt(String s, int radix)' 메서드는 두 번째 인수로 주어진 기수(radix)를 사용하여 문자열을 해석한다. |
'radix'는 2에서 36 사이의 값을 가질 수 있으며, 이 값에 따라 문자열을 해당 진수로 해석하여 정수로 변환한다. |
예를 들어, 'radix'가 2이면 문자열을 2진수로, 16이면 16진수로 해석한다. |
1-3. 예시 코드
public class ParseIntExample {
public static void main(String[] args) {
// 10진수 변환
int number1 = Integer.parseInt("123");
System.out.println(number1); // 출력 : 123
// 16진수 변환
int number2 = Integer.parseInt("1A", 16);
System.out.println(number2); // 출력 : 26
// 2진수 변환
int number3 = Integer.parseInt("101", 2);
System.out.println(number3); // 출력 :5
// 잘못된 입력 처리
try {
int number4 = Integer.parseInt("abc");
} catch (NumberFormatException e){
System.out.println("유효하지 않은 숫자 형식입니다."); // 예외 처리
}
}
}
2. try ~ catch 구조
Java 에서 'try ~ catch' 문은 예외(Exception)를 처리하기 위한 구조이다. 예외는 프로그램 실행 중에 발생할 수 있는 오류나 예상치 못한 상황을 나타내며, 이 예외 처리가 발생할 때 프로그램이 갑작스럽게 종료되지 않도록 처리해주는 역할을 한다.
2-1. 기본 구조
try {
// 예외가 발생할 수 있는 코드 블록
} catch (ExceptionType eT) {
// 예외가 발생했을 때 실행된느 코드 블록
// ExceptionType 은 잡으려는 특정 예외의 타입이다.
}
2-2. 동작 원리
- try
'try' 블록 안에는 예외가 발생할 가능성이 있는 코드를 작성한다. 이 블록에서 예외가 발생하면, 즉시 그 위치에서 실행이 중단되고, 'catch' 블록으로 이동한다.
- catch
'catch' 블록은 'try' 블록에서 발생한 예외를 처리하기 위한 코드이다. 'catch' 블록은 특정 예외 타입을 처리하도록 정의하며, 해당 예외가 발생할 때만 실행된다. 'ExceptionType' 자리에 예외의 클래스 이름을 작성하며, 이 클래스의 예외가 발생할 때 'catch' 블록이 실행된다. 발생한 예외 객체는 'e' 와 같은 변수로 참조할 수 있으며, 예외 메시지 출력이나 로그 기록 등을 확인할 수 있다.
- 예외 발생시의 흐름
'try' 블록에서 예외가 발생하지 않으면, 'catch' 블록은 무시되고, 'try' 블록의 코드가 모두 실행된 후 다음 코드로 넘어간다. 예외가 발생하면 'try' 블록의 남은 코드는 실행되지 않고, 바로 해당 예외에 대응하는 'catch' 블록으로 이동한다.
- 예시 코드
public class TryCatchExample {
public static void main(String[] args){
try {
int result = Integer.parseInt("abc"); // 여기서 NumberFormatException 예외가 발생
System.out.println("결과 : " + result); // 이 코드는 실행되지 않음
} catch (NumberFormatException e) {
System.out.println("유효하지 않은 숫자 형식입니다."); // 예외가 발생하면 이 코드가 실행
}
System.out.println("프로그램이 종료되었습니다."); // 예외 처리 후 정상적으로 다음 코드 실행
}
}
'try' 블록에서 'Integer.parseInt("abc") 를 호출했는데, 이 메서드는 숫자가 아닌 문자열을 정수로 변환하려 하므로 'NumberFormatException' 예외가 발생한다. 예외가 발생하면 즉시 'catch' 블록으로 넘어가' "유효하지 않은 숫자 형식입니다." 메시지를 출력한다. 'try' 블록 내에서 예외가 발생한 후에도 프로그램은 종료되지 않고, 'catch' 블록 이후의 코드 ( System.out.println("프로그램이 종료되었습니다."); ) 가 계속 실행된다.
- 추가 개념
다중 'catch' 블록 |
여러 타입의 예외를 처리하기 위해 'try' 블록에 대해 여러 개의 'catch' 블록을 사용할 수 있다. |
'finally' 블록 |
'try' 블록에서 예외 발생 여부와 관계 없이 항상 실행되는 코드를 작성할 수 있다. 주로 자원 해제 작업에 이용된다. |
try {
// 예외 발생 가능성 있는 코드
} catch (FirstExceptionType e1) {
// 첫 번째 예외 처리
} catch (SecondExceptionType e2) {
// 두 번째 예외 처리
} finally {
// 항상 실행되는 코드 (예외 발생 여부와 관계 없음)
}