멋사 부트캠프/SpringFramework

01. 의존성 주입 (DI)

cTosMaster 2025. 5. 16. 13:25

1. 의존성 주입 방식

   1) 에너테이션 방식

Spring은 MVC 아키텍처를 따르며, @Autowired와 같은 애너테이션을 통해 의존성 주입을 수행한다.

각각의 애너테이션(아래 예시)을 
Spring 컨테이너 (= ApplicationContext)가 관리한다.

@Controller
public class PersonController {
	
	
	private PersonService service;
	private PersonConsoleView view;
	private Scanner sc = new Scanner(System.in);
	
	@Autowired
	public PersonController(PersonService service, PersonConsoleView view) {
		this.service = service;
		this.view = view;
	}
    .....
}

@Repository (=DAO)
public class PersonDaoSample implements PersonDao {
	
	@Autowired
	private JdbcTemplate jdbcTemplate;
	...
}

@Service
public class PersonServiceSample implements PersonService{
	
	@Autowired
	private PersonDao dao;
	...
}

@Configuration
@ComponentScan(basePackages = "com.person")
@PropertySource("classpath:db.properties")
public class AppConfig {	
	// DB 정보 객체 생성
	@Bean
	public DataSource dataSource(Environment env) {
		DriverManagerDataSource db_mgr = new DriverManagerDataSource();
		
		db_mgr.setDriverClassName(env.getProperty("driver"));
		db_mgr.setUrl(env.getProperty("url"));
		db_mgr.setUsername(env.getProperty("user"));
		db_mgr.setPassword(env.getProperty("password"));
		
		return db_mgr;
	}
	
	// DB 커넥션 객체 생성
	@Bean
	public JdbcTemplate jdbcTemplate (DataSource dataSource) {
		return new JdbcTemplate(dataSource);
	}	
}

@Component
public class PersonConsoleView {
...
}

 

 

2. 기존 방식과 의존성 주입 방식의 차이점

//기존 방식
import ***.DieselEngine;
public class Car {
    private Engine engine = new DieselEngine(); // 여기서 타입이 고정됨
}

//의존성 주입 방식
@Component
public DieselEngine{
       ...... 
}

@Component
public class Car {
    private final Engine engine;

    @Autowired
    public Car(Engine engine) {
        this.engine = engine;
    }
}