IT 강의 정리/윤재성의 스프링 입문

[섹션1] 04~06강 자바 프로젝트 만들기/ 다형성 사용하기/ 스프링 프레임워크 사용하기

Nellie Kim 2022. 10. 7. 14:30
728x90

04. 자바 프로젝트 만들기

원래 지금까지 하던대로 자바 프로젝트를 만들어 보자.

평소대로라면,

① 클래스가지고 객체를 먼저 생성하고, ② 해당 객체의 주소값을 참조변수에 넣어주고 , ③그 참조변수를 통해서 뭔가 작업을 하는 식으로 보통 개발을 한다.

package kr.co.softcampus.beans;

public class HelloWorldEn {
	public void sayHello() {
		System.out.println("Hi~~~");
	}
}
package kr.co.softcampus.main;
import kr.co.softcampus.beans.HelloWorldEn;
import kr.co.softcampus.beans.HelloWorldKo;

public class MainClass {
	public static void main(String[] args) {
		HelloWorldEn hello1 = new HelloWorldEn(); // (1) HelloWorldEn클래스로 객체생성
		callMethod(hello1); // (3) 참조변수를 넣은 callMethod메서드를 이용해서 작업하기
		
		HelloWorldEn hello2 = new HelloWorldEn();
		callMethod(hello2);
	}
	
	public static void callMethod(HelloWorldEn hello) { 
    // (2) HelloWorldEn클래스의 객체의 주소값을 callMethod메서드의 참조변수로 넣어주기
  
		hello.sayHello();
	}
}

그런데, 만약에 내가 만든 HelloWorldEn클래스를 HelloWorldKo클래스로 변경을 하고 싶다면 어떻게 해야 할까? 

 

당연히, 객체를 만들었던 클래스명을 먼저 변경해주고,

package kr.co.softcampus.beans;

public class HelloWorldKo { //클래스명 변경

	public void sayHello() {
		System.out.println("안녕하세요");
	}
}

객체 생성 코드 변경,  메서드에 매개변수로 넣어줄 데이터타입도 변경해야 한다.

package kr.co.softcampus.main;
import kr.co.softcampus.beans.HelloWorldEn;
import kr.co.softcampus.beans.HelloWorldKo;

public class MainClass {
	public static void main(String[] args) {
//		HelloWorldEn hello1 = new HelloWorldEn();
		HelloWorldKo hello1 = new HelloWorldKo();//객체생성부분 변경
		callMethod(hello1); 
		
//		HelloWorldEn hello2 = new HelloWorldEn();
		HelloWorldKo hello2 = new HelloWorldKo();
		callMethod(hello2);
	}
	
	public static void callMethod(HelloWorldKo hello) { //메서드타입 클래스도 변경
		hello.sayHello();
	}
}

필요한 파일 3개
자바프로젝트의 문제점. 밑줄 부분을 모두 수정 해야 한다.

지금까지는, 이렇게 무언가가 변경되었을때 수동으로 모두 수정을 해줘야 했다. 

다루기에 매우 번거롭다는 불편함을 가지고 있고, 유지보수에도 어려움이 있었다.

 

05. 다형성 사용하기

아직 스프링을 사용하지는 않지만, 자바의 객체지향프로그래밍에서 제공하는 다형성 개념을 이용해서 위의 불편함을 해소해보자.

이와같은 인터페이스를 상속받은 구조로 만들어보자.

다형성을 사용하면 아래처럼 좌항은 인터페이스인 HelloWorld 로 두고, 우항만 HelloWorldEn → HelloWorldKo로 변경해주면 된다. 4강의 예제에 비하면 편해졌지만, 다형성 또한 우항을 변경해줘야 한다는 번거로움이 있다.

클래스로 객체를 만드는 방법은 어쩔 수가 없다. 클래스를 정확히 지칭해서 만들어 줘야 하기때문에, 정확한 클래스명을 써서 객체를 만들어야 한다. 수정해야할 객체 생성코드가 100줄이라면, 100줄의 클래스명을 모두 수정해야 한다.

필요한 파일 4개
다형성의 문제점. 우항을 수정해야 한다

이러한 불편함을 해소하기 위해 나온 것이 스프링 프레임워크이다.

 

 

06. 스프링 프레임워크 사용하기

스프링프레임워크를 적용하면 자바 코드작성부분을 줄일수 있다. 하지만 초기 프로젝트 세팅이 다소 복잡하다.

스프링프레임워크사용은 xml을 이용하는 방법자바 어노테이션(java4.0~)을 이용하는 방법 2가지로 구분된다.

먼저 고전적인 방식인 xml을 이용하는 방법을 배워보자.

 

Maven 이란?

스프링프레임워크는 개발도구가 제공되지 않는다. 그냥 자바 어플리케이션을 개발할때 스프링에서 만든 자바 라이브러리를 붙여넣고,  그 라이브러리에서 제공되는 클래스를 이용해서 작업을 하는 방식이다. Maven이나 Gradle을 사용해서 라이브러리를 자동으로 다운받아서 세팅한다. 파이썬의 pip와 같은 것이다.

