관련 특정 분야에 최적화된 프로그래밍 언어해당 분야 또는 도메인의 개념과 규칙을 사용언어 지향 프로그래밍의 일종ex : Junit, 쿼리DSL언어와 변환 엔진을 갖추면 지루한 작업을 일일이 수행할 필요가 없어, 해당 DSL과 관련된 소프트웨어 개발의 특정 부분에서 훨씬
리팩터링이 필요하다고 생각되는 것들에 대해 정리하였다주석은 코드와 설계에 기술적인 설명을 부연하는 수단이다쓸모없어질 주석은 아예 달지 않는 것이 가장 좋고 달려있다면 삭제하는 편이 좋다주석은 코드만으로 다하지 못하는 설명만 적는다주석을 달거라면 최대한 간결하고 명료하게
날짜를 표현하는 SerialDate 클래스를 살펴보고 리팩터링 한다SerialDateTests라는 클래스가 있지만 모든 경우를 커버하지 않기 때문에 단위 테스트 케이스를 구현한다새 단위 테스트는 92% 정도의 코드 커버리지를 가진다테스트 케이스를 통해 일부를 변경한다클
자바 프레임워크 중에서 가장 유명한 jUnit 프레임워크에서 가져온 코드를 평가한다JUnit은 저자가 많지만 시작은 켄트 벡과 에릭 감마이다ComparisonCompactorTest.java두 문자열을 받아 차이를 반환하는 코드ComparisonCompactor 모듈에
점진적인 개선을 보여주는 사례를 연구한다Args 생성자에 (입력으로 들어온) 인수 문자열과 형식 문자열을 넘겨 Args 인스턴스를 생성한 후 Args 인스턴스에다 인수 값을 질의한다이렇게 길어진 이유는 자바는 정적 타입 언어라서 타입 시스템을 만족하려면 많은 단어가 필
동시성이 필요한 이유와 그 어려움, 그리고 동시성을 유지하면서 깨끗한 코드를 작성하고 테스트하는 방법과 문제점에 대해 알려준다동시성 = 결합을 없애는 전략 \- 무엇과 언제를 분리하는 전략스레드가 하나인 프로그램은 무엇과 언제가 서로 밀접하다 \- 단일 스레드 프로
창발적 설계에 대하여 설명한다창발성이란 하위 계층에는 없는 행동이 상위 계층에서 자발적으로 돌연히 출연하는 성질켄트 벡은 단순한 설계 규칙 네 가지가 소프트웨어 설계 품질을 크게 높여준다고 이야기한다 \- 1. 모든 테스트를 실행한다 \- 2.중복을 없앤
시스템 수준에서도 코드를 깨끗하게 유지하기 위한 방법에 대해서 설명한다제작(construction)과 사용(use)는 다르다소프트웨어 시스템은 (애플리케이션 객체를 제작하고 의존성을 서로 '연결'하는) 준비 과정과 (준비 과정 이후에 이어지는) 런타임 로직을 분리해야
JAVA Convention에 따르면 가장 먼저 변수 목록이 나온다.static public --> static private --> private 인스턴스 --> (public은 필요한 경우가 거의 없다) 변수목록 다음에는 공개 함수가 나온다. 비공개 함수는 자신을
의존 관계 주입(Dependency Injection)이라고 하며 어떤 객체가 사용하는 의존객체를 직접 생성하지 않고 외부로부터 주입 받아 사용하는 방법BeanFactory : 스프링 빈 컨테이너에 접근하기 위한 최상위 인터페이스, 애플리케이션 컴포넌트의 중앙 저장소빈
단위 테스트의 중요성과 규칙에 대해 설명한다실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다더러운 테스트 코드는 없느니만
소프트웨어 경계를 깔끔하게 처리하는 기법을 알 수 있다인터페이스 제공자는 적용성을 최대한 넓히려 한다인터페이스 사용자는 자신의 요구에 집중하는 인터페이스를 바란다이러한 양방향의 차이로 인해 시스템 경계에서 문제가 생길 수 있다외부 라이브러리 중 컬렉션이 있고 이중 자주
예외 처리에 관한 가이드를 제공해준다오류를 코드로 처리하게 되면 코드의 가독성은 낮아지고 계층의 깊이는 심하게 높아진다오류 코드로 처리하는 경우 개발자가 작성하는 것이기 때문에 실수하는 경우 프로그램이 멈출 수 있다예외 처리를 통해 코드를 분리하고 각 개념을 읽기 쉽게
새로운 자료 타입 추가에 대한 유연성이 필요할 때는 객체, 새로운 동작에 대한 유연성이 필요하면 자료 구조와 절차적인 코드를 사용하는것이 좋다상황에 맞는 방법을 선택하라구현을 감추려면 추상화가 필요하다추상 인터페이스를 제공해 사용자가 구현을 몰느채 자료의 핵심을 조작할