Handling Error (1)

Hann·2023년 10월 4일
0

에러 핸들링

목록 보기
1/2
post-thumbnail

Intro

개발을 시작함과 동시에 내 옆에서 딱 달라붙어 항상 날 괴롭히던 수많은 Error 들..

이제는 오히려 한참 작성한 코드가 Error 없이 잘 작동하면, 허전하고 느낌이 든다.

그렇게 날 괴롭히던 Error 들을 잘 다루기 위해, 그간 고민했던 것들을 정리해보았다.

어떻게 해야 내가 만든 프로그램에 피해 없이, Error 들과 사이좋게 지낼 수 있을까?

이 글은 단순한 Error Handling 에 대한 글이 아닌, 구조적 관점에서의 Error Handling을 다루는 글입니다.

Error? Exception?

개발을 하다보면 자연스럽게 마주하는 골칫거리 중 하나 Error 와 Exception. (두갠가?)

매번 이것들을 처리하기 급급했지만, 오늘은 이녀석들에 대해 톺아보자.

그런데 여기서 등장하는 Error 와 Exception 이 뭘까?

개념적 정의를 좀 살펴보면 아래와 같은데..

특징ErrorException
발생 원인시스템 오류프로그래머 오류
예측 가능성예측 불가능예측 가능
처리 방식시스템에서 자동 처리프로그래머가 직접 처리
종류스택 오버 플로우, 메모리 부족등null 참조, 0 으로 나누기등

프로그래밍적 정의를 살펴보면 언어마다 조금씩 다르지만..

언어ErrorExceptionEtc
JavaThrowableThrowableThrowable 을 상속받은 두 객체 모두 throw 할수있음
C#xThrowableException 만 throw 할수있음
DartThrowableThrowable모든 객체를 throw 할수있음

위 내용을 종합해보면..

시스템상 오류 & 프로그램상 오류 가 발생할경우, Error 혹은 Exception 을 발생(throw)시킨다.

그러면 개발자는 try-catch 문을 통해 발생된 오류를 catch 하여 상황에 맞게 예외 처리 한다.

( 플렛폼마다 어느정도 차이는 있습니다.. )

try {
		final file = File("./AwesomeFile.txt"); 
		final data = file.readAsStringSync();  
		print(data); 
  } on FileSystemException catch (exception,stackTrace) {
		// if file not exist, 'Code' throw [FileSystemException].
    // Handle FileSystemException

	} on OutOfMemoryError catch (e){
		// if file is really Big, 'System' throw [OutOfMemoryError].
		// Handle StackOverflowError

	}
}

끗!

하면 좋겠지만..

그럼 어떻게 해야 예외 처리를 잘 했다고 소문이 날까?

그냥 try-catch 문만 쓰면 되는거 아니야? 라고 생각하겠지만..

타임머신을 타고 개린이 시절로 잠시 돌아가보자.. ( 대나무 헬리콥터~ )

개린이 시절

아무것도 모르던 개린이 시절.. 뒤도 안보고 코드를 작성하곤했다.

함수 하나에 모든 비지니스 로직 & DB Query 등등 다 때려넣고,

의도대로 작동하는 코드를 보며 내심 뿌듯해 했었다.

당연히 이런 덩어리 코드에 Error 처리는 더 큰 덩어리를 만들뿐이었다.

< 아무튼 돌아가면 된거지 >

그렇게 아무 생각없이 무자비한 코딩을 하고있었다. 나는 점점 더 큰 스파게티 코드를 만들고 있었고,

결국 유지보수가 불가능 할정도의 스파게티 괴물이 탄생했다.

그리고 결정했다, 잠시 코딩을 멈추고 공부하기 시작하기로..

무엇이 문제인지 돌아보고, 이 괴물을 어떻게 물리쳐야할지 한참을 고민했다.

그렇게 한참을 고민 & 공부하고 나서야 해결책을 찾았다.

‘디자인 패턴’ 과 ‘시스템 아키텍처’.

난 이것들을 완전히 내것으로 만들기 전까지 손에서 코딩을 멈추었다.

결국 프로그램에 전체 구조를 생각하게 되었고, 계층, 관심사 분리등 여러 개념들을 알게되었다.

구조적 관점에서 Error 처리

그렇게 프로그램에 구조를 짜게 되면서, 문득 드는 생각..

Quiz) 어느 Layer 에서 Error 처리를 해야할까?

  1. Presentation Layer
  2. Domain Layer
  3. Data Layer

잘 생각해보시고, 다음글로 ㄱㄱ

profile
通 하는 개발자 Hann 입니다.

0개의 댓글