본문 바로가기
프로그래밍/Spring

Spring / DI 사용의 장점

by 소소로드 2018. 4. 7.

[DI 사용의 장점, Pencil 인터페이스 구현]

: Spring에서 DI를 사용할 때 그리고 인터페이스와 함께 했을 때의 장점은 무엇인가?




Pencil.java

1
2
3
4
5
public interface Pencil {
    
    public void use();
 
}
cs

*

Pencil 인터페이스에 use();라는 메서드를 만들어주었다.

이제 다른 친구들에게 오버라이딩을 시켜 줄 예정이다.

(public은 생략이 가능하다.)




Pencil4B.java

1
2
3
4
5
6
7
public class Pencil4B implements Pencil {
 
    @Override // 상속을 받아서 같은 내용을 받았는데 내용 변경이 필요할 때
    public void use() {
        System.out.println("저는 4B펜슬입니다:)");    
    }
}
cs

 


Pencil6B.java

1
2
3
4
5
6
7
public class Pencil6B implements Pencil {
 
    @Override
    public void use() {
        System.out.println("저는 6B펜슬입니다:)");
    }
}





cs



Pencil6BWithEraser.java

1
2
3
4
5
6
7
public class Pencil6BWithEraser implements Pencil{
 
    @Override
    public void use() {
        System.out.println("저는 6B펜슬이자, 지우개기능까지 있습니다:)");
    }
}
cs

*

세 클래스는 전부 Pencil 인터페이스를 받아 구현하며

숱하게 해와서 잘 알겠지만 반복 학습을 하자면

오버라이딩은 상속을 받아 같은 내용을 받았을 때 내용 변경이 필요하면 쓰는 친구이다.


 


ctx_example.xml

1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="UTF-8"?>
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
 
<bean id="pencil" class="com.yul.ex02_example.Pencil4B"/>
 
</beans>
cs

*

너무나 단순하다. 

id는 pencil로 잡아넣고 앞으로 xml파일에서 class주소만 바꾸면

MainClass를 바꾸지 않아도 기능을 구현할 수 있다.




MainClass.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class MainClass {
 
    public static void main(String[] args) {
        
    //  String configLocation = "classpath:ctx_example.xml";
    //  AbstractApplicationContext ctx = new GenericXmlApplicationContext(configLocation);
        
        AbstractApplicationContext ctx = new GenericXmlApplicationContext("classpath:ctx_example.xml");
        
        Pencil pencil = ctx.getBean("pencil", Pencil.class);
        pencil.use();
        
        ctx.close();
    }
cs

*

주석 두 줄은 아래 한 줄로 간단하게 쓸 수 있다.

여기서 그저 Pencil 인터페이스만 불러오고 getBean으로 불러오기만해서

use()메서드를 써주면 


Pencil 인터페이스에 곧 Pencil4B객체를 만든 것과 같은 효과를 낼 수 있다.