- 자바 프로젝트의 빌드를 자동으로 해주는 도구

- 개발자가 xml에 작성한 프로젝트 정보를 토대로 컴파일하고 라이브러리를 연결하는 등의 작업을 해주는 도구

- Maven서버를 통해 라이브러리를 다운받아 설정하는 작업도 수행

 

 

1) pom.xml파일 작성 - 스프링 버전 명시

이 파일에 Maven 프로젝트에 관련된 정보, 스프링프레임워크의 라이브러리 정보를 작성하면 이 라이브러리가 자동으로 다운로드 된다. 중복해서 계속 사용할 것이기 때문에 한번 만들어두고 복사해서 쓰자.

 

먼저, spring.io 사이트에서 LEARN에서 최신 버전(맨위 5.3.23)을 찾는다.

(전에는 스프링프레임워크 jar파일을 직접 다운로드 받을수 있었는데, 지금은 스프링프레임워크의 버전 정보만 제공한다.)

Maven Repository사이트(Maven에서 운영하는 라이브러리공식서버)에서 'spring context'검색후 해당 스프링버전을 찾아서 복사한후 pom.xml안의 <dependencies> </dependencies> 안에 붙여넣기.

저장하는 순간 내가 적은 스프링 라이브러리들을 다운로드가 되며, 좌측에 Maven Dependencies탭이 생성된다.

스프링에서 작업할때마다 해당 로그가 출력하게 하는 라이브러리도 추가 (slf4j)

slf4j가 사용할 수 있도록 하는 라이브러리도 추가(logback)

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>kr.co.softcampus</groupId>
	<artifactId>SpringBasic</artifactId>
	<version>0.0.1-SNAPSHOT</version>

	<!-- xml에서 사용할 속성들 -->
	<properties>
		<!-- 자바버전 -->
		<java-version>1.8</java-version>
		
		<!-- 스프링 버전 -->
		<org.springframework-version>5.3.23</org.springframework-version>
		<!-- <org.springframework-version>5.2.22.RELEASE</org.springframework-version>  -->
		
		<org.slf4j-version>2.0.3</org.slf4j-version>
		<ch.qos.logback-version>1.4.3</ch.qos.logback-version>
	</properties>


	<!-- 프로젝트에서 사용할 라이브러리 정보 -->
	<dependencies>
		<!-- spring context -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>

		<!-- slf4j -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>${org.slf4j-version}</version>
		</dependency>

		<!-- logback -->
		<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-classic</artifactId>
			<version>${ch.qos.logback-version}</version>
			<exclusions>
				<exclusion>
					<groupId>org.slf4j</groupId>
					<artifactId>slf4j-api</artifactId>
				</exclusion>
			</exclusions>
			<scope>runtime</scope>
		</dependency>
	</dependencies>
</project>

 

 

2) beans.xml파일 작성  - 생성할 bean객체 명시

객체를 만들 클래스를 bean에 등록하기. 이때 클래스가 여러개일수 있기 때문에

id속성을 사용하여 이름을 부여해주기. 클래스 명을 바꿀때는 여기 안의 클래스 명만 바꿔주면 된다.

이렇게 한줄만 바꿔주면 된다!!!!!  HelloWorldEn → HelloWorldKo  유지보수가 굉장히 간편해졌다!

beans.xml파일 역시 중복해서 계속 사용할 것이기 때문에 한번 만들어두고 복사해서 쓰자.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
						http://www.springframework.org/schema/beans/spring-beans.xsd">
						
	<!-- <bean id='hello' class='kr.co.softcampus.beans.HelloWorldEn'/> -->
	<bean id='hello' class='kr.co.softcampus.beans.HelloWorldKo'/>	<!--원하는 클래스 명만 써줄것-->				
</beans>

 

3) MainClass.java, HelloWorld.java인터페이스, HelloWorldEn.java, HelloWorldKo.java 파일 작성

package kr.co.softcampus.main;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import kr.co.softcampus.beans.HelloWorld;

public class MainClass {
	public static void main(String[] args) {
		// beans.xml파일을 로딩한다. 괄호안에 경로를 모두 작성해야 한다.
		ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("kr/co/softcampus/config/beans.xml");
	
		// xml에 정의한 bean 객체의 주소값을 가져온다.
		HelloWorld hello1 = (HelloWorld)ctx.getBean("hello");//형변환 해줘야 함
		callMethod(hello1);
		
		HelloWorld hello2 = ctx.getBean("hello", HelloWorld.class);//위와 동일한 코드. 취향에 맞게 사용하자!
		callMethod(hello2);
		
		ctx.close();
	}
	
	public static void callMethod(HelloWorld hello) {
		hello.sayHello();
	}
}

 

필요한 파일 6개

 

 

출처 :  [인프런]윤재성의 스프링 프레임워크 개발자를 위한 실습을 통한 입문 과정