Transcript
Page 1: Simple Review of Clean Code : 책 클린코드 간단 리뷰

Clean Code

Page 2: Simple Review of Clean Code : 책 클린코드 간단 리뷰

코드 품질 척도WTFs/MINUTE

Page 3: Simple Review of Clean Code : 책 클린코드 간단 리뷰

–Jo

“Let There Be Code!”

Page 4: Simple Review of Clean Code : 책 클린코드 간단 리뷰

나쁜 코드

Page 5: Simple Review of Clean Code : 책 클린코드 간단 리뷰

나쁜 코드에 단 주석이 회사 보너스 지급도 안해 , 보너스는 그냥 잊어버려 ! 그리고 이 회사 오지마 . 난 이미 떠날 준비가 되어있어 . 이 프로젝트 버그 겁나많아ㅠ . 넌 진짜로 오래버티지 못할거야 . 그럼 행운을 !

Page 6: Simple Review of Clean Code : 책 클린코드 간단 리뷰

– 르블랑의 법칙

“ 나중은 결코 오지 않는다 .”

Page 7: Simple Review of Clean Code : 책 클린코드 간단 리뷰

태도

Page 8: Simple Review of Clean Code : 책 클린코드 간단 리뷰

– 딜버트

“ 나쁜코드에 대한 책임은 전적으로 프로그래머에게 있답니다 .”

Page 9: Simple Review of Clean Code : 책 클린코드 간단 리뷰

원초적 난제

Page 10: Simple Review of Clean Code : 책 클린코드 간단 리뷰

모든 프로그래머가 기한을 맞추려면 나쁜 코드를 양산할 수밖에 없다고 느낀다 .

Page 11: Simple Review of Clean Code : 책 클린코드 간단 리뷰

BUT

Page 12: Simple Review of Clean Code : 책 클린코드 간단 리뷰

진짜 전문가는 나쁜 코드를 양산하면 기한을 맞추지 못한다는 것을 안다 .

Page 13: Simple Review of Clean Code : 책 클린코드 간단 리뷰

깨끗한 코드를 작성하는 프로그래머는 빈 캔버스를 우아한 작품으로 바꿔가는 화가와 같다 .

Page 14: Simple Review of Clean Code : 책 클린코드 간단 리뷰

보이스카우트 규칙

Page 15: Simple Review of Clean Code : 책 클린코드 간단 리뷰

“ 캠프장은 처음 왔을 때보다 더 깨끗하게 해놓고 떠나라 .”

Page 16: Simple Review of Clean Code : 책 클린코드 간단 리뷰

여러가지 설계원칙• SRP(The Single Responsibility Principle)• OCP(The Open Closed Principle)• LSP(The Leskov Substitution Principle)• DIP(The Dependency Inversion Principle)• ISP(The Interface Segregation Principle)

Page 17: Simple Review of Clean Code : 책 클린코드 간단 리뷰

SRP

• 클래스에는 한 가지 , 단 한 가지 변경 이유만 존재해야 한다

Page 18: Simple Review of Clean Code : 책 클린코드 간단 리뷰

OCP

• 클래스는 확장에 열려 있어야 하며 변경에 닫혀 있어야 한다

Page 19: Simple Review of Clean Code : 책 클린코드 간단 리뷰

LSP

• 상속받은 클래스는 기초 클래스를 대체할 수 있어야 한다 .

Page 20: Simple Review of Clean Code : 책 클린코드 간단 리뷰

DIP

• 추상화에 의존해야 하며 , 구체화에 의존하면 안된다 .

Page 21: Simple Review of Clean Code : 책 클린코드 간단 리뷰

ISP

• 클라이언트에 밀접하게 작게 쪼개진 인터페이스를 유지한다 .

Page 22: Simple Review of Clean Code : 책 클린코드 간단 리뷰

의미 있는 이름

Page 23: Simple Review of Clean Code : 책 클린코드 간단 리뷰

의도를 분명히 밝혀라• int d; // 경과 시간 ( 단위 : 날짜 ) - 값과 단위가 필요• int elapsedTimeInDays;

Page 24: Simple Review of Clean Code : 책 클린코드 간단 리뷰

그릇된 정보를 피하라• XYZControllerForEfficientHandlingOfStrings• XYZControllerForEfficientStorageOfStrings

겁나 비슷함

Page 25: Simple Review of Clean Code : 책 클린코드 간단 리뷰

규칙 s

• 의미 있게 구분하라 getActiveAccount();getActiveAccounts();

