도시를 세울 때
객체 생성 및 의존성 주입
초기화 지연 / 계산 지연 : 상위 타입으로 객체를 호출할 때 구현체를 주입한다. Service getService() { if (service = null) service = new ServiceImpl(); return service; }
→ 장점 : 과부하 감소. nullPointerExcpetion 방지
→ 단점 : 의존성이 주입되지 않으면 컴파일이 되지 않는다. 테스트시에 주입되는 구현체를 적절히 할당해야하고, null 테스트도 해야한다. 메소드가 두 가지 일을 한다. = SRP 위반 구현체가 모든 상황에 적합한지 알 수 없다.
Main을 분리
생성과 관련된 코드는 main으로, 나머지는 객체를 생성하고 의존성이 연결됐다 가정
팩토리
public class LGKeyboard implements Keyboard {
public LGKeyboard(){
System.out.println("LG 키보드 생성");
}
}
public class SamsungKeyboard implements Keyboard {
public SamsungKeyboard(){
System.out.println("Samsung 키보드 생성");
}
}
public class ComputerFactory {
public void createComputer(String type){
KeyboardFactory keyboardFactory = new KeyboardFactory();
MouseFactory mouseFactory = new MouseFactory();
keyboardFactory.createKeyboard(type);
mouseFactory.createMouse(type);
System.out.println("--- " + type + " 컴퓨터 완성 ---");
}
}
의존성 주입 (DI)
확장
애자일 방법론은 소프트웨어 개발 방법론 중 하나로, 빠른 변화에 대응하기 위한 방법론으로 개발되었습니다. 애자일 방법론은 원활한 커뮤니케이션과 적극적인 고객 참여를 강조합니다.
애자일 방법론에는 다양한 종류가 있지만, 가장 대표적인 것은 스크럼(Scrum) 방법론입니다. 스크럼 방법론은 일정 주기마다 일을 진행하고, 이를 스프린트(Sprint)라고 부릅니다. 각 스프린트는 고객 요구사항 중 일부를 구현하는 것을 목표로 합니다.
스크럼 방법론에서는 팀원들이 자율적으로 업무를 분담하고, 매일 짧은 회의를 통해 진행 상황을 공유합니다. 또한 스프린트 회고를 통해 이전 스프린트에서 발생한 문제점을 분석하고, 개선 방법을 도출합니다.
애자일 방법론은 비교적 빠른 시간 안에 결과물을 도출할 수 있고, 고객의 요구사항에 신속하게 대응할 수 있으므로 인기가 높습니다. 그러나 정해진 일정과 비용이 없는 프로젝트에서는 적합하지 않을 수 있습니다. 또한 팀원 간의 커뮤니케이션과 협업 능력이 중요하므로, 팀의 구성원과 문화가 적합하지 않을 경우 효과가 떨어질 수 있습니다.
관심사의 분리
테스트 주도 시스템 아키텍처 구축
시스템은 도메인 특화 언어가 필요하다