오류 코드보다는 예외 사용
오류 코드(ErrorCodes)를 사용하게 되면 상단에 오류인지 확인하는 불필요한 로직이 들어가게 된다. 오류의 범주에 들어가지 않은 상태를 나타내는 것이 아니라면, 예외(Exception)로 명시적으로 에러 처리를 표현해주는 게 좋다.
as-is
1 |
|
to-be
1 |
|
위 코드는 오류 코드(ErrorCodes)를 사용하여 에러를 처리하는 방식과, 예외(Exception)를 사용하여 에러를 처리하는 방식을 비교한 것이다.
예외(Exception)는 실행 중에 발생하는 예기치 않은 상황을 처리하기 위한 방법 중 하나이다. 예외가 발생하면, 해당 예외를 처리할 코드 블록으로 제어가 이동하게 된다. 이를 통해 예외를 명시적으로 처리할 수 있다.
그에 반해, 오류 코드(ErrorCodes)를 사용하게 되면, 발생한 오류를 알리기 위해 상단에 오류인지 확인하는 불필요한 로직이 들어가게 된다. 또한, 모든 오류에 대한 오류 코드를 정의하고 관리해야 하는 등 번거로운 작업이 필요하다.
따라서, 예외(Exception)를 사용하여 명시적으로 에러 처리를 표현하는 것이 더욱 권장되는 방식입니다. 이를 위해 try-except
문을 사용하여 예외를 처리할 수 있습니다. try
블록에서 예외가 발생하면, except
블록에서 해당 예외를 처리할 수 있다.
위 코드의 to-be
부분은 이를 나타내고 있다. we_can_occur_error
함수에서 예외를 발생시키면, use_awesome_function
함수에서 try-except 문을 사용하여 해당 예외를 처리하고 있다. 이를 통해 예외를 명시적으로 처리할 수 있으며, 코드의 가독성도 향상된다.
예외 클래스 잘 정의
기본 Exception
만 쓰기 보단 내장된 built in Exception
을 잘 활용하면 좋다.
- 파이썬: https://docs.python.org/ko/3/library/exceptions.html(opens new window)
- 자바: https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html(opens new window)
- 자바스크립트: https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Error(opens new window)
상황에 맞게 Custom Exception
을 만들어 사용하는 것도 좋다.
1 |
|
Custom Exception
은 내장된 예외 클래스가 제공하는 기능 외에, 프로그램에 특화된 예외를 정의하여 사용할 수 있다. 위 예시에서는 CustomException
과 WithParameterCustomException
클래스를 정의하여 사용하고 있다. WithParameterCustomException은
예외 발생 시 추가적인 정보를 전달할 수 있도록, 생성자에서 매개변수를 받아 내부 변수로 저장하고 있다.
Custom Exception
을 정의할 때에는, Exception
클래스를 상속하여 새로운 예외 클래스를 만든다. 예외 클래스에서는 init
메소드와 str
메소드를 구현하는 것이 일반적이다. init
메소드에서는 예외 발생 시 필요한 추가 정보를 저장하고, str
메소드에서는 예외 메시지를 포맷팅하여 반환한다.
이를 통해, Custom Exception
을 사용하여 프로그램에 특화된 예외 처리를 할 수 있다. 예외 발생 시, raise
문을 사용하여 예외 객체를 생성하고 처리하는 코드 블록으로 제어를 이동시킨다.
에러 핸들링 잘하기
에러를 포착했다면 잘 핸들링해줘야 한다.
1 |
|
에러 핸들링을 모을 수 있으면 한곳으로 모은다. 보통 같은 수준의 로직을 처리한다면 한 곳으로 모아서 처리하는 게 더 에러를 포착하기 쉽다.
as-is
1 |
|
to-be
1 |
|