본문 바로가기

독서에서 한걸음52

Clean Code .Part11 이번 장은 시스템 수준에서 깨끗함을 유지하는 방법이다. 소프트웨어 시스템은 준비 과정과 런타임 로직을 분리해야 한다. 애플리케이션에서 시작 단계라는 관심사를 분리해야 한다고 말한다. 시작 단계가 무슨 단계일까? - 애플리케이션의 객체 생성 단계 및 조립 단계 - 조립 이후 런타임 단계 이러한 단계로 나누어지지 않을까 싶다. 하지만 대다수 애플리케이션은 준비 과정 코드와 런타임 로직을 마구 뒤섞는다고 한다. 책에서 보여준 예시를 확인해보자. public Service getService() { if (service == null) service = new MyServiceImpl(...); return service; } 이를 초기화 지연 혹은 계산 지연이라는 기법이라고 한다. 아마 getService().. 2022. 8. 2.
Clean Code .Part10 깨끗한 클래스 코드의 표현력과 코드 블록을 깨끗하게 했다고 해도 더 높은 단계까지 신경 쓰지 않는 다면 클린 코드에 다가가기 힘들다. 객체지향 프로그래밍에서 클래스가 작성되는 시점을 중심으로 생각해보면 프로그램의 목적이 정해지고 목적을 달성하기 위한 책임을 분배할 때 생성된다. 즉 이 말은 클래스에는 책임을 가시적으로 보여주는 네이밍을 부여하고 그 내부에는 그 책임을 이행하기 위한 내용물들이 존재함을 뜻한다. 그리고 그 크기는 대개 작아야 한다고 한다. 객체지향 프로그래밍 및 설계의 원칙 중 SRP에 따르면 클래스나 모듈을 변경되어야 하는 이유는 단 하나뿐이어야 한다는 원칙이 있다. 이는 변경될 이유 즉 책임이 하나 여야만 한다는 의미를 가지고 있다. 하지만 클래스 설계자는 SRP를 가장 무시한 규칙 중.. 2022. 7. 30.
Clean Code .Part9 다시 마음을 잡았다... 이 번장은 단위 테스트에 대해 설명해준다. 테스트를 제대로 해본 경험이 없는 나는 오랜만에 흥분했다. TDD에 진심인 프로그래머들은 테스트에 대해 지식을 공유해줄 때 단위 테스트에 대한 설명부터 시작한다. 그리고 TDD 법칙 세 가지를 알려준다. 첫 번째는 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다. 두 번째는 컴파일은 실패하지 않으면서 ( 런타임 오류를 인지하는 듯하다.) 실행이 실패하는 정도로만 단위 테스트를 작성한다. 세 번째는 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다. 이 방법은 내가 생각하기에 개발자의 능력에 따라 실패할 수 있는 경우만을 따질 수 있을 것 같고, 테스트 코드의 양이 매우 방대해질 수 있을 것이다. 그럼 여기서 .. 2022. 7. 30.
Clean Code .Part7 보호되어 있는 글 입니다. 2022. 4. 21.
Clean Code .Part6 이번 장의 주제는 객체와 자료구조이다. 주제만으로 내용을 연상하기 매우 힘들다. 무엇을 설명하려고 하는 것일까? 시작은 다음과 같은 글로 시작한다. 변수를 private 하게 정의하는 데는 이유가 있다. 남들이 변수에 의존하지 않게 만들고 싶어서이다. 이를 통해 변수의 타입이나 구현을 맘대로 변경하고 싶어서이다. 그렇다면 어째서 수많은 프로그래머가 get/set 함수를 당연하게 public 하게 공개해 비공개 변수를 외부에 노출할까? 여기서는 당신은 객체를 자율적인 객체로 설계하고 있는가에 대한 질문을 던진다. 우리는 아무런 생각 없이 클래스를 설계할 때 private 키워드를 통해 객체의 상태를 감춘다. 여기서 우리는 왜 감춰야 하냐고 묻는다면 어떻게 대답할 것인지 궁금하다. 우리가 만약 public .. 2022. 4. 11.
Clean Code .Part5 이번장의 제목은 형식 맞추기로 협력에 관한 제목인 것이 느껴진다. 프로젝트에 대한 코드를 열었을 때 코드가 깔끔하고, 일관적이며, 꼼꼼하길 기대한다. 무성의하게 짜 놓은 듯 어수선해 보인다면 우리는 다른 코드도 무성의한 태도로 처리했으리라 생각한다. 이는 틀린 말이 아닌 것 같다. 좋은 코드에 대해 일가견이 있는 사람이 들어와 회사의 코드 형식을 보고 모듈에 대한 코드를 보았을 때 개발 팀에 대한 첫인상이 결정되는 것 같다. 코드 형식을 맞추려는 목적은 의사소통을 위해서다. 오늘 구현한 코드는 다음에 변경될 가능성이 매우 높다. 원래 코드가 사라질지라도 개발자의 스타일과 규율은 사라지지 않는다. 저자는 대형 프로젝트 7개 JUnit, FitNesse, testNG, tam, JDepend, Ant, To.. 2022. 4. 10.
Clean Code .Part4 이번 장은 주석이다. 주석에 대해서 깊게 생각해본 적이 없다. 내가 작성한 코드에 대해서 저자가 누구고 언제 수정했는지 이 코드는 무엇인지를 적는 것이 내가 아는 범위 내에서 활용이었다. 이 장의 시작은 다음과 같이 시작한다. 나쁜 코드에 주석을 달지 마라. 새로 짜라. - 브라이전 W. 커니핸, P. J. 플라우거 프로그래밍 언어는 수많은 세대를 거듭해 진화해 왔다. 가독성과 표현력이 발전하면서 인간이 받아들일 수 있는 코드의 형태로 말이다. 코드로 의도를 표현하지 못하여 우리는 주석을 통하여 부가설명을 덧 붙인다. 주석은 실패를 의미한다. 그 이유 중 하나로 프로그래머는 주석을 유지 보수하지 않는다. 이는 그릇된 정보를 전달할 가능성이 커진다. 사실 이러한 주석은 빈번하게 접했다. 그리고 있어야 할 .. 2022. 4. 9.
Clean Code .Part3 클린 코드의 목적은 독자가 더 좋은 개발자를 위해 자신들의 시행착오를 통해 배운 경험을 전달하려는 목적이다. 40년 이상 개발을 해온 저자가 겪은 경험이란 매우 귀한 자산이다. 그들이 오늘은 함수를 구현할 때 어떤 시행착오 끝에 최선이라고 내놓는 방법을 알려준다고 한다. 읽기 쉽고 이해하기 쉬운 함수를 구현하기 위해서 첫 번째로 함수를 만들 때 작게 만들어야 한다는 것이다. 그리고 저자는 2~4줄 안으로 함수를 끊어 만들어야 한다고 제시한다. 조건문, 반복문 등에 들어가는 블록은 한 줄이어야 한다는 의미라고 한다. 대부분 우리는 조건문 및 반복문 안에서 함수를 호출하는 경우가 많다. 만약 이 블록 내의 코드가 한 줄이라면 외부 블록의 함수가 작아지고, 블록 안에서 호출하는 함수 이름이 적절하다면 코드를 .. 2022. 4. 7.
Clean Code .Part 2 2장의 제목은 의미 있는 이름이다. 이 장에서는 프로그래머가 이름을 명명하는 여러 노하우를 전달해주고 있다. 코드를 읽는 독자는 개발자이다. 다른 사람의 코드를 읽는 개발자에게 의미를 쉽게 전달할 수 있는 여러 방법을 알려준다. 쉽게 받아들여지는 부분이 있는 반면 다소 어려운 부분도 존재한다. 쉽게 받아들여지는 부분이라 하면 다음과 같다. 의도를 밝히는 이름 특수한 의미를 가진 단어를 피하여 그릇된 정보를 전달하는 것을 피하라 불용어를 붙이거나 연속된 숫자를 덧붙여 명명하지 말 것 추상적인 개념 하나에 단어 하나를 선택해 고수하라. 같은 맥락이 아닌데 일관성이라는 틀에 박혀 동일한 단어를 사용하지 말자. 기술 개념에는 기술 이름이 가장 적합한 선택일 수 있다. 적절한 프로그래머 용어가 없다면 도메인 영역.. 2022. 4. 6.
도메인 모든 소프트웨어는 사용자 필요성을 충족시키기 위해 존재한다. 소프트웨어를 사용하는 사람들은 자신이 관심을 가지고 있는 특정한 분야를 해결하기 위해 소프트웨어를 사용한다. 이처럼 사용자가 프로그램을 사용하는 대상 분야를 도메인이라고 한다. 모델이란 대상을 단순화해서 표현한 것이다. 지식을 선택적으로 단순화하고 의식적으로 구조화한 형태다. 도메인과 모델의 정의를 연결하면 도메인 모델을 쉽게 정의할 수 있다. 도메인 모델이란 사용자가 프로그램을 사용하는 대상 영역에 관한 지식을 선택적으로 단순화하고 의식적으로 구조화한 형태다. 도메인 모델은 소프트웨어가 목적하는 영역 내의 개념과 개념 간의 관계, 다양한 규칙이나 제약 등을 주의 깊게 추상화한 것이다. 소프트웨어 도메인이 무엇이건 상관없이 그곳에는 항상 도메인.. 2022. 4. 1.