이력서 스터디 DAY 2

HEUKWU·2023년 5월 9일
0

Dependency Injection

의존성 주입(Dependency Injection)은 객체 지향 프로그래밍에서 사용되는 설계 패턴 중 하나로, 객체 간의 의존성을 외부에서 관리하도록 만드는 방법이다.

의존성이란 객체 A가 객체 B를 사용한다면, A는 B에 의존하고 있다고 할 수 있다. 이때 A가 B의 인스턴스를 직접 생성하는 것이 아니라, B의 인스턴스를 외부에서 생성하여 A에게 주입하는 것을 의존성 주입이라고 한다.

방식

의존성 주입은 크게 세 가지 방식으로 구현할 수 있다.

  • 생성자를 통한 주입 방식
    객체를 생성할 때, 해당 객체가 의존하는 객체를 생성자를 통해 주입받는다.
  • setter를 통한 주입 방식
    객체 생성 후, 해당 객체가 의존하는 객체를 프로퍼티를 통해 주입받는다.
  • 메서드를 통한 주입 방식
    객체 생성 후, 해당 객체가 의존하는 객체를 메서드를 호출하여 주입받는다.

장점

의존성 주입을 사용하면, 객체 간의 결합도를 낮출 수 있다. 예를 들어, A가 B를 사용하고 있다면, A는 B의 구현에 의존하게 된다. 그러나 의존성 주입을 사용하면, B의 구현이 변경되어도 A는 영향을 받지 않는다. 왜냐하면 A가 B의 인스턴스를 생성하는 것이 아니라, B의 인스턴스를 외부에서 주입받기 때문이다.

또한 의존성 주입은 테스트 용이성을 높여준다. 테스트를 할 때, 의존성이 있는 객체들을 가짜 객체(Mock Object)로 대체하여 테스트할 수 있기 때문이다. 이렇게 함으로써, 해당 객체가 의존하는 다른 객체들의 상태에 영향을 받지 않고 독립적으로 테스트를 수행할 수 있다.

Spring MVC 예외처리

@ExceptionHandler

Spring MVC에서는 @ExceptionHandler 어노테이션을 사용하여 컨트롤러에서 발생하는 예외를 처리할 수 있다. 이 어노테이션을 사용하면, 특정 예외 클래스가 발생했을 때 해당하는 메서드를 실행하도록 설정할 수 있다. 이를 통해 전역적인 예외 처리를 구현할 수 있다.

@ControllerAdvice

@ExceptionHandler 어노테이션을 사용하면 특정 예외 클래스에 대한 예외 처리를 구현할 수 있지만, 각각의 예외 클래스에 대해 하나씩 메서드를 구현해야 한다는 단점이 있다. 따라서 @ControllerAdvice 어노테이션과 함께 사용하면, 전역적인 예외 처리를 구현하면서도 특정 예외 클래스에 대한 예외 처리를 따로 구현할 수 있다.

@ControllerAdvice
public class GlobalExceptionHandler {
 
    @ExceptionHandler(Exception.class)
    public ModelAndView handleException(Exception e) {
        ModelAndView mav = new ModelAndView("error");
        mav.addObject("message", e.getMessage());
        return mav;
    }

    @ExceptionHandler(IOException.class)
    public ModelAndView handleIOException(IOException e) {
        ModelAndView mav = new ModelAndView("ioerror");
        mav.addObject("message", e.getMessage());
        return mav;
    }
}

0개의 댓글

관련 채용 정보