1. IoC와 DI

IoC

Inversion of Control

DI

Dependency Injection

IoC/DI 도입 전

public class UserService {
		private UserRepository userRepository;
		
		public UserService() {
				//UserService가 UserRepository를 직접 생성
				this.userRepository = new UserRepository();
		}
		
		public void saveUser(String username) {
				userRepository.save(username);
		}
}

public class userRepository {
		public void save(String username) {
				System.out.println("사용자 저장: " + username);
		}
}

public class Main {
		public static void main(String[] args) {
				UserService.userService = new UserService();
				userService.saveUser("홍길동");
		}
}

UserService 객체가 UserRepository 객체를 new 키워드를 통해 직접 생성 및 결합하고 있다. 하지만 이런 설계는 UserService를 테스트하기 위해 UserRepository가 먼저 설계되어야 하고, UserRepository대신 다른 객체로 변경된다면 코드를 변경해야하는 번거로움이 있다.