-
[CleanCode] 16장 SerialDate 리팩터링
첫째, 돌려보자 둘째, 고쳐보자 🔹 추상 팩토리 패턴상세화된 서브클래스를 정의하지 않고도 서로 관련성이 있거나 독립적인 여러 객체의 군을 생성하기 위한 인터페이스를 제공하는 패턴 위 클래스에서 createInstance 메서드를 makeDate라고 좀 더 서술적으로 변경했다. MINIMUM_YEAR_SUPPORTED와 MAXIMUM_YEAR_SUPPORTED 변수를 적절한 위치인 SpreadsheetDate로 옮긴다. 결론 따라서 리팩터링을 통해 테스트 커버리지가 증가시키고, 버그 고치고, 코드 크기를 줄이고 코드를 명확하게 할 수 있다. 참고 링크
-
[CleanCode] 15장 JUnit 들여다보기
JUnit 프레임워크 우리가 살펴볼 모듈은 문자열 비교 오류를 파악할 때 유용한 코드다. ComparisonCompactor라는 모듈로, 영리하게 짜인 코드다. ComparisonCompactor는 두 문자열을 받아 차이를 반환한다. 위 테스트 케이스로 ComparisonCompactor 모듈에 대한 코드 커버지리 분석을 수행했을 때 100%가 나왔다. 테스트 케이스가 모든 행, 모든 if문, 모든 for문을 실행한다는 뜻이다. 비록 저자들이 모듈을 아주 좋은 상태로 남겨두었지만 보이스카우트 규칙에 따르면 우리는 처음 왔을 때보다…
-
[CleanCode] 14장 점진적인 개선
Intro 확장성이 부족했던 모듈을 소개하고, 모듈을 개선하고 정리하는 단계를 살펴볼 것. 14-1 간단한 Args 사용법 Args는 사용법이 간단하다. Args 생성자에 (입력으로 들어온) 인수 문자열과 형식 문자열을 넘겨 Args 인스턴스를 생성한 후 Args 인스턴스에다 인수 값을 질의한다.매개변수 두 개로 Args 클래스의 클래스의 인스턴스를 만든다. 첫째 매개변수는 형식 또는 스키마를 지정한다. “l,p#,d*”은 명령행 인수 세 개를 정의한다. 첫 번째 -l은 부울 인수다.…
-
[CleanCode] 13장 동시성
🔹 요약 ◽ 동시성과 깔끔한 코드는 양립하게 어렵다. ◽ 스레드를 하나만 실행하는 코드는 짜기가 쉽다. 겉으로 보기에는 멀쩡하나 깊숙한 곳에 문제가 있는 다중 스레드 코드도 짜기 쉽다. 이런 코드는 시스템이 부하를 받기 전까지 멀쩡하게 돌아간다. 🔹이 장에서 다룰 내용 ◽ 여러 스레드를 동시에 돌리는 이유 ◽ 여러 스레드를 동시에 돌리는 어려움◽ 동시성을 테스트하는 방법과 문제점 동시성이 필요한 이유? 구조적 개선만을 위해 동시성을 채택하는 건 아니다. 💡 예시1)…
-
[CleanCode] 12장 창발성(創發性)
🔹 켄트 백이 제시한 단순한 설계 규칙 네 가지 ◽ 모든 테스트를 실행한다. ◽ 중복을 없앤다. ◽ 프로그래머 의도를 표현하라. ◽ 클래스와 메서드 수를 최소로 줄여라 . 단순한 설계 규칙 1: 모든 테스트를 실행하라 단순한 설계 규칙 2~4: 리팩터링 단순한 설계 규칙 2. 중복을 없애라 각 메서드를 따로 구현하는 방법도 있지만, isEmpty 메서드는 부울 값을 반환하며 size 메서드는 개수를…
-
[CleanCode] 11장 시스템
도시를 세운다면? 시스템 제작과 시스템 사용을 분리하라 🔹 소프트웨어 시스템은 (애플리케이션 객체를 제작하고 의존성을 서로 ‘연결’하는) 준비 과정과 (준비 과정 이후에 이어지는)런타임 로직을 분리해야 한다. 관심사(concern) 분리 (장점) (단점) 체계적이고 탄탄한 시스템을 만들고 싶다면 설정 논리는 일반 실행 논리와 분리해야 모듈성이 높아진다. 또한 주요 의존성을 해소하기 위한 방식, 즉 전반적이며 일관적인 방식도 필요하다. Main 분리 팩토리 의존성 주입 확장 횡단(cross-cutting) 관심사…
-
[CleanCode] 10장 클래스
클래스 체계 🔹 클래스를 정의하는 표준 자바 관례 (순서)◽ 변수 목록 – 정적 공개 상수 (public static final) – 정적 비공개 (private static final) – 비공개 인스턴스 변수 공개 변수 (공개 변수가 필요한 경우는 거의 없다)◽ 공개 함수 – 비공개 함수는 자신을 호출하는 공개 함수 직후에 넣는다. – 추상화 단계가 순차적으로 내려간다. </aside> 클래스를 만들 때 가장 중요한 규칙은 크기다.…
-
[CleanCode] 9장 단위 테스트
🔹 기존에는 단위 테스트란 자기 프로그램이 ‘돌아간다’는 사실만 확인하는 일회성 코드에 불과했다. 클래스와 메서드를 공들여 구현한 후 임시 코드를 급조해 테스트를 수행했는데 대개는 간단한 드라이버 프로그램을 구현해 자신이 짠 프로그램을 수동으로 실행했다. 💻 TDD(Test Driven Development) ◽ 테스트 주도 개발 (실제 코드를 짜기 전에 단위 테스트부터 짜라) ◽ 애자일과 TDD 덕택에 단위 테스트를 자동화하는 프로그래머들이…
-
[CleanCode] 8장 경계
🔹 시스템에 들어가는 모든 소프트웨어를 직접 개발하는 경우는 드물다.오픈소스를 이용하거나, 사내 다른 팀이 제공하는 컴포넌트를 이용하거나, 어떤 식으로든 이 외부 코드를 우리 코드에 깔끔하게 통합해야 한다. 이 장에서는 소프트웨어 경계를 깔끔하게 처리하는 기법과 기교를 살펴본다. 외부 코드 사용하기 💻 java.util.Map 위와 같은 경우 Map이 반환하는 Object를 올바른 유형으로 변환할 책임은 Map을 사용하는 클라이언트에게 있다. 이 방식 보다는 아래와 같이 제네릭을…
-
[CleanCode] 7장 오류 처리
오류 코드와 깨끗한 코드오류 처리는 중요하다.하지만 오류 처리 코드로 인해 프로그램 논리를 이해하기 어려워진다면 깨끗한 코드라 부르기 어렵다. 이 장에서는 고상하게 오류를 처리하는 기법과 고려사항 몇 가지를 소개한다. 오류 코드보다 예외를 사용하라 Try-Catch-Finally 문부터 작성하라 다음은 파일이 없으면 예외를 던지는지 알아보는 단위 테스트다.단위 테스트에 맞춰 다음 코드를 구현했다.그런데 코드가 예외를 던지지 않으므로 단위 테스트는 실패한다. 잘못된 파일 접근을 시도하게 구현을…