Technique/Readable Code
-
11. 테스트와 가독성Technique/Readable Code 2015. 12. 11. 12:54
■ 읽거나 유지보수하기 쉽게 테스트를 만들어라 테스트 코드가 읽기 쉬우면, 사용자는 실제 코드가 어떻게 동작하는지 그만큼 더 이해하기 쉽다.다른 프로그래머가 수정하거나 새로운 테스트를 더하는 걸 쉽게 느낄 수 있게 테스트 코드는 읽기 쉬어야 한다.- 코드를 수정하는 일이 두려워진다. 아니 우리는 이 코드에 손대고 싶지 않아. 테스트 케이스를 모두 변경하는 일은 너무나 끔찍하다- 새로운 코드를 작성하면 그에 따르는 새로운 테스트를 자겅하지 않는다. 시간이 흐름이 지나면서 더 낮은 비율의 코드가 테스트되며, 따라서 코드에 대한 확신이 줄어들 수 밖에 없다.자신의 코드를 사용하는 사람이 테스트코드를 편하게 느끼도록 만들어야 한다. 코드를 사용자는 새로운 코드가 왜 현재 테스트에서실패하는지 쉽게 진단할 수 있어..
-
10. 코드 분량 줄이기Technique/Readable Code 2015. 12. 11. 12:53
프로그래머가 배워야 하는 가장 중요한 기술은 언제 코딩을 해야 하는지 아는 것이다.가장 읽기 쉬운 코드는 아무것도 없는 코드다 ■그 기능을 구현하려고 애쓰지 마라 - 그럴 필요 없다. 프로그래머는 어떤 기능을 구현하는 데 필요한 노력을 과소평가하는 경향도 있다. 조잡한 프로토타입을 구현하는 시간을 지나치게낙관적으로 예측하고 그 코드를 유지보수하고, 문서를 만들고, 코드베이스에 새로운 무게를 더하는데 얼마나 많은 시간이 필요한지 자각하지 못한다는 이야기이다. ■ 요구사항에 질문을 던지고 질문을 잘게 나누어 분석하라 프로그램이 반드시 빠르게 동작하고, 100% 정확하고, 모든 종류의 가능한 입력을 처리해야 하는 것은 아니다. 주어진 요구사항을 정말로 잘 분석하면, 적은 코드로 구현할 수 있는 간단한문제를 정..
-
9. 생각을 코드로 만들기Technique/Readable Code 2015. 12. 11. 12:06
할머니에게 설명할 수 없다면 당신은 제대로 이해한 게 아닙니다. - 아인슈타인 복잡한 생각을 다른 사람에게 설명할 때 중요하지 않은 자세한 내용 때문에 듣는 사람을 혼동시키는 일이 종종 있다.자신의 생각을 지식이 부족한 사람에게 전달하는 기술은 매우 소중하다.설명할 내용을 걸러서 요지만 뽑아내는 능력이 요구된다.내용을 잘 이해하게 도울 뿐만 아니라 설명하는 사람 자신도 그 내용을 다시 한 번 명확하게 이해하게 도와준다.작성한 코드를 다른 사람에게 보여줄 때도 같은 기술이 필요하다.코드역시 쉬운말로 작성 되어야 한다- 코드가 할 일을 옆의 동료에게 말하듯이 평범한 영어로 묘사하라 - 이 설명에 들어가는 핵심적인 단어와 문구를 포착 하라- 설명과 부합하는 코드를 작성하라 ■ 논리를 명확하게 설명하기■ 라이..
-
8. 한번에 하나씩Technique/Readable Code 2015. 12. 11. 11:55
한 번에 여러가지 일을 수행하는 코드는 읽기 어렵다. 코드 블록 하나에 새로운 객체를 초기화하고, 데이터를 청소하고, 입력을 분석하고 비지니스 논리를 적용하는 일을 한꺼번에 수행하는 경우도 있다. 이런일이 모두 한자리에 모여 있다면 각각의 작업이 별도로 시작되었다가 완료되는 경우보다 더욱더 이해하기 어렵다.다시 말해서 한 번에 하나의 작업만 수행하게 코드를 구성 해야한다. ■ 함수는 오직 한 가지 작업만 수행해야한다.이러한 말은 항상 함수 수준에 머물러야 하는 것은 아니다. 물론 커다란 함수를 여러 작은 함수로 나누는 것은 좋다.커다란 함수안에 있는 코드를 재조직하여 그 안에 여러 개의 독자적인 논리적 영역이 있는 것 처럼 만들 수 있다. - 코드가 수행하는 모든 작업을 나열한다. - 이러한 작업을 분리..
-
7.상관없는 하위 문제 추출Technique/Readable Code 2015. 12. 11. 11:06
우리는 문제를 해결 하기 위하여 커다란 문제를 작은 문제들로 쪼갠 다음 각각의 문제에 대한 해결책을 구하고 다시 하나의 해결책으로 맞추는 작업을 한다.이러한 원리를 코드에 적용하면 코드는 더 튿튿해지며 가독성도 좋아진다. 큰 흐름에서 작은 하위 문제를 적극적으로 바견해서 추출하라!■ 주어진 함수나 코드 블록을 보고 스스로에게 질문하라 "상위 수준에서 본 이 코드의 목적은 무엇인가?"■ 코드의 모든 줄에 질문을 던져라 "이 코드는 직접적으로 목적을 위해서 존재하는가? 혹은 목적을 위해서 필요하긴 하지만 목적 자체와 직접적으로 상관없는 하위 문제를 해결 하는가?"■ 만약 상당히 원래의 목적과 직접적으로 관련되지 않은 하위문제를 해결하는 코드 분량이 많으면, 이를 추출해서 별도의 함수로 만든다. sql 데이터..
-
6. 변수와 가독성Technique/Readable Code 2015. 12. 10. 22:24
변수를 엉터리로 사용하면 코드를 이해하기 어려워 지는 커다란 이유는 아래와 같다 ■ 변수의 수가 많을수록 기억하고 다루기 더 어려워진다.■ 변수의 범위가 넒어질수록 기억하고 다루는 시간이 더 길어진다■ 변수의 값이 자주 바뀔수록 현재값을 기억하고 다루기가 더 어려워진다. 이러한 문제를 해결하기 위하여... 변수 제거하기가독성에 도움이 되지 않는 변수를 제거하는 방법들■ 불필요한 임시변수 12now = datetime.datetime.now();root_message.last_view_time = now;cs위 코드에서 now변수는 꼭 필요한가? 그렇지 않다. 이유는- 복잡한 표현을 잘게 나누는 것이 아니다- 명확성에 도움이 되지 않는다 datetime.datetime.now는 그 자체로도 명확하다- 한 ..
-
5. 거대판 표현을 잘게 쪼개기Technique/Readable Code 2015. 12. 10. 12:39
코드의 표현이 커지면 커질수록 이해하기 더 어렵다 ■ 거대한 표현을 더 소화하기 쉬운 여러 조각으로 나눈다 설명변수- 작은 하위 포현을 담을 추가변수를 만드는것 - 추가변수 = 설명변수12345678if(list.split(':')[0].strip() == "root"): .... username = line.split(':')[0].stript()if(username == "root"):... Colored by Color Scriptercs 위 코드와 같이 한번에 모든걸 다 하려고 하면 읽기 불편함이 많다.가장 기본적인 방법중 하나이다 요약변수- 의미를 쉽게 파악할수 있어 별도의 설명을 요구하지 않는 표현이라고 해도 새로운 변수로 담아두는 방법은 유용할 수 있다. - 코다란 코드의 덩어리를 짧은 이름..
-
4. 흐름제어Technique/Readable Code 2015. 12. 10. 10:34
조건, 루프, 흐름을 통제하는 선언문이 코드에 없으면 코드를 매우 읽기 편할 것 이다.이와 같은 분기문, 점프문은 어려운 대상이며, 코드를 복잡하게 만드는 원인이다. ■ 흐름을 제어하는 조건과 루프 그리고 여타 요소를 최대한 자연스럽게 만들도록 노력하라. 코드를 읽다가 다시 되돌아가서 코드를 읽지 않아돋 되게끔 만들어야 한다. ■ 조건문에서의 인수의 순서 a > b b > a 에서 값을 어디에 두는가 왼쪽 : 값이 더 유동적인 질문을 받는 표현 오른 쪽 : 더 고정적인 값으로 비교 대상으로 사용 되는 표현 ex ) length >= 10 10