Cleancode 7

17장. 냄새와 휴리스틱 (2)

https://rachelslab.tistory.com/83 17장. 냄새와 휴리스틱 (1) # 휴리스틱(heuristics) 사전적 의미 : "경험적인, 스스로 발견하게 하는" 복잡한 문제는 복잡하게 생각하지말고, 단순하게 생각하는 것부터 시작하자. Bottom-Up 방식처럼 단순한 논리적 사고과정을 rachelslab.tistory.com 26. 정확하라 코드에서 무언가를 결정할 때는 항상 "확신"이 있어야한다. 이번에 한 번 성공했다고, 이제 됐어! 라고 생각하는 것은 금지해야할 행동이다 ❌ (매일 이런 충동을 느낀다...) 결정을 내리는 타당한 근거아 있어야 하며, 예외 처리를 할 방안도 가지고 있어야 한다. 코드에서의 모호함 또는 부정확함은 언제나 제거 대상이라는 사실을 명심하자 28. 조건을 ..

17장. 냄새와 휴리스틱 (1)

# 휴리스틱(heuristics) 사전적 의미 : "경험적인, 스스로 발견하게 하는" 복잡한 문제는 복잡하게 생각하지말고, 단순하게 생각하는 것부터 시작하자. Bottom-Up 방식처럼 단순한 논리적 사고과정을 거쳐서 의사결정을 하고, 경험치를 바탕으로 이를 점차 빌드업 시키는 방법이다. "제한된 합리성’이란 다양한 의사결정 상황에서 인간의 인지적인 한계로 인해 발생하는 의사결정 문제를 인지적 한계 안에서 다룰 수 있는 범위로 축소시키고, 간단해진 과업의 수행에 한해 규범적 규칙을 이용한다는 것을 의미한다." - 위키백과 - 본문에서 강조하고자 했던 내용들을 총정리하는 목적으로 작성해보고자 한다. ## 주석(Comment) 1. 부적절한정보 주석의 역할은 코드와 설계에 있어 기술적인 설명을 부연하는 수단..

9장. 단위테스트

실제 코드를 치기 전부터 테스트 코드를 치라구? 대체 왜? Why 우리는 왜 테스트 코드를 작성해야 할까? 근본적인 이유에 대해 생각해 볼 필요가 있을 것이다. 그 이유는 '검증이 된 코드인가?'에 대한 명확한 답을 제시할 수 있기 때문이다. 테스트 코드가 없으면, 우리는 이 코드가 제대로 돌아가는 지 검증할 수 있는 방법이 없다. 시스템의 주요한 부분을 수정했을 때, 이 수정한 부분이 다른 소스에 영향이 있는지 없는지를 판단할 기준이 없는 것이다. 이는 결함률을 높이는 원인이 된다. 그래서 테스트 주도 개발(TDD) 개념이 오늘날 성립된 것이다. (많은 선배들의 경험 끝에...) TDD란 : Test Driven Development(테스트 주도 개발)의 약자로, 매우 짧은 개발 사이클을 반복하는 소프..

6장. 객체와 자료구조

6-1. 자료 추상화 추상 인터페이스를 사용하여 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 진정한 의미의 클래스다. 자료를 세세하게 공개하는 것보다는 추상적으로 개념을 표현하는게 더 좋다. Best public interface Vehicle { double getPercentFuelRemaining(); } 6-2. 자료/객체 비대칭 - 객체 : 추상화 뒤로 자료를 숨긴 채 자료를 다루는 함수만 공개 - 자료구조 : 자료를 그대로 공개하며 별다른 함수 제공x 서로 상반되는 특징을 가지고 있다. 객체는 기존 함수를 훼손하지 않으면서 새로운 클래스를 추가하기 쉬우나, 새로운 함수를 추가하기 어렵다. (모든 클래스를 고쳐야 하기 때문) 자료구조는 기존 자료구조를 훼손하지 않으면서 새로운 함수를..

5장. 형식 맞추기

5-1. 형식을 맞추는 목적 코드 형식은 언제나 중요하다 “오늘 구현한 코드의 가독성은 앞으로 바뀔 코드의 품질에 지대한 영향을 미친다.” 코드가 너무 많이 바뀌어서 이력을 찾아보기 힘들어지더라도, 처음 작성시 잡아둔 구현 스타일과 가독성 수준은 유지보수의 용이성, 확장성에 영향을 미칠 수 밖에 없다. 원활한 소통을 장려하기 위한 형식은 무엇일까? 5-2. 적절한 행 길이를 유지하라. 신문기사 처럼 위→ 아래로 시선의 흐름대로 코드가 읽힐 수 있도록 작성하기 개념은 빈 행으로 구분해라. → 덩어리화 세로 밀집도 → 연관성 수직거리 소스의 조각들이 어디에 있는지 거슬러 올라가는 작업은 많은 시간과 노력을 필요로 한다. 서로 밀접한 개념은 세로로 가까이둔다. 변수선언 : 사용하는 위치에 최대한 가깝게 한다...

3장. 함수

1. 작게 만들어라. if/else 문 또는 while 문에 들어가는 블록은 한 줄 이면 충분하다. - 대부분 block 에서 함수 호출 문을 사용한다. - 중첩구조가 생길 만틈 함수 구조가 복잡해서는 안된다. 2. 한 가지만 해라! 익히 들었던 말이다. 함수는 오로지 “한 가지의 기능”만 한다. 그 한 가지만을 잘하는 도록 만드는 것의 우리의 목표이다. 🤔 여러 조건문이 필요한 경우에는 어떻게 하나요? - 단순 다른 표현이 아니더라도, 의미있는 이름으로 지은 다른 함수를 호출/추출할 수 있다면, 그 함수는 여러 작업을 하는 셈이다. 3. 위에서 아래로 읽을 수 있도록 Top-Down 방식 한 가지 의미를 갖는 함수를 만들어야 함수를 위에서 아래로 읽어 내려갈 수 있다 4. Switch문 switch문은..

2장. 의미 있는 이름

2-1. 의도를 분명히 밝혀라. 코드의 함축성 주석이 필요하다면 변수/함수/클래스명이 그 의도를 분명히 드러내지 못했다는 것이다. 아래 예시를 보자 [before] const success = (position: {= coords: { longitude: number; latitude: number }; }) => { setPos({ ...pos, longitude: position.coords.longitude, latitude: position.coords.latitude, }); }; 코드상으로는 문제가 없어 보인다. success -> 성공인 건 알겠는데, 그래서 뭐가 성공했을 때인데? [after] const findUserLocation = (position: { coords: { longit..