문제 발생 배경
Java로 코딩 테스트 문제를 풀다 보니, missing return statement 오류가 발생했다.
오류의 원인과 해결 방법에 대해 알아본다.
문제 설명
프로그래머스의 "나머지가 1이 되는 수 찾기" 문제를 풀고 있었다.
이 문제는 주어진 자연수 n에 대해 n을 x로 나눈 나머지가 1이 되도록 하는 가장 작은 자연수 x의 값을 반환하는 문제이다.
처음 코드 작성 시, 다음과 같이 return -1; 을 사용하지 않고 문제를 풀었다.
class Solution {
public int solution(int n) {
for (int x = 2; x < n; x++) {
if (n % x == 1) {
return x;
}
}
}
}
이 코드에서 return -1;을 사용하지 않아서 missing return statement 오류가 발생했다.
문제 분석
- 메서드의 반환값이 반드시 필요
Java에서 메서드는 선언된 반환 타입에 맞는 값을 반드시 반환해야 한다.
따라서, 위 코드에서는 int를 반환하도록 메서드를 선언했기 때문에, 반드시 int값을 반환해야 한다. - for문 종료 후 반환값 없음
for문에서 조건을 만족하는 x를 찾으면 해당 값을 반환한다.
하지만, 만약 x를 찾지 못하면 메서드는 값을 반환하지 않는다. Java 컴파일러는 이 상황에서 "반환값이 없다"는 오류를 발생시킨다. - 문제 조건에서 x는 항상 존재한다고 보장
이 문제에서는 조건을 만족하는 x가 반드시 존재한다고 보장된다.
하지만 컴파일러는 "반환값이 없다"는 오류를 던지기 때문에 return문을 추가하는 것이 필수이다.
해결 방법
x가 없다면 -1을 반환하는 방식
실제로 x를 찾지 못할 일은 없지만, 코드의 안전성을 높이기 위해 return -1;을 넣는 것이 좋다.
class Solution {
public int solution(int n) {
for (int x = 2; x < n; x++) {
if (n % x == 1) {
return x;
}
}
return -1;
}
}
결론
missing return statement 오류는 Java에서 메서드가 값을 반환해야 할 때 발생하는 오류이다.
이 문제를 해결하려면, 반화값을 항상 명시적으로 반환해야 한다.
Java에서 메서드를 작성할 때 반드시 모든 코드 경로에서 반환값을 반환하도록 해야 한다.