CS/클린코드(cleancode) 12

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

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

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

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

14장. 점진적인 개선 - 자바스크립트 클린코드

점진적인 개선(Progressive Improvement) 출발은 나쁘지 않았다. 그러나 소스가 방대해지면서, 확장성이 부족했던 모듈을 어떻게 개선해 나갈지에 대해 정리해보자. 처음에 코드를 작성할 때는 나름의 함수 그리고 변수명을 고려하여, 작성을 한다. 그러나 완성된 코드를 보면, 지저분하기 짝이 없었던 경험을 누구나 다 해봤으리라 짐작한다. # 프로그래밍은 과학보다는 “공예”에 가깝다. 처음 부터 완벽한 작품을 만들기란 어려운 것이다. 거듭한 리팩토링 끝에 그나마 깨끗한 코드를 만들 수 있다. 우선 수정 작업에 들어가기 전, 1차 초안을 보며 자신을 되돌아본다. 내가 대충 짜서 방치해둔 코드를 다른 사람이 보게 되면 어떨지 항상 생각하면서 작성하는 습관을 들이자 # 점진적으로 개선하다 개선 이라는 ..

13장. 동시성(Concurrency) - 자바스크립트 클린코드

동시성(Concurrency) 콜백지옥은 프론트엔드 개발자라면, 한 번쯤은 겪어봤을 것이다. 중첩의 중첩의 중첩을 만들어내는 콜백은 최대한 지양해야 한다. 콜백이 대체 무엇이길래? 다른 함수의 인자(argument)로 넘겨주는 함수이다. 함수와 함수를 연결해준다고 생각하면 이해하기 쉽다. [동기 vs 비동기] 자바스크립트는 단일(single) 스레드 프로그래밍 언어이다. 동기 = 싱글 스레드 = 순차적 실행 모두 동일한 의미이다. 싱글 스레드는 하나의 코드가 실행되어 끝난 시점에 다음 코드 시작 지점이 연결된 형태이다. 단일 스레드는 선행 작업이 완료될 때까지, 다른 일을 수행하지 못하고 기다린다. -> 블로킹 발생 (콜 스택 멈춤 상태) 한 번에 하나의 콜 스택을 가진다. // 동기적으로 3초 마다 배..

12장. 창발성(emergence)

켄트 백이 제시한 4가지 규칙을 모두 시행하면 소프트웨어 설계 품질이 높아진다. (중요도 순) 1. 모든 테스트를 실행한다. 2. 중복을 없앤다. 3. 프로그래머의 의도를 표현한다. 4. 클래스와 메서드 수를 최소로 줄인다. 단계1. 모든 테스트를 실행하라 설계는 의도한 대로 돌아가는 시스템을 내놓아야 한다. 모든 테스트 케이스를 항상 통과하는 시스템을 '테스트가 가능한 시스템'이라고 부른다. 테스트 케이스를 만들고 반복해서 돌리면 저절로 낮은 결합도, 높은 응집력을 추구하는 객체 지향 방법론을 자기도 모르게 실천하고 있게 될 것이다. 단계2. 리팩토링 새롭게 추가하는 코드를 깔끔하게 정리 후, 테스트 케이스를 돌려본다. 테스트 케이스만 있다면, 우리는 결함도를 걱정하지 않아도 된다. 단계3. 중복 없애..

9장. 단위테스트

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

10장. 클래스 - 자바스크립트 클린코드

프론트엔드에서 클래스란 모던 자바스크립트, ES6부터 객체 지향 프로그래밍을 위해 고안된 개념으로 프로토타입을 기반으로 한다. 클래스에 대해 간단하게 정리 해보자면, - 클래스틑 class 키워드를 사용하여 정의한다. - 클래스에서 정의할 수 있는 메서드는 constructor(생성자), 프로토타입 메서드, 정적 메서드가 있다. - 클래스는 인스턴스를 생성하기 위한 생성자 함수이며, new 연산자와 함께 호출된다. - 인스턴스는 클래스로부터 생성되는 객체이다. - constructor : 인스턴스를 생성하고 초기화하는 메서드이다. (최초로 정의하는 곳이라고 이해하자) - 프로토타입 메서드 : 인스턴스의 프로토타입에 존재하는 메서드. 인스턴스에서 상속받아 사용할 수 있다. - 정적 메서드 : 인스턴스 생성..

7장. 오류 처리 - 자바스크립트 클린코드

예외를 사용하지 않을 경우 함수를 호출한 즉시 오류를 확인해야 하는 번거로움이 있다. 따라서, 오류가 발생하면 예외를 던지도록 코드를 짜는 것이 더 좋다. 그래야 논리와 오류 처리 코드가 섞이지 않는다. Try - Catch - Finally try 블록에서 무슨 일이 생기든이 catch 블록은 프로그램 상태를 일관성 있게 유지해야 한다. 예외가 발생하는 코드를 짤 때는 웬만하면 try-catch-finally문으로 작성하는 것이 좋다. 사용 예 try { nonExistentFunction(); } catch (error) { console.error(error); // expected output: ReferenceError: nonExistentFunction is not defined // Not..

6장. 객체와 자료구조

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

5장. 형식 맞추기

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