테스트 주도 개발(TDD, Test Driven Development)만들고자 하는 기능의 내용을 담고 있으면서 만들어진 코드를 검증도 해줄 수 있도록 테스트 코드를 먼저 만들고, 테스트를 성공하게 해주는 코드를 작성하는 방식의 개발 방법이다.테스트를 코드보다 먼저 작성한다고 해서 테스트 우선 개발(Test First Development)이라고도 한다.TDD의 기본 원칙인 "실패한 테스트를 성공시키기 위한 목적이 아닌 코드는 만들지 않는다"를 따랐다면 모든 코드는 빠짐없이 테스트로 검증된 것이라고 볼 수 있다.개발을 하다보면 자연스럽게 머릿속으로 테스트하게 된다. 그러나 머릿속에서 진행되는 테스트는 제약이 심하고, 오류가 많고, 반복하기가 힘들다. 이를 실제 코드로 끄집어 놓으면 TDD가 된다.
개발자가 테스트를 직접 만들 때 자주 하는 실수가 하나 있다. 바로 성공하는 테스트만 골라서 만드는 것이다. 개발자는 머릿속으로 이 코드가 잘 돌아가는 케이스를 상상하면서 코드를 만드는 경우가 일반적이다. 그래서 테스트를 작성할 때도 문제가 될 만한 상황이나, 입력 값 등은 교묘히도 잘 피해서 코드를 만드는 습성이 있다. 이건 테스트 코드를 통한 자동 테스트뿐 아니라, UI를 통한 수동 테스트를 할 때도 빈번하게 발생하는 문제다. 개발자들은 "내 PC에서는 잘 되는데"라는 변명을 곧잘 하는데, 이는 사실 개발자 PC에서 테스트할 때는 예외적인 상황은 모두 피하고 정상적인 케이스만 테스트해봤다는 뜻이다.스프링의 창시자인 로드 존슨은 "항상 네거티브 테스트를 먼저 만들라"는 조언을 했다. 개발자는 빨리 테스..
"스프링이 개발자에게 제공하는 가장 중요한 가치는 무엇이냐고 질문한다면 나는 주저하지 않고 객체지향과 테스트라고 대답할 것이다.""애플리케이션은 계속 변하고 복잡해져 간다. 그 변화에 대응하는 첫 번째 전략이 확장과 변화를 고려한 객체지향적 설계와 그것을 효과적으로 담아낼 수 있는 IoC/DI 같은 기술이라면, 두 번째 전략은 만들어진 코드를 확신할 수 있게 해주고, 변화에 유연하게 대처할 수 있는 자신감을 주는 테스트 기술이다."
메소드를 이용한 의존관계 주입생성자(constructor) 메소드를 이용한 주입수정자(setter) 메소드를 이용한 주입: 외부로부터 제공받은 오브젝트 레퍼런스를 저장해뒀다가 내부의 메소드에서 사용하게 하는 DI 방식에서 활용하기에 적당하다.일반 메소드를 이용한 주입: 여러 개의 파라미터를 가질 수 있다. 전통적으로 수정자 메소드를 가장 많이 사용해왔고, 특히 XML을 사용하는 경우 자바빈 규약을 따르는 수정자 메소드가 가장 사용하기 편리하다.
의존관계(Dependency Relationship)의존대상이 변하면 함께 변하는 것의존관계에는 방향성이 있다 의존관계 주입(Dependency Injection)구체적인 의존 오브젝트와 그것을 사용할 주체, 클라이언트 오브젝트를 런타임 시에 연결해주는 작업클래스 모델이나 코드에는 런타임 시점의 의존관계가 드러나지 않는다. (인터페이스에만 의존)런타임 시점의 의존관계는 컨테이너나 팩토리 같은 제3의 존재가 결정한다.의존관계는 사용할 오브젝트에 대한 레퍼런스를 외부에서 제공(주입)해줌으로써 만들어진다. 의존관계 검색(Dependency Lookup)의존관계를 외부로부터 주입 받지 않고 스스로 검색결정과 생성은 IoC로 맡기지만, 이를 능동적으로 컨테이너에게 요청코드 안에 오브젝트 팩토리 클래스나 스프링 A..
싱글톤 패턴(Singleton Pattern)어떤 클래스를 애플리케이션 내에서 제한된 인스턴스 개수, 이름처럼 주로 하나만 존재하도록 강제하는 패턴이다.클래스 밖에서는 오브젝트를 생성하지 못하도록 생성자를 private으로 만든다. 생성된 싱글톤 오브젝트를 저장할 수 있는 자신과 같은 타입의 스태틱 필드를 정의한다.스태틱 팩토리 메소드인 getInstance()를 만들고 이 메소드가 최초로 호출되는 시점에서 한 번만 오브젝트가 만들어지게 한다. 생성된 오브젝트는 스태틱 필드에 저장된다. 또는 스태틱 필드의 초기값으로 오브젝트를 미리 만들어둘 수도 있다.한번 오브젝트(싱글톤)가 만들어지고 난 후에는 getInstance() 메소드를 통해 이미 만들어져 스태틱 필드에 저장해둔 오브젝트를 넘겨준다. 싱글톤 패..
- Total
- Today
- Yesterday