getActiveAccountInfo();

Page 26: Simple Review of Clean Code : 책 클린코드 간단 리뷰

규칙 s

• 발음하기 쉬운 이름을 사용하라

genymdhms (generate date, year, month, day, hour, minute, second)

Page 27: Simple Review of Clean Code : 책 클린코드 간단 리뷰

규칙 s• 검색하기 쉬운 이름을 사용하라• 인코딩을 피하라• 기억력 자랑 바람직하지 않은것• 한 개념에 한 단어를 사용하라 ( 일관성 있는 어휘 )• 기발한 이름은 피하라• 말장난을 하지마라• 의미 있는 맥락을 추가하라• 불필요한 맥락을 없애라

Page 28: Simple Review of Clean Code : 책 클린코드 간단 리뷰

함수

Page 29: Simple Review of Clean Code : 책 클린코드 간단 리뷰

함수를 만드는 규칙 1

작게

Page 30: Simple Review of Clean Code : 책 클린코드 간단 리뷰

함수를 만드는 규칙 2

더 작게

Page 31: Simple Review of Clean Code : 책 클린코드 간단 리뷰

한가지만 해라

Page 32: Simple Review of Clean Code : 책 클린코드 간단 리뷰

– 지난 몇십년 동안 프로그래머들에게 주어진 충고

“ 함수는 한 가지를 해야 한다 . 그 한 가지를 잘 해야 한다 . 그 한 가지만을 해야 한다 .”

Page 33: Simple Review of Clean Code : 책 클린코드 간단 리뷰

함수당 추상화 수준은 하나로 !

Page 34: Simple Review of Clean Code : 책 클린코드 간단 리뷰

위에서 아래로 코드 읽기내려가기 규칙

Page 35: Simple Review of Clean Code : 책 클린코드 간단 리뷰

서술적인 이름을 사용하라

Page 36: Simple Review of Clean Code : 책 클린코드 간단 리뷰

– 워드

“ 코드를 읽으면서 짐작했던 기능을 각 루틴이 그대로 수행한다면 깨끗한 코드라 불러도 되겠다 .”

Page 37: Simple Review of Clean Code : 책 클린코드 간단 리뷰

함수 인수

Page 38: Simple Review of Clean Code : 책 클린코드 간단 리뷰

이상적인 인수 개수는 0 개 , 다음은 1 개 다음은 2 개다 .3 항은 피하는 편이 좋다 .

4 개 이상은 특별한 이유가 필요하다 . 특별한 이유가 있어도 사용하면 안된다 .

Page 39: Simple Review of Clean Code : 책 클린코드 간단 리뷰

Boolean Parameter is ugly.

Page 40: Simple Review of Clean Code : 책 클린코드 간단 리뷰

명령과 조회를 분리하라

Page 41: Simple Review of Clean Code : 책 클린코드 간단 리뷰

함수는 뭔가를 수행하거나 뭔가에 답하거나 둘 중 하나만 해야한다 .

객체 상태를 변경하거나 아니면 객체 정보를 반환하거나…

Page 42: Simple Review of Clean Code : 책 클린코드 간단 리뷰

주석

Page 43: Simple Review of Clean Code : 책 클린코드 간단 리뷰

– 브라이언 W. 커니핸 , P.J. 플라우커

“ 나쁜 코드에 주석을 달지 마라 . 새로 짜라 .”

Page 44: Simple Review of Clean Code : 책 클린코드 간단 리뷰

주석은 필요악이다 .

Page 45: Simple Review of Clean Code : 책 클린코드 간단 리뷰

주석은 나쁜 코드를 보완하지 못한다 .

Page 46: Simple Review of Clean Code : 책 클린코드 간단 리뷰

코드로 의도를 표현하라 .

Page 47: Simple Review of Clean Code : 책 클린코드 간단 리뷰

좋은 주석

Page 48: Simple Review of Clean Code : 책 클린코드 간단 리뷰

정말로 좋은 주석은 , 주석을 달지 않을 방법을 찾아낸 주석이라는 사실을 !

Page 49: Simple Review of Clean Code : 책 클린코드 간단 리뷰

좋은 주석 s• 법적인 주석• 의도를 설명하는 주석• 정보를 제공하는 주석• 의미를 명료하게 밝히는 주석• 결과를 경고하는 주석• TODO 주석• 중요성을 강조하는 주석

Page 50: Simple Review of Clean Code : 책 클린코드 간단 리뷰

나쁜 주석

Page 51: Simple Review of Clean Code : 책 클린코드 간단 리뷰

