
의도가 드러나는 이름을 사용하면 코드의 이해와 변경이 쉬워진다.아래 예제는 지뢰찾기 게임을 하는 코드이다. 게임판에서 각 칸은 단순 배열로 표현하고, 배열에서 0번째 값은 칸 상태를 뜻한다. 값 4는 깃발이 꽂힌 상태를 가리킨다.같은 역할을 수행하는데도 이름을 어떻게

어떤 프로그램이든 가장 기본적인 단위는 함수이다. 위 두 코드는 모두 함수고 설정(setup) 페이지와 해제(teardown) 페이지를 테스트 페이지에 넣은 후 해당 테스트 페이지를 html로 렌더링하는 부분이다. 두 코드 중 리팩토링 이후 코드가 확연히 내용을 직관

부정확한 주석은 아예 없는 주석보다 훨씬 더 나쁘다.코드는 변화하고 진화하며, 일부가 여기서 저기로 옮겨지고 합쳐지는 과정을 거친다. 그 동안 주석은 코드를 따라가지 못해 그릇된 정보를 알려줄 때가 많다.코드만이 자기가 하는 일을 진실되게 말한다. 코드만이 정확한 정보

프로그래머라면 형식을 깔끔하게 맞춰 코드를 짜야 한다. 코드 형식을 맞추기 위한 간단한 규칙을 정하고 그 규칙을 착실히 따라야 한다. 팀으로 일한다면 팀이 합의해 규칙을 정하고 모두가 그 규칙을 따라야 한다. 필요하다면 규칙을 자동으로 적용하는 도구를 활용한다.코드 형

남들이 변수에 의존하지 않게 만들고 싶어서, 변수 타입이나 구현을 맘대로 바꾸고 싶어서 변수를 비공개(private)로 정의한다. 그렇다면 어째서 수많은 프로그래머가 조회(get)함수와 설정(set)함수를 당연하게 공개(public)해 비공개 변수를 외부에 노출할까?아

깨끗한 코드는 읽기도 좋아야 하지만 안정성도 높아야 한다. 이 둘은 상충하는 목표가 아니다. 오류 처리를 프로그램 논리와 분리해 독자적인 사안으로 고려하면 튼튼하고 깨끗한 코드를 작성할 수 있고, 독립적인 추론이 가능해지며 코드 유지보수성도 크게 높아진다.예외를 지원하

외부 코드를 우리 코드에 깔끔하게 통합하기 위해 소프트웨어 경계를 깔끔하게 정리하는 기법과 기교를 살펴본다.패키지/프레임워크 제공자는 적용성을 최대한 넓히려 애쓰고, 사용자는 자신의 요구에 집중하는 인터페이스를 바란다. 이러한 차이로 인해 시스템 경계에서 문제가 생길

테스트 코드는 프로그램이 '돌아간다'는 사실만 확인하는 일회성 코드에서 꼬치꼬치 따지며 코드가 제대로 도는지 확인하는 코드로 발전하였다. 애자일과 TDD 덕택에 단위 테스트를 자동화 하는 경우가 늘어났다.TDD는 실제 코드를 짜기 전에 단위 테스트부터 짜라고 요구한다.

이 장에서는 깨끗한 클래스에 대해 다룬다. 클래스 체계 추상화 단계가 순차적으로 내려가며 프로그램은 신문 기사처럼 읽힌다. 정적static 공개public 상수 정적 비공개private 변수 비공개 인스턴수 변수 공개 함수 비공개 함수 (자신을 호출하는 공개 함수 직

이 장에서는 시스템 수준에서도 깨끗한 코드를 유지하는 방법에 대해 알아보자.<span style='background-color: 준비 과정 코드와 런타임 로직이 뒤섞인 기법이다. 전형적인 코드는 다음과 같장점실제로 필요시 까지 객체 미생성 -> 불필요한 부하 X

이 장에서는 창발적 설계로 깔끔한 코드를 구현하는 것에 대해 알아본다.작은 요소들이 모였을 때, 개별 요소에서는 볼 수 없는 새로운 특성이나 행동이 나타나는 현상복잡한 시스템에서 자발적으로 새로운 질서나 패턴이 생기는 것프로그램 개발에서는 <span style='

동시성과 깔끔한 코드는 양립하기 아주 어렵다. 스레드를 하나만 실행하는 코드는 짜기 쉬우나, 시스템이 부하를 받기도 쉽다.이 장에서는 여러 스레드를 동시에 돌리는 이유와 어려움, 이러한 어려움에 대처하고 깨끗한 코드를 작성하는 방법, 동시성을 테스트하는 방법과 문제점을

출발은 좋았으나 확장성이 부족했던 모듈을 샘플로 하여 분석, 개선, 정리하는 과정을 통해 점진적으로 코드를 개선해본다. 여기서는 main 함수로 넘어오는 문자열을 분석하는 유틸리티를 Args를 구현한다.Args 클래스는 (형식 또는 스키마 지정, 명령행 인수 배열) 형

JUnit은 자바 프레임워크 중 가장 유명하다. 여기서는 JUnit 프레임워크에서 가져온 코드를 리팩터링 해본다.JUnit의 다양한 모듈 중 ComparisonCompactor 모듈을 살펴보자. 문자열 비교 오류를 파악할 때 유용하다. ABCDE와 ABXDE를 받아 &

JCommon 라이브러리위 링크에서 JCommon 라이브러리를 제공한다. 이 중 org.jfree.date라는 패키지가 있는데, 이 중 SerialDate라는 클래스를 리팩터링 해본다.SerialDate는 날짜를 표현하는 자바 클래스이다. 하지만 자바는 이미 java.