Language/Java38 [클린 코드] Ch.16 - 냄새와 휴리스틱 해당 서적을 참고하여 개인 공부용으로 정리한 글입니다. 16장 SerialDate 리팩터링은 JUnit과 마찬가지로 기존 라이브러리를 리팩터링하는 과정인데, 리팩터링 하는 기준이 해당 포스트에 나오는 것을 기준으로 한 것이기 때문에 넘어가고바로 17장을 정리하게 되었습니다. Intro '냄새'는 마틴 파울러의 '리팩터링' 저서에서 나온 것이다. 이번 챕터는 이 리팩터링 내용 일부에 클린 코드 저자가 추가한것이다. 또한, '냄새'에서 알 수 있듯이 원래는 위험 요소를 뜻하고 '냄새가 발견되면 피해라' 라는 형식으로 작성되어 있다. 하지만 나는 추후에 한눈에 알 수 있도록 냄새보다 휴리스틱에 포커스를 맞춰 작성했다. 코드를 짜다 의문이 들때면 이 포스트를 참고하면 좋을 것 같다. 주석 C1: 필요한 정보만 .. Language/Java 2022. 8. 29. [클린 코드] Ch.15 - JUnit 해당 서적을 참고하여 개인 공부용으로 정리한 글입니다. JUnit 아래는 JUnit에서 문자열 비교 오류를 파악할 때 유용한 ComparisonCompactor라는 모듈이다. public class ComparisonCompactor { private static final String ELLIPSIS = "..."; private static final String DELTA_END = "]"; private static final String DELTA_START = "["; private int fContextLength; private String fExpected; private String fActual; private int fPrefix; private int fSuffix; public .. Language/Java 2022. 8. 25. [클린 코드] Ch.14 - 점진적인 개선 해당 서적을 참고하여 개인 공부용으로 정리한 글입니다. Intro 시작은 좋았으나 확장성이 부족했던 모듈을 개선하고 정리하는 단계를 살펴본다. 프로그램을 짜다 보면 종종 명령행 인수의 구문을 분석할 필요가 생긴다. 내 사정에 맞는 유틸리티가 없다면 직접 짜야할 것이다. 책에서는 Args라 부른다. Args는 생성자에 인수 문자열과 형식 문자열을 넘겨 Args 인스턴스를 생성한 후 여기다 인수 값을 질의한다. public static void main(String[] args) { try { Args arg = new Args("l,p#,d*", args); boolean logging = arg.getBoolean('l'); int port = arg.getInt('p'); String directory.. Language/Java 2022. 8. 24. [클린 코드] Ch.13 - 동시성 해당 서적을 참고하여 개인 공부용으로 정리한 글입니다. 동시성의 필요성 동시성은 결합도(coupling)을 없애는 전략이다. 무엇과 언제를 분리한다. 무엇과 언제를 분리하면 어플리케이션 구조와 효율이 극적으로 나아진다. 단일 스레드 프로그램은 무엇과 언제가 밀접하다. 서블릿 모델은 동시성을 부분적으로 관리한다. 웹 요청이 들어올 때마다 웹 서버는 비동기식으로 서블릿을 실행한다. 하지만 웹 컨테이너가 제공하는 결합분리(decoupling) 전략은 완벽과 거리가 멀다. 그럼에도 불구하고 구조적 이점은 아주 크다. 많은 사용자를 동시에 처리해야 하거나, 많은 정보를 분석해야할 때 동시성이 필요해진다. 동시성 오해 동시성은 성능을 항상 높여주진 않는다. 대기 시간이 길어 여러 스레드가 프로세서를 공유할 수 있거.. Language/Java 2022. 8. 23. [클린 코드] Ch.12 - 창발성 해당 서적을 참고하여 개인 공부용으로 정리한 글입니다. Intro. 창발성(創發性)이란? 창발(創發) 또는 떠오름 현상은 하위 계층(구성 요소)에는 없는 특성이나 행동이 상위 계층(전체 구조)에서 자발적으로 돌연히 출현하는 현상이다. 또한 불시에 솟아나는 특성을 창발성(emergent property) 또는 이머전스(emergence)라고도 부른다. [출처] 위키피디아, 창발, https://ko.wikipedia.org/wiki/%EC%B0%BD%EB%B0%9C 네 가지 단순 설계 규칙 모든 테스트를 실행한다 중복을 제거한다 의도를 제대로 표현한다 클래스와 메서드 수를 최소로 줄인다. 위 규칙은 중요도 순이다. 켄트 벡이 제시한 이 규칙은 소프트웨어 설계 품질을 크게 높여준다. 1. 모든 테스트를 실행.. Language/Java 2022. 8. 22. [클린 코드] Ch.11 - 시스템 해당 서적을 참고하여 개인 공부용으로 정리한 글입니다. 시스템 수준에서 깨끗함 유지 제작(construction)과 사용(use)는 다르다. 시스템은 준비과정과 런타임 로직을 분리해야 한다. 하지만 대다수 어플리케이션은 이를 분리하지 않는다. 다음처럼 런타임 로직과 뒤섞는다. public Service getService() { if (service == null) service = new MyServiceImpl(...); // 모든 상황에 적합한 기본값일까? return service; } 이것은 초기화 지연(lazy Intialization) 혹은 계산 지연(Lazy Evaluation)이라는 기법이다. 몇 가지 장점이 있긴 하다. 필요하기 전까지 객체를 생성하지 않으므로 부하가 걸리지 않아 시작하.. Language/Java 2022. 8. 19. [클린 코드] Ch.10 - 클래스 해당 서적을 참고하여 개인 공부용으로 정리한 글입니다. 클래스 체계 표준 자바 관례에 따르면, 변수 목록이 먼저 나온다. 변수의 순서는 다음과 같다. public static private static private public (거의 없음) 이후 공개 함수가 나오고, 비공개 함수는 자신을 호출하는 공개 함수 직후에 넣는다.(추상화가 내려감) 캡슐화 변수와 유틸리티 함수는 공개하지 않는 편이 낫지만 반드시 숨겨야 한다는 법칙도 없다. 하지만, 비공개 상태를 유지할 방법을 먼저 강구하고 캡슐화를 풀어주는 결정은 마지막에 한다. 클래스는 작게 함수와 마찬가지로 클래스도 작아야 한다. 함수는 행 수로 크기를 측정했다면, 클래스는 맡은 책임을 센다. 메서드 수가 작다고 해서 클래스가 작은 것은 아니다. 클래스 .. Language/Java 2022. 8. 18. [클린 코드] Ch. 9 - 단위 테스트 해당 서적을 참고하여 개인 공부용으로 정리한 글입니다. Intro 애자일과 TDD로 인해 단위 테스트를 자동화하는 프로그래머들이 많아졌다. 더 이상 실행만 확인하는 일회성 코드가 아닌 제대로 된 테스트 코드를 작성해야 한다. TDD 3 법칙 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다. 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다. 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다. 위 3가지 규칙을 통해 개발과 테스트가 대략 30초 주기로 묶인다. 빠르게 테스트 코드 및 테스트 케이스를 생산할 수 있다는 것이 장점이지만, 실제 코드와 맞먹는 양인 테스트 코드는 관리 문제를 유발하기도 한다. 테스트 코드 깨끗하게 유지하기 지저분한 테스트 코드.. Language/Java 2022. 8. 16. [클린 코드] Ch.8 - 경계 해당 서적을 참고하여 개인 공부용으로 정리한 글입니다. 외부 코드 사용하기 인터페이스 제공자는 적용성을 최대한 넓히려 애쓰고, 사용자는 자신의 요구에 집중하는 인터페이스를 바란다. 이것을 '경계에서의 긴장'이라한다. 예시로, Map 인터페이스의 다양한 기능 중 clear 메서드는 Map 사용자 누구나 내용을 지울 수 있게 한다. 또한, 어떤 객체 유형도 추가할 수 있다. 제네릭을 이용하면 유형을 지정함과 동시에 코드 가독성을 높일 수 있다. 하지만, Map 인스턴스를 여기저기 넘긴다면, Map이 변할 시 수정할 코드가 많아진다. (물론 잘 변하지 않을꺼라 생각하지만, 제네릭이 추가될 때 Map이 변경된 것을 고려하면 절대는 없다.) 따라서, 다음 처럼 캡슐화할 경우 코드 가독성을 유지하면서 오용을 줄일 .. Language/Java 2022. 8. 15. [클린 코드] Ch.7 - 오류 처리 해당 서적을 참고하여 개인 공부용으로 정리한 글입니다. 오류 코드보다 예외를 사용할 것 Ch.3 함수에서 얘기했듯이, 오류 코드보다 예외를 던져 처리하는 것이 낫다. 그래야 논리와 오류 처리가 섞여 프로그램을 이해하기 어려워지는 일이 없어진다. Try-Catch-Finally 문부터 작성할 것 try 블록에서 무슨 일이 생기든 catch 블록은 프로그램 상태를 일관성있게 유지해야 한다. 따라서 예외가 발생할 코드는 try-catch-finally 문으로 시작하는 편이 낫다. 강제로 예외를 일으키는 테스트 케이스를 작성한 후 테스트를 통과하게 코드를 작성하는 방법을 권장한다. 그러면 자연스럽게 try 블록의 트랜잭션 범위부터 구현하게 되므로 범위 내에서 트랜잭션 본질을 유지하기 쉬워진다. 미확인 예외를 사.. Language/Java 2022. 8. 12. [클린 코드] Ch.6 - 객체와 자료 구조 해당 서적을 참고하여 개인 공부용으로 정리한 글입니다. 자료 추상화 public class Point { public double x; public double y; } public interface Point { double getX(); double getY(); void setCartesian(double x, double y); double getR(); double getTheta(); void setPolar(double r, double theta); } 클래스는 구현을 외부로 노출하고 있고, 인터페이스는 구현을 완전히 숨긴다. 클래스의 변수를 private으로 바꾸고 getter/setter를 제공하더라도 구현이 감춰지지는 않는다. 구현을 감추려면 추상화가 필요하다. 추상 인터페이스를 제공.. Language/Java 2022. 8. 11. [클린 코드] Ch.5 - 형식 맞추기 해당 서적을 참고하여 개인 공부용으로 정리한 글입니다. 형식을 맞추는 목적 코드 형식은 의사소통의 일환이며 의사소통은 개발자의 일차적 의무다. 시간이 지나 기존 코드가 사라지더라도 처음 잡아놓은 구현 스타일과 가독성 수준은 유지보수 용이성과 확장성에 계속해서 영향을 미친다. 또한, 개발자의 스타일과 규율은 사라지지 않는다. 적절한 행 길이를 유지할 것 JUnit, Fitnesse, Tomcat 등 유명한 프로젝트의 파일 크기(라인 수)를 조사한 결과 200줄 대로도 커다란 시스템을 구축할 수 있다는 사실을 알 수 있었다. 일반적으로 큰 파일보다 작은 파일이 이해하기 쉽다. 신문 기사처럼 작성할 것 이름은 제목처럼 간단하면서도 설명이 가능하게 짓는다. 소스 파일 첫 부분은 첫 문단 처럼 고차원 개념과 알고.. Language/Java 2022. 8. 10. 이전 1 2 3 4 다음