ANIT 패턴과 try-catch-finally가 관계가 있어?
ANIT 패턴이 뭐지?🧐
개인적인 자바 예외처리 파트 공부를 하는 도중 try-catch-finally의 적절한 사용이 ANIT 패턴이라는 글을 보고
- ANIT 패턴은 무엇이고 왜 디자인패턴이 예외처리와 관련이 있다는 건지 의문이 들었다.
ANIT 패턴과 try-catch-finally가 관계가 있어??
- ANIT 패턴은 객체지향 디자인 원칙과 관련된 패턴으로, 상속 대신 합성, 인터페이스 사용, 테스트 용이성을 고려한 설계를 권장하는 패턴
- “Avoid Needless Inheritance, Use Favor Composition Over Inheritance, Prefer Interfaces to Abstract Classes, and Always Design for Testability”
- ANIT 패턴에서는 테스트 용이성을 고려한 설계를 권장다. 이때 예외 처리에 대한 고려가 중요한데, 예외 처리가 잘못 구현되면 테스트 용이성이 떨어지고, 버그가 발생할 가능성이 크다.
- 따라서 try-catch-finally 블록을 적절하게 활용하여 예외 처리를 구현하는 것이 중요
- ANIT 패턴에서는 인터페이스를 사용하여 추상화를 정의하고, 이를 구현하는 클래스를 만들어 의존성을 낮추는 것을 권장한다.
- 이때 인터페이스를 구현하는 클래스에서 예외 처리를 적절하게 구현하면, 유연하고 안정적인 코드를 작성
Finally Block 안에서 Return을 하지말자
try-catch-finally 예외처리를 적절하게 사용하기 위해서는 이것을 생각해야한다.
- try 안에 return : finally 블록을 거쳐서 정상 실행
- catch 안에 return : finally 블록을 거쳐서 정상 실행
- finally 안에 return : try 블록 안에서 발생한 예외는 무시되고 finally 거쳐 정상 종료 (예외를 알 수 없음)
public class FinallyReturnExample {
public static void main(String[] args) {
int result = divide(10, 0);
System.out.println("결과: " + result);
}
private static int divide(int a, int b) {
try {
return a / b;
} catch (ArithmeticException e) {
System.out.println("0으로 나눌수 없습니다.");
return -1;
} finally {
System.out.println("Finally block 실행");
return 0; // Finally block에서 return
}
}
}
/*
* output
* 0으로 나눌수 없습니다. (catch블록의 return은 수행이 안된다.)
* Finally block
* 실행 결과: 0 (finally블록의 return -> 무조건 수행)
*/
- 위 예시 코드에서는 divide 메서드가 a 를 b로 나누는 간단한 기능을 수행한다.
- try에서는 나눗셈을 수행, 만약 ArithmeticException 예외가 발생하면 catch 블록에서 -1을 반환한다. 그리고 finally 블록에서 “Finally block 실행”을 출력하고 0을 반환한다.
- 위 예시 코드를 실행하면 ArithmeticException 예외가 발생하여 catch 블록이 실행되지만, finally 블록에서 0을 반환하게 된다.
- 즉, 예외가 발생했음에도 불구하고 finally 블록에서 반환문이 실행되어 예외가 무시되고 메서드가 정상적으로 종료되는 것이다.
- 결론적으로 finally 블록에서 return을 사용하지 않는 것이 좋다.
- 컴파일러에서 이상하다고 보통 알려준다 (컴파일은 된다)
결론
- ANIT 패턴과 try-catch-finally의 직접적인 연관은 없다.
- 굳이 연관을 짓는다면 적절한 예외처리로 인한 테스트 용이성 & 인터페이스를 구현하는 클래스에서 예외처리를 적절하게 구현하는 것인것 같다.
- try-catch-finally를 통한 예외처리를 할 경우, finally의 return은 지양하자.
Leave a comment