TIL #14 캠프 관리 프로그램

HYEON JIN CHOI·2024년 5월 9일

Project: 캠프 관리 프로그램

강의 수강생들을 관리하는 프로그램으로서, '수강생 관리'와 '점수 관리'하는 기능을 구현하였다.

본 프로젝트는 팀프로젝트로 진행하였으며, 각자 역할을 분담하여 기능 구현을 하였다.
프로그램에서 요구하는 기능은 크게 '수강생 관리'와 '점수 관리'로 나눌 수 있다.

내가 맡은 파트는 주로 '수강생 관리' 영역이었다.
이 영역에서는 수강생 등록, 수강생 목록 조회, 수강생 상태 관리, 수강생 정보 수정 등의 기능을 구현하였다.

다음은 내가 구현한 내용 중 고민을 했던 부분이다.

불필요한 예외 처리

// 수강생 상태 입력
String studentState;
while (true) {
    System.out.println("상태 종류 ( 1: Green(좋음)  2: Yellow(보통)  3: Red(나쁨) )");
    System.out.print("수강생 상태 입력: ");
    
    // 잘못된 입력을 받을 시 예외처리
    try {
        switch (Integer.parseInt(sc.nextLine())) {
            case 1 -> studentState = "Green";
            case 2 -> studentState = "Yellow";
            case 3 -> studentState = "Red";
            default -> {
                System.out.println("올바른 번호를 입력하세요...");
                continue;
            }
        }
        break;
    } catch (NumberFormatException e) {
        System.out.println("숫자를 입력하세요...");
    }
}

여러 개발을 진행하면서 늘 고민되었던 부분은 조건문과 예외 처리를 각각 어떤 상황에서 사용해야 할지였다.
나름대로 기준을 정해보았는데, 그것은 정상적인 범위 내에서 조건에 따라 구분할 때는 조건문을 사용하고
그 범위를 벗어나예외 처리를 하는 것이다.
그러나 이 기준이 늘 적용되는 것은 아니라는 것을 깨달았다.

위 코드를 최초로 작성할 때는 이 영역에 while문과 try-catch문을 사용하지 않고,
switch 문의 default 에서 IllegalArgumentException 라는 예외를 발생시켰었다.

// 수강생 상태 입력
String studentState;
System.out.println("상태 종류 ( 1: Green(좋음)  2: Yellow(보통)  3: Red(나쁨) )");
System.out.print("수강생 상태 입력: ");
switch (sc.nextInt()) {
	case 1 -> studentState = "Green";
	case 2 -> studentState = "Yellow";
	case 3 -> studentState = "Red";
	default -> throw new IllegalArgumentException("올바른 번호를 입력하세요...");
}

이는 내가 정상적인 범위라고 생각한 1부터 3까지의 수를 벗어났기 때문에 내린 판단이었다.
그래서 이 코드가 담긴 메서드가 호출되는 위치의 try-catch문에서 예외처리를 했었다.

하지만 이로 인해 예외가 발생하면 바로 수강생 상태를 입력하는 위치로 돌아가는 것이 아니라,
이 코드가 담긴 메서드를 호출하는 곳으로 돌아갔다.
그래서 while문을 사용하고 그 내부에 try-catch문을 추가하여 예외 발생 시 돌아가는 위치를 개선하였다.
이제 예외가 발생하더라도 수강생 상태를 입력하는 위치로 돌아가게 된 것이다.

하지만 이렇게 코드를 수정한 후에는 default 에서 예외를 발생시킬 필요가 없어졌다.
불필요한 예외 처리는 코드 복잡성만 증가시키기 때문이었다.
따라서 정수형이 아닌 다른 타입으로 입력을 받았을 경우에만 예외 처리를 하면 충분했었다.

이 과정에서 조건문과 예외 처리의 선택 기준이 그리 단순하지 않음을 깨닫게 되었다.

회고

본문에서 다루지 않은 이야기인데, 본 프로젝트를 진행하면서 다소 아쉬웠던 부분이 있다.
그것은 시작할 때 제대로 설계를 마무리하지 않은 상태에서 구현을 시작하다보니,
구현 과정에서 여러 애로 사항이 발생한 것이다.
요구사항을 분석하여 명료한 설계를 하면 이후 과정이 훨씬 수월해짐을 느끼게 되었다.

0개의 댓글