22.01.03 22:04 작성
·
489
0
비슷한 질문이 있었지만, 원하는 답변이 없어서 다시 질문 드립니다.
16번째 강의(Spring의 AOP를 이용한 Exception Handling)에서 `ResponseEntityExceptionHandler`를 상속 받은 `CustomizedResponseEntityExceptionHandler` 클래스를 생성해서 Exception 핸들링을 해주셨습니다.
그런데, `ResponseEntityExceptionHandler`를 상속 받은 이유를 잘 모르겠습니다.
해당 강의만 봐서는 부모 메소드를 재활용하는 것도 아닌 것으로 보여지고, 실제로 상속을 받지 않더라도 코드는 잘 작동하는 것으로 보여 문의 드립니다.
답변 1
1
2022. 01. 13. 08:15
안녕하세요, 이도원입니다.
자바에 상속이라는 개념은 어떤 클래스나 인터페이스가 가지고 있는 필드나 메소드와 같은 특징을 그대로 넘겨받아 사용하거나, 재정의해서 사용하겠다는 개념입니다. 특히 인터페이스 같은 경우는 메소드의 처리 내용(Body)이 없이, 메소드의 선언만 존재하기 때문에, 반드시 재정의해서 사용해야 합니다. 그렇다면 왜 인터페이스를 사용할까? 라는 질문부터 생각해 보면 좋을 것 같습니다. 한두개 클래스를 생성하면서 같은 인터페이스를 상속받아 작성하는 경우라면, 굳이 인터페이스 없이 서로간의 약속을 잘 정의한대로 메소드 구현한다면 큰 문제는 없을 겁니다. 다만, 구현해야할 클래스가 많아 지거나, 공통적으로 이름을 변경한다고 할 경우 제대로 모두 적용되었는지 컴파일 시 확인하려면 인터페이스를 사용하는 편이 좋다고 생각됩니다. 이렇듯 상속은 어떤 클래스를 생성함에 있어 필수로 처리해야 하는 작업, 명시해야하는 작업, 강제성을 가지고 구현해야하는 작업을 할 수 있습니다. 질문하신 내용처럼 ResponseEntityExceptionHandler를 명시하지 않고, @Override 속성을 제거한 다음 실행해도 정상 작동될 수 있습니다. 그러나, 스프링에서 빈을 등록하고, 등록된 빈을 검색할 때는 클래스의 이름으로 검색하는 경우도 있지만, 클래스의 타입으로 검색하여 매칭하는 경우도 있습니다. 이럴 경우, ResponseEntityExceptionHandler를 명시해 놓지 않으면, 해당 클래스가 ExceptionHandler라는 것을 별도로 명시하거나 빈 등록시 설정해 줘야 합니다. 말씀하신 상속의 선언은 프로그래밍을 하면서 처리하는 규격 또는 약속 정도라고 이해하시면 좋을 것 같습니다.
추가 질문사항 있으시면 글 남겨주세요.
감사합니다.