Clean Software

    소프트웨어 아키텍처

    좋은 소프트웨어 아키텍처의 목표란? 필요한 시스템을 만들고 유지하는데 투입되는 인력을 최소화 하는데 있다. 다시말해 설계 품질을 재는 척도는 고객의 요구를 만족시키는데 드는 비용을 재는 척도와 다름없다. 이 비용이 낮을 뿐 아니라 시스템의 수명이 다할 때까지 낮게 유지할수 있다면 좋은 설계라고 할 수 있다. 현대의 대다수 개발자는 뼈 빠지게일한다. 하지만 그들의 뇌는 잠에 취해 있다. 훌륭하고 깔끔하게 잘 설계된 코드가 중요하다는 사실을 알고 있는 바로 그 뇌가 잠자고 있다. '코드는 나중에 정리하면 돼. 당장은 시장에 출시하는게 먼저야' 라고 생각한 개발자는 출시 후에도 절대로 태세를 전화하지 않는다. 왜냐하면 출시후에는 바로 다음에 만들어야할 새로운 기능이 기다리고 있기때문이다. 개발자가 속는 더 잘..

    의존성 주입 방법 (생성자 주입, 서비스 로케이터, Dagger)

    의존성 B 클래스에서 A 클래스를 내부에 변수로 사용하게 됨으로써 B 클래스는 A 클래스에 의존관계가 생기게 되는 것 주입 내부가 아니라 외부에서 객체를 생성해서 넣어주는 것 의존성+주입 내부에서 만든 변수를 외부에서 넣어주어 의존성을 분리시켜주는 것 의존성 종류는 클래스 의존성뿐 아니라 메서드 의존성 등 다양하지만 여기선 다양한 객체를 그냥 클래스라고 명칭함 DI 장점 - 다형성을 사용할 수 있어 프로그램이 유연해진다. 더보기 다형성 정의: 다형성이란 프로그램 언어 각 요소들(상수, 변수, 식, 객체, 메서드 등)이 다양한 자료형(type)에 속하는 것이 허가되는 성질 다형성 구현방법: 오버 로딩(여러 종류의 타입을 받아들여 결국엔 같은 기능을 하도록 만들기 위한 작업), 오버 라이딩(오버 라이딩은 상..

    Hamcrest (읽기 쉬운 JUnit Test 코드 작성하기)

    Hamcrest 란? 더보기 Hamcrest 란? 위키백과 Hamcrest는 Java 프로그래밍 언어로 소프트웨어 테스트 작성을 지원하는 프레임 워크입니다. 사용자 지정 assert matcher생성을 지원하여 일치 규칙을 선언적으로 정의 할 수 있습니다. 이러한 matcher는 JUnit 및 jMock과 같은 단위 테스트 프레임 워크에서 사용됩니다. Junit에서 Hamcrest matcher를 사용하려면 assertThat 문 뒤에 하나 또는 여러 개의 matchers를 사용한다. assertThat(T actual, Matcher matcher) 가령 아래의 식을 // Junit4 코드 assertEquals(expedted, actual) assertNotEquals(expected, actual..

    JUnit 5 (JUnit 4와 비교)

    JUnit5 란? JUnit이란? 더보기 JUnit은 자바 프로그래밍 언어용 유닛 테스트 프레임워크이다. JUnit은 테스트 주도 개발 면에서 중요하며 SUnit과 함께 시작된 XUnit이라는 이름의 유닛 테스트 프레임워크 계열의 하나이다. JUnit은 컴파일 타임에 JAR로서 링크된다. 프레임워크는 JUnit 3.8 이하의 경우 junit.framework 패키지 밑에 상주하며, JUnit 4 이상의 경우 org.junit 패키지 밑에 상주한다. 깃허브에 호스팅된 10,000개 자바 프로젝트를 대상으로 한 2013년 수행된 연구 조사에 따르면 JUnit(slf4j-api과 연결된)은 가장 흔히 포함시킨 외부 라이브러리였다. 각 라이브러리는 프로젝트 가운데 30.7%에 사용되었다. (위키백과 참고) JU..

    TDD 테스트 주도 개발

    테스트 주도 개발의 진행 방식 질문(Ask): 테스트 작성을 통해 시스템에 질문한다. (테스트 수행 결과는 실패) 응답(Respond): 테스트를 통과하는 코드를 작성해서 질문에 대답한다. (테스트 성공) 정제(Refine): 아이디어를 통합하고, 불필요한 것은 제거하고, 모호한 것은 명확 히 해서 대답을 정제한다. (리팩토링) 반복(Repeat): 다음 질문을 통해 대화를 계속 진행한다. 은행 계좌(Account Class) 클래스 자판기(Vending Machine) 잔돈 예제 고품질 쾌속개발을 위한 테스트 주도 개발 TDD 실천법과 도구 책을 바탕으로 작성(저자가 절판된 책을 pdf로 공개했습니다 ) 1장 - 테스트주도개발 Test Driven Development 2장 - JUnit and Ham..

    디자인 패턴(Design pattern) - 정의 및 분류

    Design patterns aren't the designs people tend to generate initially. They reflect untold redesign and receding as developers have struggled for greater reuse and flexibility in their software. Design patterns capture these solutions in a succinct and easily applied form. 디자인 패턴은 처음부터 작성되는 코드가 아닙니다. 코드들 개발자가 소프트웨어에서 더 큰 재사용과 유연성을 위해 고군분투함에 따라, 계속된 재설계와 후퇴의 과정이 반영 됩니다. 디자인 패턴은 이러한 고군분투가 담겨있는 재사용과..