Clean Code

    [Clean Code] 11장 시스템

    [Clean Code] 11장 시스템

    Clean Code 11장 시스템 "복잡성은 죽음이다. 개발자에게서 생기를 앗아가며, 제품을 계획하고 제작하고 테스트하기 어렵게 만든다." - 레이 오지(Ray Ozzie), 마이크로소프트 CTO 도시를 세운다면? 도시는 수도 관리 팀, 전력 관리 팀, 교통 관리 팀, 치안 관리 팀, 건축물 관리 팀 등 각 분야를 관리하는 팀이 있고, 적절한 추상화와 모듈화 때문에 잘 돌아 간다. 소프트웨어 팀도 도시처럼 구성한다. 깨끗한 코드를 구현하면 낮은 추상화 수준에서 관심사를 분리하기 쉬워진다. 이 장에서는 높은 추상화 수준, 즉 시스템 수준에서도 깨끗함을 유지하는 방법을 살펴본다. 시스템 제작과 시스템 사용을 분리하라 제작construction은 사용use 아주 다르다. 소프트웨어 시스템은(애플리케이션 객체를..

    [Clean Code] 10장 클래스

    [Clean Code] 10장 클래스

    Clean Code 10장 클래스 코드의 표현력과 그 코드로 이루어진 함수에 아무리 신경 쓸지라도 좀 더 높은 차원 높은 단계까지 신경 쓰지 않으면 깨끗한 코드를 얻기는 어렵다 클래스 체계 클래스를 정의하는 표준 자바 관례에 따른 순서 정적 공개 상수 정적 비공개 변수 비공개 인스턴스 변수 공개 변수 (필요한 경우는 거의 없음) 공개 함수 비공개 함수 (자신을 호출하는 공개 함수 직후) 추상화 단계가 순차적으로 내려간다. 캡슐화 변수와 유틸리티 함수는 가능한 공개하지 않는 편이 낫지만 반드시 숨겨야 한다는 법칙도 없다. 때때로 변수나 유틸리티 함수를 protected로 선언해 테스트 코드에 접근을 허용하기도 한다. 하지만 그전에 비공개 상태를 유지할 온갖 방법을 강구해야 한다. 캡슐화를 풀어주는 결정은 ..

    [Clean Code] 9장 단위 테스트

    [Clean Code] 9장 단위 테스트

    애자일과 TDD 덕택에 단위 테스트를 자동화하는 프로그래머들이 점점 더 늘어나는 추세다. 하지만 우리 분야에 테스트를 추가하려고 서두르는 와중에 많은 프로그래머들이 제대로 된 테스트 케이스를 작성해야 한다는 좀 더 미묘한 사실을 놓쳐버렸다. TDD 법칙 세가지 첫째 법칙 : 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다. 둘째 법칙 : 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다. 셋째 법칙 : 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다. 깨끗한 테스트 코드 유지하기 테스트 코드는 실제 코드와 못지 않게 중요하다. 테스트 코드는 사고와 설계와 주의가 필요하다. 실제 코드 못지 않게 깨끗하게 짜야 한다. 테스트는 유연성, 유지보수성, 재사..

    [Clean Code] 8장 경계

    [Clean Code] 8장 경계

    이 장에서는 소프트웨어 경계를 깔끔하게 처리하는 기법과 기교를 살펴본다. 외부 코드 사용하기 패키지 제공자나 프레임워크 제공자는 적용성을 최대한 넓히려 애쓰는 반면, 사용자는 자신의 요구에 집중하는 인터페이스를 바란다. 이런 긴장으로 인해 시스템 경계에서 문제가 생길 소지가 많다. // Sensor라는 객체를 담는 Map을 만들 때 Map seonsors = new HashMap(); // Sensor 객체가 필요한 코드를 가져올 때 Sensor s = (Sensor)sensors.get(sensorId); 위 코드는 한 번이 아니라 여러 차례 나온다. 즉, Map이 반환하는 Object를 올바른 유형으로 변환할 책임은 Map을 사용하는 클라이언트에 있다. 그리고 깨끗한 코드라 보기도 어렵고 의도도 분명..

    [Clean Code] 7장 오류처리

    오류 처리는 프로그램에 반드시 필요한 요소 중 하나일 뿐이다. 간단히 말해, 뭔가 잘못될 가능성은 늘 존재한다. 깨끗한 코드와 오류 처리는 확실히 연관성이 있다. 상당수 코드 기반은 전적으로 오류 처리 코드에 좌우된다. 이 장에서는 깨끗하고 튼튼한 코드에 한 걸음 더 다가가는 단계로 우아하고 고상하게 오류를 처리하는 기법과 고려 사항 몇 가지를 소개한다. 오류 코드보다 예외를 사용하라 오류 코드를 사용하면 함수를 호출한 즉시 오류를 확인해야하기 때문에 호출자 코드가 복잡해진다. 그렇기 때문에 오류가 발생하면 예외를 던지는 것이 좋다. public void sendShutDown() { try { tryToShutDown(); }catch (DeviceShutDownError e) { logger.log(..

    [Clean Code] 4장 주석

    "나쁜 코드에 주석을 달지 마라. 새로 짜라." - 브라이언 W. 커니핸, P.J. 플라우거 코드를 깔끔하게 정리하고 표현력을 강화하는 방향으로, 그래서 애초에 주석이 필요 없는 방향으로 에너지를 쏟겠다. 코드만이 자기가 하는 일을 진실되게 말한다. 코드만이 정확한 정보를 제공하는 유일한 출처다. 우리는 주석을 가능한 줄이도록 꾸준히 노력해야 한다. 주석은 나쁜 코드를 보완하지 못한다 코드에 주석을 추가하는 일반적인 이유는 코드 품질이 나쁘기 때문이다. 지저분한 모듈이라는 사실을 자각했을때 "주석을 달아야겠다" 가 아니라 "코드를 정리해야 한다" 다. 자신이 저지른 난장판을 주석으로 설명하려 애쓰는 대신에 그 난장판을 깨끗이 치우는데 시간을 보내라 ! 코드로 의도를 표현하라! 많은 경우 주석으로 달려는 ..