프로그래머가 주절거리는 독백…

Page 52: Simple Review of Clean Code : 책 클린코드 간단 리뷰

나쁜 주석 s• 주절거리는 주석• 같은 이야기를 중복하는 주석• 오해할 여지가 있는 주석• 의무적으로 다는 주석• 이력을 기록하는 주석• 있으나 마나 한 주석• 함수나 변수로 표현할 수 있다면 주석을 달지 마라• 닫는 괄호에 다는 주석• 위치를 표시하는 주석 ///////// HERE ///////////

Page 53: Simple Review of Clean Code : 책 클린코드 간단 리뷰

객체와 자료구조

Page 54: Simple Review of Clean Code : 책 클린코드 간단 리뷰

절차적인 코드는 기존 자료구조를 변경하지 않으면서 새 함수를 추가하기 쉽다 . 반면 , 객체 지향 코드는 기존 함수를 변경하지 않으면서 새 클래스를 추가하기 쉽다 .

Page 55: Simple Review of Clean Code : 책 클린코드 간단 리뷰

디미터 법칙

모듈은 자신이 조작하는 객체의 속사정을 몰라야 한다 .

Page 56: Simple Review of Clean Code : 책 클린코드 간단 리뷰

TDD

Page 57: Simple Review of Clean Code : 책 클린코드 간단 리뷰

One Assert Per One Test

Page 58: Simple Review of Clean Code : 책 클린코드 간단 리뷰

TDD 법칙 3 가지• 첫째 법칙 : 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다 .• 둘째 법칙 : 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다 .• 셋째 법칙 : 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다 .

Page 59: Simple Review of Clean Code : 책 클린코드 간단 리뷰

깨끗한 테스트 코드• 테스트 코드는 실제 코드 못지 않게 중요하다 .• 테스트는 유연성 , 유지 보수성 , 재사용성을 제공한다 .

Page 60: Simple Review of Clean Code : 책 클린코드 간단 리뷰

깨끗한 테스트 코드• 깨끗한 테스트 코드를 만들기 위해서는 3 가지가 필요하다 .

• 가독성 , 가독성 , 가독성

Page 61: Simple Review of Clean Code : 책 클린코드 간단 리뷰

테스트당 개념 하나• given-when-then• precondition-invocation-assertion

Page 62: Simple Review of Clean Code : 책 클린코드 간단 리뷰

테스트 함수당 Assertion 하나

• One Assertion Per One Test Function

Page 63: Simple Review of Clean Code : 책 클린코드 간단 리뷰

F.I.R.S.T• Fast-빠르게• Independent- 독립적으로• Repeatable- 반복가능하게• Self-Validating- 자가검증하는• Timely- 적시에

Page 64: Simple Review of Clean Code : 책 클린코드 간단 리뷰

클래스

Page 65: Simple Review of Clean Code : 책 클린코드 간단 리뷰

클래스는 작아야 한다 .

Page 66: Simple Review of Clean Code : 책 클린코드 간단 리뷰

클래스 이름에 Processor, Manager, Super 등과 같이 모호한 단어가 있다면 클래스에다 여러 책임을 떠안겼다는 증거다 .

Page 67: Simple Review of Clean Code : 책 클린코드 간단 리뷰

단일 책임 원칙은 클래스나 모듈을 변경할 이유가 하나뿐이어야 한다는 원칙이다 .

Page 68: Simple Review of Clean Code : 책 클린코드 간단 리뷰

클래스는 인스턴스 변수 수가 작아야 한다 .

Page 69: Simple Review of Clean Code : 책 클린코드 간단 리뷰

응집도가 높다 - 클래스에 속한 메서드와 변수가 서로 의존하며 논리적인 단위로 묶인다 .

Page 70: Simple Review of Clean Code : 책 클린코드 간단 리뷰

DIP - 상세한 구현이 아니라 추상화에 의존해야 한다

Page 71: Simple Review of Clean Code : 책 클린코드 간단 리뷰

수십여 년 동안 쌓아온 경험에서 얻은 교훈이라면 , 프로그래밍은 과학보다 공예에 가깝다는 사실이다 . 깨끗한 코드를 짜려면 먼저 지저분한 코드를 짠 뒤에 정리해야 한다는 의미다 .

– 밥아저씨

Page 72: Simple Review of Clean Code : 책 클린코드 간단 리뷰

END

Page 73: Simple Review of Clean Code : 책 클린코드 간단 리뷰

Reference

• Clean Code