CS/CS Book (31) 썸네일형 리스트형 [Clean Code | 9장 단위 테스트 ] Day14 기억하고 싶은 부분 TDD 세 가지 법칙 실패하는 단위테스트 작성할 때까지 실제 코드를 작성하지 않는다. 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다. 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다. 실제 코드와 맞먹을 정도로 방대한 테스트 코드는 심각한 관리 문제를 유발하기로 한다. 깨끗한 코드 유지하기 개념당 assert 문 수를 최소로 줄여라 테스트 함수 하나는 개념 하나만 테스트하라 소감 깨끗한 코드 유지하기 부분이 납득되었다. 빠른 테스트를 위해 알아보기 어려운 상태의 테스트 코드를 작성하는 것은 나중에 바뀔 실제코드에 맞게 테스트 코드도 변경되어야 하므로 테스트 코드 변경을 어렵게 만들기에 그렇다 도서관 프로젝트에서 배포 전에 만든 단위 테스트가 얼.. [Clean Code | 7장 오류처리 ] Day10~12 기억하고 싶은 부분 뭔가 잘못될 가능성은 늘 존재한다. 뭔가 잘못되면 바로 잡을 책임은 바로 우리 프로그래머에게 있다. 어떤 면에서 try 블록은 트랜잭션과 비슷하다. try 블록에서 무슨 일이 생기든지 catch 블록은 프로그램 상태를 일관성 있게 유지해야 한다. null을 반환하는 습관 흔히 저지르는 바람에 오류를 유발하는 행위를 설명하면서 첫 번째 예시로 들음 null을 반환하는 코드는 일거리를 늘릴 뿐만 아니라 호출자에게 문제를 떠넘긴다. 누구하나라도 null 확인을 빼먹는다면 애플리케이션이 통제 불능에 빠질지도 모른다. null 확인이 너무 많아 문제. 메서드에서 null을 반환하고픈 유혹이 든다면 그 대신 예외를 던지거나 특수 사례 객체를 반환한다. 특수 사례 패턴 (SPECIAL CASE P.. [Clean Code | 6장 객체와 자료구조] Day09 기억하고 싶은 부분 “변수를 비공개로 정의하는 이유가 있다. 남들이 변수에 의존하지 않게 만들고 싶어서다.” private처리하는 목적으로 가져다 쓰는 입장에서는 내부가 어떻게 되어있든 혹은 특정 값에는 접근하지 못하게 하고 싶어서라고만 생각했었다. 같은 것을 의미하는 것일수도 있지만 조금은 다른 관점에서 private를 바라보았다는 생각이 든다. “변수를 private으로 선언하더라도 각 값마다 get함수와 set함수를 제공한다면 구현을 외부로 노출하는 셈이다” “인터페이스와 get/set 함수만으로는 추상화가 이뤄지지 않는다. 개발자는 객체가 포함하는 자료를 표현할 가장 좋은 방법을 심각하게 고민해야 한다. 아무 생각 없이 get/set 함수를 추가하는 방법이 가장 나쁘다.” private로 선언한 .. [Clean Code | 5장 형식 맞추기 ] Day08 기억하고 싶은 부분 코드가 어수선해 보인다면 독자들은 프로젝트의 다른 측면도 똑같이 무성의한 태도로 처리했으리라 생각할 것이다 신문 기사처럼 작성하라 개념은 빈 행으로 분리하라 서로 밀접한 개념은 세로로 가까이 둬야 한다 지역변수는 각 함수 맨 처음에 선언해야 한다 소감 형식이라 하면 고리 타분하다 생각들 수도 있는데 사례들을 보여주어서 확 와닿았다. 가끔 알고리즘 문제 다른 이의 풀이를 보면 줄 수를 줄이기 위한 컨셉이지만 재미로 한 줄에 다 적는 경우도 있다. 그렇게 되면 그 글은 대강 보다가 말게 되는데 그런 점에서 들여 쓰기 없이 한 예시가 책에서 나오고 들여쓰기 있을 때와 비교되어서 확실하게 와닿았다 한 줄을 80자로 억제하는 규칙의 이름을 알 수 있어 나름 나에게는 유익하였고 저자는 120자를.. [Clean Code] Day07 Practice mission1.js // BAD 더러운 코드 😣 // Hint❕ : 검색하기 쉬운 이름을 사용하세요. // blastOFF는 로켓 발사를 의미. 86400000은 하루의 밀리초 (milliseconds) 의미. // What the heck is 86400000 for? // setTimeout(blastOff, 86400000); // GOOD 😎 // 위 코드를 깨끗하게 다시 작성해 주세요. const dayTimeMilliseconds = 24 * 60 * 60 * 1000; milliseconds setTimeout(blastOff, dayTimeMilliseconds); // 어떻게 고쳤는지, 사례에서 무엇을 배워야 하는지 설명해주세요. /** * const dayTimeMilliseconds.. [Clean Code | 4장 주석] Day05, 06 기억에 남는 내용 코드는 결국 바뀐다. 하지만 주석은 코드가 바뀌는 속도만큼 변화를 빠르게 반영하지 못한다 그런점에서 주석을 가급적 안쓰는 것을 권장하는 모습이 인상 깊다 이전에 "프로그래머의 뇌" 스터디를 하며 다른 분과 주석에 관해 생각을 나누었을 때 그분도 주석을 가급적 안쓰는 것을 선호하셨었다 나의 경우 주석이 있는 편이 설명이 되어서 좋지 않나라는 생각과 주석이 없어도 될만큼의 깔끔한 코드를 모든 코드에서 만들어내기는 힘들었고 협업을 같이하게 될때 팀원이 그렇다고 한다면 그에 맞추기 위해 클린코드를 지향하느라 부담이 느껴지고 서비스보다 깔끔한 코드에만 신경쓰게 될거 같아서 당시에는 약간은 거부감이 들었었다. 이 파트를 읽고보니 주석을 지양하는 태도를 가지신 분들의 생각도 이해가 되었다 [Clean Code | 3장 함수] Day03, 04 ch03 함수 기억하고 싶은 부분 함수가 작을수록 더 좋다 좋다면서 5줄로 줄이는 것을 권장하는게 인상 깊다 중첩 구조가 생길만큼 함수가 커져서는 안 된다. 함수 들여쓰기 수준은 1단이나 2단을 넘어서면 안 된다. 우테코 코딩 룰이 함수당 15줄, 들여쓰기는 1단이라고 몇년 전에 들었었는데 그 방식이 떠올랐다. 함수는 한가지를 해야한다. 그 한 가지를 잘 해야 한다. 그 한 가지만을 해야 한다. 함수를 만드는 이유는 큰 개념을(함수 이름을) 다음 추상화 수준에서 여러 단계로 나눠 수행하기 위해서가 아니던가 “코드를 읽으면서 짐작했던 기능을 각 루틴이 그대로 수행한다면 깨끗한 코드라 불러도 되겠다” 함수 이름을 정할 때는 여러 단어가 쉽게 읽히는 명명법을 사용한다. 그런 다음, 여러 단어를 사용해 함수 기.. [Clean Code | 2장 의미있는 이름] Day02 기억하고 싶은 부분 " 변수나 함수 그리고 클래스 이름은 다음과 같은 굵직한 질문에 모두 답해야 한다 " "변수(혹은 함수, 클래스)의 존재 이유는? 수행 기능은? 사용 방법은? 따로 주석이 필요하다면 의도를 분명히 드러내지 못했다는 말이다" Before int d; // 경과 시간(단위: 날짜) After int elapsedTimeInDays; int daysSinceCreation; int daysSinceModeification; int fileAgeInDays; "발음하기 쉬운 이름은 중요하다. 프로그래밍은 사회 활동이기 때문이다." "전문가 프로그래머는 자신의 능력을 좋은 방향으로 상요해 남들이 이해하는 코드를 내놓는다" "의미를 해독할 책임이 독자에게 있는 논문 모델이 아니라 의도를 밝힐 책.. [Clean Code] Day 00 2~3년 전쯤 사놓고 먼지만 자연스럽게 쌓아두던 클린코드를 노마드코더에서 챌린지가 있는 김에 읽어보려한다. 마침내! 첫날은 구비한 책 인증이라 이렇게 글을 소박하게 남겨보게 되었다 사진의 흔들림이 현장감이 느껴져서 뭔가 뭔가 리얼하다 Code 컴퓨터 과학은 추상화의 예술이라는 말이 왜 그러한지 이 책을 읽으며 좀더 구체적으로 느끼게 해준다. 코드네임의 코드가 어떤 것에 다른 의미를 부여한 것처럼 여기서 코드도 사람이 의미를 부여한 것으로 이해되었다. 우리는 전기 신호가 안갔는지 갔는지에 따라 0, 1을 부여한다. 그 0,1을 가지고 특정 자리수로 끊어서 의미 부여를하고(bit, byte, etc..) 그 특정 자리수마다 있는 값을 가지고 역시 의미부여를 한다. (ascii code, unicode) 같은 100110110 이라는 값이더라도 어떻게 끊어서 처리하느냐에 따라 달라진다. "아버지가 방에 들어가신다." "아버지 가방에 들어가신다." 같은 느낌이다 도입부들은 정말 호기심을 자극하고 어렵지 않게 쓰여있지만 챕터 7부터 어려웠다. 이후로 .. 이전 1 2 3 4 다음