본문 바로가기

용어정리/#스프링 삼각형

실습정리-[#스프링삼각형] 1.스프링을 적용하지 않은 방식으로의 코딩

[ 스프링을 적용하지 않은 방식으로의 코딩 ]


2018 - 06 - 02



우선 스프링에서 예제문을 실행시켜보도록 하자

실습은 STS를 통해 진행됩니다.


1. STS의 File -> New -> Spring Legacy Porject - > Spring MVC Project 를 선택합니다.

2. Project name에 ExpertSpring30을 입력하고 Next 버튼을 클릭합니다.

3. Please specify the top-level package e.g. com.mycompay.myapp*에 com.heaven.mvc를 입력

한 후 Finish 버튼을 입력해 스프링 MVC 프로젝트를 생성합니다.

4. STS 좌측의 Package Explorer에서 src/main/java 밑에 expert001_01 패키지를 만들고 클래스로

Car.java, KoreaTire.java, AmericaTire.java, 인터페이스로 Tire.java, 그리고 이를 테스트해볼 수 있는 Driver.java를 작성하자

 Car.java

 Tire 생산(new)하고 사용

  

 Tire.java

 인터페이스

 

 AmericaTire.java

 Tire 인터페이스 구현

 

 KoreaTire.java

 Tire 인터페이스 구현

 

 Driver.java

 테스트 필드

 


Car.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package expert001_01;
 
public class Car {
    Tire tire;
    
    public Car() { 
        tire = new KoreaTire();
        // tire = new AmericaTire();
    }
    
    public String getTireBrand() {
        return "장착된 타이어: " + tire.getBrand();
    }
}
cs


Tire.java

1
2
3
4
5
6
package expert001_01;
 
interface Tire {
    String getBrand();
}
 
cs


AmericaTire.java

1
2
3
4
5
6
7
package expert001_01;
 
public class AmericaTire implements Tire {
    public String getBrand() {
        return "미국 타이어";
    }
}
cs


KoreaTire.java

1
2
3
4
5
6
7
8
package expert001_01;
 
public class KoreaTire implements Tire {
    public String getBrand() {
        return "코리아 타이어";
    }
}
 
cs


Driver.java

1
2
3
4
5
6
7
8
9
10
11
package expert001_01;
 
public class Driver {
 
    public static void main(String[] args) {
        Car car = new Car();
        
        System.out.println(car.getTireBrand());
    }
 
}
cs


여기에서 주의 깊게 볼 부분은 Car.java의 new KoreaTire() 부분이다.

바로 자동차가 타이어를 생산(new) 하는 부분. 즉 의존 관계가 일어나고 있는 부분이다.


위의 배포 부분의 경로가 src/main/java 폴더의 export001_01 패키지라면

테스트 를 하기 위해서 src/main/java 폴더에 export001_01 패키지를 만들고

다음과 같은 코드를 작성한다.

CarTest.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package export001_01;
 
import org.junit.Test;
 
import static org.junit.Assert.*;
 
import expert001_01.Car;
 
public class CarTest {
    @Test
    public void 자동차_장착_타이어브랜드_테스트() {
        Car car = new Car();
        
        assertEquals("장착된 타이어: 코리아 타이어", car.getTireBrand());
    }
}
cs

테스트 메서드명이 한글이다. 

실제 배포용 코드를 포함한 src/main/java 폴더의 소스에는 한글로 된 메서드명을 권장하지 않지만 배포하지 않는 테스트코드를 포함한 src/test/java 폴더에서는 영어보다는

위와 같이 한글로 정확히 무슨 테스트를 하고 있는지 적어주는 것을 권장한다. 

한글로 작성하는 경우 영어보다 더 직관적으로 어떤 테스트를 하고 있는지 알 수 있기 때문이다.


다음으로 src/main/java/export001_01/Driver.java에 마우스 오른쪽 버튼을 클릭한 후 메뉴에서 

Run As -> Java Application을 선택한다.


오타가 없다면 STS Console 창에 

장착된 타이어: 코리아 타이어 

라는 문구가 나타날 것이다.


JUnit Test 클래스도 작성했으니 한번 실행해 보자. src/test/java/export001_01/CarTest.java에

마우스 오른쪽 버튼을 클릭한 후 메뉴에서

Run As -> JUnit Test를 선택한다.



그럼 STS JUnit 창에서 테스트 성공을 의미하는 다음과 같은 초록 막대를 볼 수 있다.


여기까지의 내용을 정리해 보자


자동차는 타이어에 의존한다.

운전자는 자동차를 사용한다.

운전자가 자동차에 의존한다고 봐도 된다.

자동차의 생성자 코드에서 tire 속성에 새로운 타이어를 생성해서 참조할 수 있게 해주었다.


출처

스프링 입문을 위한 자바 객체 지향의 원리와 이해

김종민 저