본문 바로가기

clean code6

[Clean Code] 13장. 동시성 13장. 동시성 동시성은 왜 필요한가? 결합(coupling)을 없애는 전략이다. 싱글스레드는 what, when이 밀접하다. 이것을 분리한다. 구조적 개선뿐만이 아닌 응답 시간(response time), 출력량(throughput)을 위해서도 필요하다. 메일 정보 수집기 한명씩만 처리하는 시스템 동시성의 미신과 오해 동시성은 성능을 높여준다 동시성은 때로 성능을 높여준다. 즉 항상 높여주는것은 아니다. 여러 스레드가 프로세서를 공유할 수 있거나, 여러 프로세서에서 동시에 처리할 독립적 계산이 많은 경우에만 성능이 높아진다. (일반적인 상황은 아님) 동시성을 구현해도 설계는 변하지 않는다(X) 싱글 스레드와, 다중 스레드는 설계가 다르다. what,when을 분리하면 시스템 구조가 크게 달라진다. 웹 .. 2022. 2. 25.
[Clean Code] 12장. 창발성 12장. 창발성 (Emergence) 단순한 규칙 4가지로 우수한 설계가 나올 수 있게 할 수 있다 단순한 설계 규칙 4가지 모든 테스트를 실행한다 결합도가 높으면 테케를 작성하기가 어렵다. 결합도를 낮추려면 DI, 인터페이스, 추상화등을 이용 테스트가 가능한 시스템을 만들면 객체지향 방법론이 지향하는 목표를 저절로 달성할 수 있다. (SOLID) 리팩토링 TC를 모두 작성헀으면 코드를 점진적으로 리팩토링 할 수있다. 변화에 두렵지 않음. 시스템이 깨질까봐 두렵지 않음. side effect가 두렵지 않음. 중복을 없앤다 중복되는 로직이나 코드를 최대한 함수나 클래스로 빼자. TEMPLATE METHOD 패턴은 고차원 중복을 제거하는데 도움을 준다. 프로그래머 의도를 표현한다 코드는 개발자의 의도를 분명.. 2022. 2. 24.
[Clean Code] 11장. 시스템 11장. 시스템 목차 도시를 세운다면? 도시는 각 분야를 관리하는 팀이 있기에 돌아갈 수 있다 깨끗한 코드를 구현하면 낮은 추상화 수준에서 관심사를 분리하기 쉬워진다 이 장에서는? 높은 추상화수준, 즉 시스템 수준에서도 깨끗함을 유지하는 방법을 보여준다 시스템 제작과 시스템 사용을 분리하라 제작(construction)과 사용(use)은 완전히 다르다. 건축물이 만들어질때의 모습과, 완성되어서 사용자가 사용할때의 모습은 완전히 다르다 소프트웨어 시스템은 (애플리케이션 객체를 제작하고 의존성을 서로 ‘연결’하는) 준비 과정 과 (준비과정 이후에 이어지는) 런타임 로직을 분리 해야한다. 런타임 로직과 준비 과정이 뒤섞여있는 예시 public Service getService() { if (service ==.. 2022. 2. 24.
[Clean Code] 8장. 경계 Clean Code 8장 (경계) 이곳에서의 경계는 클라이언트 코드와 외부 코드의 경계인것 같다. 외부 코드 사용하기 java.util.Map을 보면 굉장히 많은 인터페이스가 있다. clear(), equals() 등등.. 이것을 여기저기 넘긴다고 했을때, clear()는 어디서 불리더라도 맵에 있는 모든 값들이 삭제되는 문제가 생긴다. 경계 인터페이스인 Map을 seonsor 안으로 숨긴다. Seonsor 클래스에서 프로그램에 필요한 인터페이스만 제공한다. public class Sensors { private Map sensors = new HashMap(); public Sensor getById(String id) { return (Sensor) sensors.get(id); } } 항상 위와같이.. 2022. 2. 22.
[Clean Code] 3장. 함수 Clean Code 3장 (함수) 작게 만들어라! 함수를 만드는 규칙은 작게 만드는것이다. 20줄도 길다. 이 책의 저자 켄트벡은 java swing의 함수들이 2~3줄 이었다고 한다. (이게 닌자코딩아닌가?) if/else, while문에 들어가는 블록은 한 줄이어야 한다. 함수를 잘 만드는 원칙 함수는 한가지를 해야한다. 그 한 가지를 잘 해야한다. 그 한가지만을 해야한다. 워렌버핏의 주식 투자원칙이 생각나는 말인데, 결론은 제발 한가지만 하자 인것으로... 함수 당 추상화 수준은 하나로! (이해 좀 더 필요) getHtml()은 추상화 수준이 높다. String pagePathName = PathParser.render(pagepath); 는 추상화 수준이 중간이다. .append('\n&#.. 2022. 1. 22.
[Clean Code] 3장. 함수 Clean Code 3장 (함수) 작게 만들어라! 함수를 만드는 규칙은 작게 만드는것이다. 20줄도 길다. 이 책의 저자 켄트벡은 java swing의 함수들이 2~3줄 이었다고 한다. (이게 닌자코딩아닌가?) if/else, while문에 들어가는 블록은 한 줄이어야 한다. 함수를 잘 만드는 원칙 함수는 한가지를 해야한다. 그 한 가지를 잘 해야한다. 그 한가지만을 해야한다. 워렌버핏의 주식 투자원칙이 생각나는 말인데, 결론은 제발 한가지만 하자 인것으로... 함수 당 추상화 수준은 하나로! (이해 좀 더 필요) getHtml()은 추상화 수준이 높다. String pagePathName = PathParser.render(pagepath); 는 추상화 수준이 중간이다. .append('\n&#.. 2022. 1. 22.
728x90