개발자

가장 좋은 예외처리 방법

2024년 02월 13일조회 4,119

다음 중 가장 좋은 예외처리 방법은 몇번이라고 생각하시나요? (현재 포멧에서 더 변할 것 같진 않아요.

1// 1번
2  const previewTitle = useMemo(() => {
3    if (alarm.kind == InterviewAlarmKind.Waiting) {
4      return "[면접 대기]";
5    } else if (alarm.kind == InterviewAlarmKind.Confirm) {
6      return "[면접 확정]";
7    } else if (alarm.kind == InterviewAlarmKind.Reschedule) {
8      return "[면접 변경]";
9    } else if (alarm.kind == InterviewAlarmKind.Cancel) {
10      return "[면접 취소]";
11    } else if (alarm.kind == InterviewAlarmKind.Reminder) {
12      return "[면접 리마인더]";
13    }
14  }, [alarm.kind]);
15
16// 2번
17const previewTitle = ()=>{
18    switch (alarm.kind) {
19      case InterviewAlarmKind.Waiting:
20        return "[면접 대기]";
21      case InterviewAlarmKind.Confirm:
22        return "[면접 확정]";
23      case InterviewAlarmKind.Reschedule:
24        return "[면접 변경]";
25      case InterviewAlarmKind.Cancel:
26        return "[면접 취소]";
27      case InterviewAlarmKind.Reminder:
28        return "[면접 리마인더]";
29    },[alarm.kind])
30
31// 3번
32  const previewTitle = useMemo(
33    () =>
34      ({
35        [InterviewAlarmKind.Waiting]: "[면접 대기]",
36        [InterviewAlarmKind.Confirm]: "[면접 확정]",
37        [InterviewAlarmKind.Reschedule]: "[면접 변경]",
38        [InterviewAlarmKind.Cancel]: "[면접 취소]",
39        [InterviewAlarmKind.Reminder]: "[면접 리마인더]",
40      }[alarm.kind]),
41    [alarm.kind],
42  );
투표
1,380명 참여중
이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 12

인기 답변

김하림님의 프로필 사진

1,2,3 번 모두 좋지만 switch 문을 좋아해서 2번에 투표했습니다. 가장 가독성이 좋다고 느껴지는 코드로 작성하시면 될 것 같아요. 번외로, 작성하신 함수는 useMemo 대신에 일반 js 함수로 변경해도 무방할 것 같습니다. 일반 함수로 변경하면 React 스코프 제약이 없어져서 테스트가 더 용이합니다.

인기 답변

김현우님의 프로필 사진

아래와 같은 의견으로 2번 채택합니다. (1) 1 vs 2: 특정 변수가 어떤 값이냐에 따른 분기는 switch가 더 직관적입니다. 반면에 if / else if / ... 과 같은 구문은 ‘특정’ 변수의 값으로만 분기하기보단 여러 조건이 복합적으로 필요할 때 사용할 수 있으므로, 코드를 읽는 사람으로 하여금 각 조건식을 꼼꼼하게 확인하도록 만들기 때문에 덜 직관적인 코드라 생각합니다. (2) 2 vs 3: 예외처리에 대한 질문이므로 예외처리 관점으로 생각하면, 변수에 비정상적이거나 의도하지 않은 값이 할당되는 경우에 대한 예외처리는 dictionary같은 자료구조로는 불편할 수 있습니다. switch는 default 키워드를 사용하여 편하고 직관적으로 대응할 수 있다고 봅니다. 개인적으로는 dictionary 활용하는걸 더 선호하지만, 의도하지 않은 값이 할당되지 않는다고 보장되는 경우에만 사용합니다.

인기 답변

saydeicide님의 프로필 사진

코드를 보면 예외처리보다는 응답메시지 분기처리로 보이는데 확장성 등을 보면 3번이 좋아보입니다.

백승훈님의 프로필 사진

저의 경우 2번 3번 둘중 하나 사용할 것 같내요 개인적으로 else if나 else가 너무 딥하게 들어가는걸 좋아하질 않아서.. 항목수가 적고 같은 양식이 아니라면 1번도 괜찮을 것 같습니다.

이승훈님의 프로필 사진

신입 개발자인 저도 2번이 젤 보기 편한 것 같네요.

장보현님의 프로필 사진

뭐가 좋다 나쁘다 어렵네요

전명수님의 프로필 사진

스위치가 그래도 보기 편해서 2번!

김하늘님의 프로필 사진

3번인데 굳이 useMemo를 쓰지 않고 object lookup 방식을 사용할 거 같아요

박헌남님의 프로필 사진

1,2,3번이 모두 좋은 해결책이지만 개인적으로 해쉬맵으로 접근하는 개체방식이 스위치보다 조금더 빠르고 코드가 우아해 보여서 3번을 택합니다. 하지만 현업에서는 1초만에 이해가능한 2번인 스위치로 주로 사용합니다.

김태범님의 프로필 사진

뉴비이지만 2번이 제일 깔끔하고 가장 많이 봤던 것 같네요

장성호님의 프로필 사진

2번을 자주 씁니다. 가독성이 좋은 것도 있고 나중에 enum 케이스가 추가되었을 때, js나 ts 그리고 java는 컴파일 에러가 안나지만 dart나 kotlin은 missing case라는 컴파일 에러가 나거든요. 그래서 새로운 케이스에 대한 핸들링을 놓쳤을 때 잡기 좋아요

great님의 프로필 사진

코드에 답은 없지만 스위치문과는 다르게 if else 문은 조건이 true가 나오기전까지 모든조건문들을 확인하면서 진행해서 더 많은 코드가 수행된다는 단점이 존재하네요

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로

지금 가입하면 모든 질문의 답변을 볼 수 있어요!