Exception도 함수처리 가능할까요?

2021. 03. 20. 21:05

프로그램을 개발하고 있는데

Exception 처리할 때 중복이 너무 많은데

이것도 함수처리로 가능할까요?

Exception처리할 때 단순 로그처리만하는게 아니라

많은 처리를 해야하는데 소스가 너무 길어지네요..

공유하고 돈벌기 ♥︎

총 13개의 답변이 있습니다.

언어에 따라 예외 처리에 대한 내용이 다릅니다.

일단 자바를 가정하고 답변을 합니다.

자바는 예외가 크게 두 가지로 나눌 수 있습니다.

checked exception과 unchecked exception 입니다.

전자의 경우 Exception 및 이 클래스를 상속 받는 예외 클래스들입니다. 이름 그대로 예외에 대체 처리를 강제하고 있으므로 try ~ catch로 예외를 잡아 처리를 하던지, 예외를 전파 할 경우 매서드에 시그너처에 예외를 throws 하고 있음을 표현해야 합니다.

반면에 unchecked exception의 경우 RuntimeException 및 이 클래스를 살속 받는 예외 클래스들 입니다. 이 클래스는 반드시 처리할 필요도 없고 메서드 시그너처에 예외를 던진다고 표시할 필요도 없습니다.

자바 언어에 대한 비판 중에 너무 checked exception을 발생시켜서 예외처리를 강제하게 하는 것이 있습니다. 그래서 오픈소스 프레임워크 중 스프링에서는 대부분의 예외를 unchecked exception으로 발생하도록 구현하였습니다.

예외 처리를 할 때 중복 처리를 해야 한다고 하셨는데 비즈니스 로직 처리를 하는 과정에서 예외를 발생시킨다면 이런 unchecked exception으로 예외를 하는 것을 통해 불필요한 예외 처리를 하지 않도록 해보는 것은 어떨지 권해봅니다.

위의 답변이 예외를 만드는 관점이었다면 질문은 예외에 대한 처리에 대한 내용인 것으로 생각되네요.

기본적으로 자바에서는 예외를 try ~ catch 로 잡던지 아니면 던진 것을 전파할지 두 가지 처리를 할 수 있습니다.
만약 스프링 프레임워크 처럼 사용을 한다면 프레임워크가 예외에 대해 @ControllerAdvice, @ExceptionHandler를 이용한 예외처리 분리가 가능합니다.

2021. 03. 21. 00:10
8
국제 강사

어떤언어를 사용하시는지 정보가 없어 자세한 답변이 어렵네요

보통 자바는 소스의 목적이 예외처리때문에 길어지는것을 막기위해 throws를 사용합니다

throws는 예외를 던진다는 뜻으로 메소드안에서 예외를 처리하지 않고 호출하는 쪽에서 처리해주는 방법입니다

또 한가지 방법으로는 예외의 최상위부모인 Exception으로 모든예외를 한꺼번에 처리하는 방법입니다

메소드명 뒤쪽에 throws Exception 을 추가 하여 주면 메소드 안에서 예외처리는 하지 않아도 됩니다.

spring같은 경우엔 예외를 처리해주는 클래스를 따로 작성하여 모든예외을 한 클래스에서 처리해 줍니다.

각 언어마다 가장 적합한 처리 방법을 찾으셔야 합니다.

2021. 03. 21. 08:52
5
삼성에스디에스 책임

함수처리 가능합니다.

프로그램에 따라서 다르겠지만 발생하는 Exception을 throw로 상위 메서드로 보내 한번에 처리하는 방법도 가능하죠.

발생하는 부분에서 처리를 해야하는 경우도 Try catch로 잡아 공통함수로 처리 가능합니다.

얼마나 Exception을 표준화를 잘 하는지가 관건이겠네요.

2021. 03. 20. 21:25
3

네 당연히 예외처리도 함수로 처리가 가능합니다.

다만 이 부분은 프로그램 프레임워크마다, 언어마다 조금씩 다를 수 있습니다.

자바 기반의 스프링 프레임워크 등은 이러한 예외처리를 아예 프레임워크에서 함수처럼 다양하게 처리 가능한 기능을 제공합니다.

사용하시는 언어나 프레임워크에 우선 그러한 부분이 있는지를 알아보시는걸 추천드립니다.

2021. 03. 20. 23:53
3
프리랜서 개발자

안녕하세요 exception을 함수처리 가능한지에 대해 문의주셨는데

어떤 언어를 사용하시는지 모르겠지만

java 의 경우 try catch 문을 이용해서 중복되는 exception에대한 함수처리는 가능 합니다.

질문하신 내용에 도움 됐으면 좋겠습니다.

즐겁게 개발하세요~ 감사합니다!

2021. 03. 21. 01:34
3
삼성SDS 비지니스시스템 분석

안녕하세요

어떤 언어로 개발을 하시는지 모르겠지만

Exception 처리 할때 로그를 남기는 것도 함수입니다.

그래서 처리할 부분들을 함수로 묶으셔서 처리하시면 됩니다.

예를 들어 오류가 난 경우에 오류가 났을때의 상황이나 로그들을 DB에 저장 하는 로직을 실행 할 수도 있고,

파일로 떨궈서 로그를 남길 수도 있습니다.

이런 로직들을 함수로 만들어서 호출 하시면 됩니다.

관련 코드들은 예외 처리로 검색을 해보시면 많이 나올거예요

