hyeonga_code

Spring_다형성을 이용한 코드 작성 본문

Spring

Spring_다형성을 이용한 코드 작성

hyeonga 2023. 12. 14. 08:59
반응형


- 다형성을 이용
        - src > main > webapp > WEB-INF > web.xml 파일에서 내용을 삭제합니다.
- 삭제하고 남은 내용
=====

1
2
3
4
5
6
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
 
</web-app>

 


- src > pom.xml 파일
=====

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
<?xml version="1.0" encoding="UTF-8"?>
    <modelVersion>4.0.0</modelVersion>
    <groupId>basic.spring</groupId>
    <artifactId>myWeb</artifactId>
    <name>myboard</name>
    <packaging>war</packaging>
    <version>1.0.0-BUILD-SNAPSHOT</version>
    <properties>
<!-- 자바 버전을 변경합니다. -->
        <java-version>11</java-version>
<!-- 스프링 프레임워크 버전을 변경합니다. 원래 3.1.1 현재 5.3.27-->
        <org.springframework-version>5.3.27</org.springframework-version>
        <org.aspectj-version>1.9.19</org.aspectj-version>
        <org.slf4j-version>2.0.7</org.slf4j-version>
    </properties>
    <dependencies>
        <!-- Spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${org.springframework-version}</version>
            <exclusions>
                <!-- Exclude Commons Logging in favor of SLF4j -->
                <exclusion>
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                 </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>
                
        <!-- AspectJ -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>${org.aspectj-version}</version>
        </dependency>    
        
        <!-- Logging -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${org.slf4j-version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jcl-over-slf4j</artifactId>
            <version>${org.slf4j-version}</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${org.slf4j-version}</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.15</version>
            <exclusions>
                <exclusion>
                    <groupId>javax.mail</groupId>
                    <artifactId>mail</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>javax.jms</groupId>
                    <artifactId>jms</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>com.sun.jdmk</groupId>
                    <artifactId>jmxtools</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>com.sun.jmx</groupId>
                    <artifactId>jmxri</artifactId>
                </exclusion>
            </exclusions>
            <scope>runtime</scope>
        </dependency>
 
        <!-- @Inject -->
        <dependency>
            <groupId>javax.inject</groupId>
            <artifactId>javax.inject</artifactId>
            <version>1</version>
        </dependency>
                
<!-- 변경 하기 -->
        <!-- Servlet -->
        
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.0</version>
            <scope>provided</scope>
        </dependency>
 
<!-- 변경 하기 : 원래 jsp-api 현재 javax.servlet.jsp-api -->
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.3</version>
            <scope>provided</scope>
        </dependency>
        
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
            
<!-- 변경 하기 4.12 버전 이상-->
        <!-- Test -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>        
    </dependencies>
    
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-eclipse-plugin</artifactId>
                <!-- 2.10 버전이 있으나 아무도 사용하지 않으므로 결함이 있다는 의미입니다. 그대로 사용합니다. -->
                <version>2.9</version>
                <configuration>
                    <additionalProjectnatures>
                        <projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
                    </additionalProjectnatures>
                    <additionalBuildcommands>
                        <buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand>
                    </additionalBuildcommands>
                    <downloadSources>true</downloadSources>
                    <downloadJavadocs>true</downloadJavadocs>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <!-- 기본 2.5.1입니다. 현재 3.10.1 으로 변경합니다. -->
                <version>3.10.1</version>
                <configuration>
                    <!-- Java 버전이므로 11로 변경해야 합니다. -->
                    <source>11</source>
                    <target>11</target>
                    <compilerArgument>-Xlint:all</compilerArgument>
                    <showWarnings>true</showWarnings>
                    <showDeprecation>true</showDeprecation>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <!-- 실행 파일입니다. 기본 1.2.1 현재 3.1.0 으로 변경합니다.-->
                <version>3.1.0</version>
                <configuration>
                    <mainClass>org.test.int1.Main</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>




- sts.spring.ioc > 'TV.java' 인터페이스를 생성합니다.
=====

1
2
3
4
5
6
7
8
9
package sts.spring.ioc;
 
public interface TV {
    
    public void powerOn();
    public void powerOff();
    public void volumeUp();
    public void volumeDown();
}
cs





- 두 개의 하위 클래스를 생성하여 비교합니다.
- sts.spring.ioc > 'SamsungTV.java' 클래스를 생성합니다.
=====

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package sts.spring.ioc;
 
public class SamsungTV implements TV {
 
    public SamsungTV() {
        System.out.println("[     Create SamsungTV     ]");
    }
    
    @Override
    public void powerOn() {
        System.out.println("SamsungTV powerOn");
    }
    
    @Override
    public void powerOff() {
        System.out.println("SamsungTV powerOff");
    }
    
    @Override
    public void volumeUp() {
        System.out.println("SamsungTV volumeUp");
    }
    
    @Override
    public void volumeDown() {
        System.out.println("SamsungTV volumeDown");
    }
}
 





- sts.spring.ioc > 'LgTV.java' 클래스를 생성합니다.
=====

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package sts.spring.ioc;
 
public class LgTV implements TV{
 
    @Override
    public void powerOn() {
        System.out.println("LgTV powerOn");
    }
 
    @Override
    public void powerOff() {
        System.out.println("LgTV powerOff");        
    }
 
    @Override
    public void volumeUp() {
        System.out.println("LgTV volumeUp");
    }
 
    @Override
    public void volumeDown() {
        System.out.println("LgTV volumeDown");        
    }
 
}
 






- sts.spring.ioc > 'TVUser.java' 클래스를 생성합니다.
=====

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package sts.spring.ioc;
 
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
 
public class TVUser {
    public static void main(String[] args) {
        
        // Spring 컨테이너를 구동합니다.
        AbstractApplicationContext fac = new GenericXmlApplicationContext("applicationContext.xml");
        
        // Spring 컨테이너에 등록한 객체를 요청합니다.
        TV samsungTV = (TV) fac.getBean("samsungTV");
        
        samsungTV.powerOn();
        samsungTV.volumeUp();
        samsungTV.volumeDown();
        samsungTV.powerOff();
        System.out.println();
        
        TV lgTV = (TV) fac.getBean("lgTV");
        
        lgTV.powerOn();
        lgTV.volumeUp();
        lgTV.volumeDown();
        lgTV.powerOff();
        
        // Spring 컨테이너를 종료합니다.
        fac.close();
            /*
                SamsungTV powerOn
                SamsungTV volumeUp
                SamsungTV volumeDown
                SamsungTV powerOff
                
                LgTV powerOn
                LgTV volumeUp
                LgTV volumeDown
                LgTV powerOff
             */
    }
}
 

 

반응형