본문 바로가기

java spring/DI4

DI -4 xml파일을 Configuration클래스로 대체하기 앞 포스팅에서 Exam에 Component 어노테이션을 붙여 Bean객체로 등록했다. 하지만 이는 MVC패턴에 맞지 않는 생성 방식이다. @Component와 같은 역할을 하는 어노테이션에는 @Service, @Controller, @Repository가 있다. 이들은 각각 해당 클래스를 Bean객체로 등록하여 ioc컨테이너에 넣어주는 같은 역할을 하지만, 각 계층별 다른 이름을 사용하여 해당 클래스가 어떤 역할, 계층인지를 보다 쉽게 알 수 있데 한다. 때문에 Exam은 서비스, 컨트롤러, 레퍼지토리에 해당하지 않는 엔티티이기 때문에 @Component를 사용하는 것은 적절치 않다. 또한 이와 더불어 아직 setting.xml을 사용하여 스프링의 컨피규레이션을 정의하고 있는데 이를 자바 클래스로 대체하.. 2021. 4. 28.
DI- 3 어노테이션 기반으로 의존성 주입하기 xml방식이 아닌 어노테이션 기반으로 의존성 주입을 해보자. 현재 상황은 Exam 클래스와 ExamConsole 클래스가 있는 상태이다. Exam클래스가 시험 점수를 속성으로 가지고 있고, ExamConsole은 그 점수들의 평균, 총점을 계산하여 콘솔에 출력해준다. 이를 위해 ExamConsole은 Exam을 속성(=부품)으로 가진다. 즉 ExamConsole이 Exam이라는 의존성을 주입받아야하는 상황이다. 우선 어노테이션을 사용하여 스프링에게 Bean객체를 생성해 달라고 하기 위해서는 xml파일에 명시해서 알려줘야한다. 12라인의 을 보면 등록할 빈이 있는 클래스의 경로를 적어준다. 현재 spring.di.ui 와 spring.di.entity를 적어줬는데 이렇게 하면 스프링은 해당 패키지들에서 @.. 2021. 4. 28.
DI - 2 전 글에서 DI와 IOC를 이해했다. 그런데 IOC에 들어있는 부품들, 조립 형태를 우리가 주문해야 한다. 그 주문은 XML, 어노테이션으로 하는데 먼저 XML을 통해 주문서를 작성하고 DI를 해보자. 원래의 부품을 만들고 조립하는 방법을 봐보자. 위의 코드를 보면 Exam과 ExamConsole은 인터페이스이다. Exam을 구현한 NewLecExam은 구현한 클래스로 성적의 합, 평균을 반환해주는 함수를 가지고 있다. ExamConsole을 구현한 GridExamConsole은 콘솔창에 NewLecExam의 결과를 출력해주는 함수를 가지고 있다. 추가로 InlineExamConsole이라는 ExamConsole을 구현한 클래스가 하나 더 있다. 즉 GridExamConsole는 그리드 방식으로 출력해주.. 2021. 4. 26.
DI -1 뉴렉처님 강의 DI (dependency injection) DI(dependency injection)란 쉽게 말해 어떤 부픔을 다른 부품 안에 집어 넣는 것이다. 다음과 같은 코드를 보자. // composition HAS A // // A를 생성하면 B를 자동으로 가지게 됨. 일체형 class A{ private B b; public A(){ b = new B(); } } // Association HAS A // // A와 B를 각각 생성 // class A{ private B b; public A(){} public void setB(B b){ this.b = b; } public static void main(String[] args){ B b = new B(); A a = new A(); a.. 2021. 4. 26.