📌 애플리케이션의 확장성을 높이는 방법
- 자신이 사용할 객체를 자신이 결정(생성)하지 않는다.
- 인터페이스를 이용한 느슨한 결합을 유도한다.
- 의존성 주입을 통해서 외부 모듈(제3자)로부터 자신이 사용할 객체를 주입받는다.
* 클래스가 클래스를 의존하는 경우 : 결합이 높다.
* 클래스가 인터페이스를 의존하는 경우 : 결합이 낮다.
자동 의존성 주입
- 스프링 컨테이너가 객체를 생성할 클래스를 자동으로 감지하도록 하기
@Component
@Controller
@RestController
@ControllerAdvice
@RestControllerAdvice
@Service
@Repository
1. Dao 생성 - @Repository
- 1) Service에서 선언할 인터페이스 생성
- 2) 위의 인터페이스를 구현할 Class를 생성 - @Repository
public interface UserDao {
void insertUser();
void updateUser();
void getUser();
}
@Repository
public class UserJdbcDao implements UserDao {
@Override
public void insertUser() {
System.out.println("jdbc 기술로 사용자 지정하기");
}
@Override
public void updateUser() {
System.out.println("jdbc 기술로 사용자 수정하기");
}
@Override
public void getUser() {
System.out.println("jdbc 기술로 사용자 조회하기");
}
}
2. Service 생성 - @Service, @Autowired
@Service
public class UserService {
@Autowired
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void 회원가입() {
userDao.getUser();
userDao.insertUser();
}
}
3. pom.xml - 환경설정 정의
- 1) 프로젝트 정보 정의
- 2) 프로젝트 관련 속성값 정의
- 3) 프로젝트의 라이브러리 의존성 정의
<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.jhta</groupId>
<artifactId>spring-ioc</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<properties>
<maven.compiler.target>11</maven.compiler.target>
<maven.compiler.source>11</maven.compiler.source>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.31</version>
</dependency>
</dependencies>
</project>
4. context-autowired.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"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="autowired" />
</beans>
5. App에서 사용
public class App {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("context-autowired.xml");
UserDao userDao = ctx.getBean(UserDao.class);
UserService userService = ctx.getBean(UserService.class);
System.out.println(userDao);
System.out.println(userService);
userService.회원가입();
}
}