기술독서

    [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] 6장 객체와 자료 구조

    변수를 비공개private로 정의하는 이유가 있다. 남들이 변수에 의존하기 않게 만들고 싶어서다. 충동이든 변덕이든, 변수 타입이나 구현을 맘대로 바꾸고 싶어서다. 그렇다면 어째서 프로그래머들이 get함수와 set함수를 당연하게 공개해 비공개 변수를 외부에 노출할까? 🤔 자료 추상화 변수를 private으로 선언 하더라도 각 값마다 조회 함수와 설정 함수를 제공한다면 구현을 외부로 노출하는 셈이다. 구현을 감추려면 추상화가 필요하다. 형식 논리에 치유쳐 조회 함수와 설정 함수로 변수를 다룬다고 클래스가 되지는 않는다. 추상 인터페이스를 제공해 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 진정한 의미의 클래스다. 자료를 세세하게 공개하기보다는 추상적인 개념으로 표현하는 편이 좋다. 인터페이스나..

    [Clean Code] 5장 형식 맞추기

    프로그래머라면 형식을 깔끔하게 맞춰 코드를 짜야 한다. 코드 형식을 맞추기 위한 간단한 규칙을 정하고 그 규칙을 착실히 따라야 한다. 팀으로 일한다면 팀이 합의해 규칙을 정하고 모두가 그 규칙을 따라야 한다. 필요하다면 규칙을 자동으로 적용하는 도구를 활용한다. 형식을 맞추는 목적 코드 형식은 의사소통의 일환이다. 의사 소통은 개발자의 일차적인 의무다. 처음 잡아놓은 구현 스타일과 가독성 수준은 유지보수 용이성과 확정성에 계속 영향성을 미친다. 적절한 행 길이를 유지하라 200줄 정도인 파일로도 큰 프로젝트들을 구축할 수 있다. 일반적으로 큰 파일보다 작은 파일이 이해하기 쉽다. 신문 기사처럼 작성하라 이름은 간단하면서도 설명이 가능하게 짓는다. 이름만 보고도 올바른 모듈을 살펴보고 있는지 아닌지를 판단..

    [Clean Code] 4장 주석

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

    [Clean Code] 3장 함수

    Intro 어떤 프로그램이든 가장 기본적인 단위는 함수다. 이 장은 함수를 잘 만드는 법을 소개한다. 길이가 길고, 중복된 코드에, 괴상한 문자열에, 낯설고 모호한 자료 유형과 API로 이루어진 함수는 이해하기 어렵다. 그렇다면 읽기 쉽고 이해하기 쉽고 의도를 분명히 표현하는 함수를 어떻게 구현할 수 있을까? 함수에 어떤 속성을 부여해야 처음 읽는 사람이 프로그램 내부를 직관적으로 파악할 수 있는가? 작게 만들어라 함수를 만들 때 최대한 '작게!' 만들어야 한다. public static String renderPageWithAndTeardowns( PageData pageData, boolean isSuite ) throws Exception { boolean isTestPage = pa..