Abstract Class
Spring 은 IoC container 에 bean 객체를 생성한 후 그 객체를 등록한 후, 필요할 때 사용한다. Interface 는 객체를 생성할 수 없기 때문에 bean 이 될 수 없다. 그렇다면 Abstract Class 는 어떨까? 아래 코드를 보면 일단 bean 으로 등록할 수 없다. @RestController class Controller( val abstractService: AbstractService, ) { @GetMapping("/abstract") fun getAbstract() = abstractService.abstractFunction() } @Service abstract class AbstractService { fun abstractFunction() = "" } 아래와 같은 메시지가 뜨면서 애플리케이션이 멈춘다. *************************** APPLICATION FAILED TO START *************************** Description: Parameter 0 of constructor in com.demo.controller.Controller required a bean of type 'com.demo.service.AbstractService' that could not be found. 왜 그럴까? 필자에게 하나의 가설이 있었다. Abstract Class 의 메서드 역시 abstract method 다. Child Class 가 어떻게 구현하느냐에 따라 달라지기 때문에 Abstract Class 는 bean 으로 등록할 수 없다. 그렇다면, Abstract Class 의 모든 메서드가 final method 라면 bean 으로 등록할 수 있을까? 그래서 아래와 같이 구현을 한 후 애플리케이션을 run 했다. ...