답변이 되었으면 하네요.

2021. 03. 21. 01:39
3
카카오 개발자

안녕하세요. 현직 개발자로 활동중인 검붉은거위203입니다.

가능여부를 먼저 말씀드리면, 제 생각에는 가능할 것 같습니다.

질문주신 내용에 정확히 어떤 언어를 사용하시는지, Exception 발생시 공통적으로 어떤 처리를 해주시는지 기재해주지 않으셨지만 아래의 예시를 들어보겠습니다.

Exception 발생시 공통적으로 아래와 같은 처리를 원하신다면,

  1. 로깅

  2. 알람 (개인 메신저 or 메일전송 등)

  3. 재처리 필요시 따로 저장 (db)

다음과같이 진행할 수 있을 것 같습니다. (Java 예)

public class Example() {
	public void someMethod() {
		try {
			// exception 발생가능한 로직
		} catch (Exception e) {
			handleException("someMethod 실패", true, false);
		}
	}

	private void handleException(String message, boolean needAlarm, boolean needRetry) {
		log.error(message);
		if (needAlarm) {
			// 알람 발송 등..
		}
		if (needRetry) {
			// 재처리를 위해 따로 저장 등..
		}
	}
}

혹시 그 외에 추가처리가 필요하다면 handleException(..) 내에 추가하실 수 있을 것 같습니다.

감사합니다.

2021. 03. 21. 20:05
2
오하임아이엔티/IT팀

어떤 개발 언어냐에 따라 다르지만 반복적이고 규칙적인 것은 따로 빼서 함수 또는 메서드로 만들어 사용하시면 됩니다.

자바를 예로 들면 Exception 이라는 것 자체도 클래스이고 exception을 처리하는 메소드들을 내장하고 있는데 이런 예외처리 클래스를 필요에 맞게 만들어 쓰시면 됩니다.

2021. 03. 22. 01:45
2
위즈위그 차장

스프링 프레임웍을 사용중이시라면 여러가지 방법으로 exception 처리가 가능합니다

exception 별로 에러 페이지를 제공한다든가

AOP 또는 aspect를 이용하여 원하는 구간이나 원하는 패지키, 메소드 또는

전체 패키지를 대상으로 원하는 exception 발생하였을때 따로 처리 할 수 있습니다

2021. 03. 22. 11:41
2
드림시큐리티 대리

안녕하세요.

Exception 처리할 때 중복코드 발생으로 불편함을 겪으시는 것 같네요.

질문자님 말씀대로 Exception의 함수 형태로의 별도 처리 가능합니다.

Exception 함수구현 예시로, 예전 제 프로젝트에서 사용하던 함수입니다.

또는 다음과 같이 Exception 혹은 Throwable 클래스를 상속받는 사용자 정의 Exception 클래스 형태로도 정리 가능합니다.

그림 정렬이 가운데로밖에 안 되서 가독성이 좋진 않네요...

저의 경우 구현 범위 및 내용에 따라 두 방식 중 적당한 방식을 그때그때 채택하고 있습니다.

도움이 되셨기를 바랍니다.

감사합니다.

2021. 03. 22. 13:24
2
무선사업부 CP개발팀

안녕하세요.

Exception 처리할 때 중복이 너무 많은 것에 대해 질문 주셨군요.

우선 exception이 너무 많은 것에 대해 exception이 너무 많이 발생하도록 구현한 것에 대해 구현 부분을 다시 설계에 이상이 없는지 검토를 해보셔야 할 것 같습니다.

exception은 말그대로 예외이기 때문에 예외 상황이 함수를 구현하고 싶을만큼 많이 발생한다는 것은 설계에 문제가 있다는 반증일 수도 있겠습니다.

함수처리로 불가능할 것도 없겠지만 원활한 유지보수를 위해 설계에 문제가 있는지 먼저 확인해 보시는 것을 추천드립니다.

2021. 03. 22. 14:09
2
운영개발팀

정확한 코드를 보지 않아 모르겠지만, 보통은 Try / Catch는 메서드에서 예외처리가 날만한 코드가 있을경우 해당 메서드에 써주는 것이 좋습니다.

길게 늘어진다는것이 어떤것을 의미하는건지 모르겠지만 메서드는 길게 작성되어도

나쁜것이 아닙니다. 다만, 길게 작성된 메서드가 통일성있게 작동되는것이 중요합니다.

예시를 들어보자면

public void MethodA()

{

try

{

// 작동하는 코드

}

catch (Exception e)

{

logger.WriteLine(e.Tostring())

messageBox.show("예외발생");

}

}

해당형식으로 코드를 작성하면 됩니다.

logger 클래스를 분리하여 사용하고 Exception은 메서드마다 적어주는것이 좋습니다.

정확하게 어떤 예외처리인지, 왜 백화현상이 나는지 왜 에러가 나는지 정확하게 알려주거든요.

2021. 03. 22. 14:28
2

안녕하세요!

exception자체를 함수처리하는게 아니라 처리하는도중 중복내용이라면 함수한개 짜서 그 안에서 처리하면 될 것 같습니다.

코딩하시면서 많은 부분들이 중복으로 쓰일때가 있는데 그럴때마다 함수처리해서 사용하는 습관을 들이면 조금더 시간절약할 수있는 코딩을 할 수 있을 것 같습니다

2021. 03. 22. 20:45
2