Clean code

B
SEEG,[object Object],Software Engineering,[object Object],Expert Group,[object Object],Clean Code,[object Object],김진 태,[object Object],Copyrightⓒ 2011 by SEEG, All Rights Reserved,[object Object]
SEEG is …,[object Object],2,[object Object],도메인,[object Object],전문기술,[object Object],요구공학 / 설계 기법,[object Object],패키지솔루션,[object Object],프로세스,[object Object],임베디드시스템,[object Object],엔터프라이즈 시스템,[object Object],재공학,[object Object],품질 보증,[object Object],SW 프로,[object Object],세스 개선,[object Object],컨설팅 영역,[object Object],SW 품질보증,[object Object],SW 개발 방법론,[object Object]
Clean Code 란?,[object Object],[object Object]
나는 우아하고 효율적인 코드를 좋아한다. 논리가 간단해야 버그가 숨어들지 못한다. 의존성을 최대한 줄여야 유지보수가 쉬워진다. 오류는 명백한 전략에 의거해 철저히 처리한다. 성능을 최적으로 유지해야 사람들이 원칙 없는 최적화로 코드를 망치려는 유혹에 빠지지 않는다. 클린 코드는 한 가지를 제대로 한다.
By 그래디부치(Object Oriented Analysis and Design with Application의 저자)
클린 코드는 단순하고 직접적이다. 클린 코드는 잘 쓴 문장처럼 읽힌다. 클린 코드는 결코 설계자의 의도를 숨기지 않는다. 오히려 명쾌한 추상화와 단순한 제어문으로 가득하다.3,[object Object]
Clean Code 란?,[object Object],[object Object]
클린코드는 작성자가 아닌 사람도 읽기 쉽고 고치기 쉽다.의미 있는 이름이다. 특정한 목적을 달성하는 방법은 하나만 제공한다. 의존성은 최소이며 각 의존성을 명확히 정의한다. API는 명확하며 최소로 줄였다. 때로는 정보 전부를 코드만으로 명확하게 드러내기 어려우므로 언어에 따라 문학적 표현이 필요하다.
By 존 제프리(ExtremeProgramming Installed의 저자)
중요한 순으로 나열하자면 간단한 코드는
중복이 없다
표현성이 뛰어나다
작게 추상화되어 있다4,[object Object]
5,[object Object],Clean Code 란?,[object Object],컴퓨터가 이해하는 코드는 어느 바보나 다 짤 수 있다. ,[object Object],훌륭한 프로그래머는 사람이 이해할 수 있는 코드를 짠다 ,[object Object],- 마틴파울러-,[object Object]
가독성이 뛰어나다.,[object Object],간단하고 작다.,[object Object],의존성을 최대한 줄였다.,[object Object],의도와 목적이 명확한 코드,[object Object],타인에 의해 변경이 용이 한 코드,[object Object],중복이 없는 코드,[object Object],개체(Class, Method)가 한가지 작업만 수행하는 코드,[object Object],6,[object Object],사람이 이해할 수 있는 코드란 무엇일까요?,[object Object],For people,[object Object],For people,[object Object],For people,[object Object],For people,[object Object],For people,[object Object],For people,[object Object],For people,[object Object]
7,[object Object],왜 사람이 이해하는 코드를 만들어야 하나요 ?,[object Object],사람,[object Object],SW 공장은 (         )이기 때문입니다,[object Object],행태,[object Object],일반적인 SW 개발 (         )때문입니다,[object Object]
8,[object Object],일반적인 SW 개발은 기존 코드에서 시작합니다,[object Object],Evolution,[object Object],Enhanced,[object Object],More complex,[object Object],Modified,[object Object],Drift away ,[object Object],from its original design,[object Object],Adapted,[object Object]
9,[object Object],기능만 추가할 뿐 코드 품질의 개선 작업은 미비합니다,[object Object],Product 1,[object Object],productization,[object Object],Product 2,[object Object],Product 3,[object Object],Base Code,[object Object],update,[object Object]
10,[object Object],개선되지 않은 SW는 늙게 되어 Dirty code 가 됩니다,[object Object],Dirty code는 SW Aging을 가속화,[object Object],The Spiral of Complex,[object Object]
11,[object Object],SW 노후화는 품질을 급격히 떨어뜨립니다,[object Object]
코드가 건강합니다.,[object Object],코드가 오래 갈 수 있습니다.,[object Object],조직의 경쟁력을 높입니다.,[object Object],개발 비용을 줄이고 생산성을 높입니다.,[object Object],12,[object Object],왜 사람이 이해하는 코드를 만들어야 하나요 ?,[object Object]
당신의코드가 이렇게 되게 하십시오 (1),[object Object],13,[object Object],의미 있는 이름,[object Object],착한 함수,[object Object],없는 게 나은 주석,[object Object]
이름 짓기가 가장 중요합니다.,[object Object],14,[object Object]
의도를 분명히 하라,[object Object],15,[object Object],주석이 필요 없는 코드를 작성하라,[object Object],//Login Client으로부터의 Login요청을 처리함.,[object Object],void CMessageProcFunc::Net_CLIENT_INFO(),[object Object],void CMessageProcFunc::processLoginRequestFromClient(),[object Object],public List<int[]> getList(){,[object Object],     List<int[]> list1 = new ArrayList<int []>();,[object Object],     for(int[] x : theList) {,[object Object],            if(x[0] == 4) {,[object Object],                   list1.add(x);,[object Object],            },[object Object],     },[object Object],      return list1;,[object Object],} ,[object Object],public List<Cell> getFlaggedCell(){,[object Object],     List<Cell> flaggedCells = new ArrayList<Cell>();,[object Object],     for(Cell cell : gameBoard){,[object Object],		if(cell.isFlagged()){,[object Object],flaggedCells.add(cell);,[object Object],                 },[object Object],      },[object Object],      return flaggedCell;,[object Object],},[object Object]
그릇된 정보를 피하라,[object Object],16,[object Object],길고 서로 흡사한 이름은 피하라,[object Object],public Class Vehicle {,[object Object],controllForEfficientHandlingOfString ();,[object Object],controllForEfficientStorageOfString ();,[object Object],},[object Object],public Class Y {,[object Object],    private Vehicle vehicle = new Vehicle();,[object Object],    public void method A(){,[object Object],vehicle.controllForEfficientStorageOfString();,[object Object],    },[object Object],},[object Object],IDE 자동완성기능에서 선택할 때 실수의 여지가 있음,[object Object]
그릇된 정보를 피하라,[object Object],17,[object Object],연속적인 숫자를 붙인 이름을 피하라,[object Object],public class Car{,[object Object],    private Tire tire1 = new Tire();,[object Object],    private Tire tire2 = new Tire();,[object Object],    private Tire tire3 = new Tire();,[object Object],    private Tire tire4 = new Tire();,[object Object],},[object Object],public class Car{,[object Object],    private Tire leftFrontTire = new Tire();,[object Object],    private Tire rightFrontTire = new Tire();,[object Object],    private Tire leftBackTire = new Tire();,[object Object],    private Tire rightBackTire = new Tire();,[object Object],},[object Object],public class Vehicle{,[object Object],	public moveControl(intmoveType){,[object Object],		if(moveType==0){,[object Object],		}else if(moveType==1){,[object Object],		} else if(moveType==2){,[object Object],		}else{,[object Object],		         throw Exception();,[object Object],		},[object Object],	},[object Object],},[object Object],public class Vehicle{,[object Object],	Const int GO_STRAIGHT = 0;,[object Object],	Const int TURN_LEFT = 1;,[object Object],	Const int TURN_RIGHT = 2;,[object Object],	Const int STOP = 3;,[object Object],	public controlMovement(intmoveType){,[object Object],		if(moveType== GO_STRAIGHT){,[object Object],		}else if(moveType== TURN_LEFT){,[object Object],		} else if(moveType== TURN_RIGHT){,[object Object],		}else{,[object Object],		         throw Exception();,[object Object],		},[object Object],	},[object Object],},[object Object]
문맥에 맞는 단어를 사용하라,[object Object],18,[object Object],이해하는데 시간을 소모하지 않기 위해 일관성 있는 단어를 사용하라,[object Object],public class Vehicle{,[object Object],	public doublegetFuelRemaining();,[object Object],	public double retrieveDegreeOfTireAbrasion();,[object Object],	public doublefetchCurrentSpeed();,[object Object],},[object Object],public class Vehicle{,[object Object],	public double getFuelRemaining();,[object Object],	public double getDegreeOfTireAbrasion();,[object Object],	public double getCurrentSpeed();,[object Object],},[object Object]
클래스 이름을 일관성 있게 작성하라,[object Object],19,[object Object],클래스이름은 명사또는 명사구로 작성하라,[object Object],                                                                       : 클래스는 행위(멤버함수)의 주체로서 명사 또는 명사구로 표현됨,[object Object]
함수 이름을 일관성 있게 작성하라,[object Object],20,[object Object],함수 이름은 동사 또는 동사구로 작성하라,[object Object],: 함수는 클래스가 행하는 행위로서 동사 또는 동사구로 표현됨,[object Object],SRP Test: 클래스가 스스로 멤버함수 한다.,[object Object]
단일책임의 원칙,[object Object],단일책임원칙(Single Responsibility Principle),[object Object],[object Object]
클래스나 모듈을 변경할 이유가 하나 뿐이어야 함
큰 클래스  작은 클래스 여럿작은 클래스와 협력해 시스템에 필요한 동작 수행SRP,[object Object],21,[object Object],____________가 스스로 ___________ 한다. ,[object Object],각 줄의 첫 번째 공백에 모듈명을 적습니다. 두 번째 공백에 모듈의 메소드/함수 중 하나를 적습니다. 모듈의 모든 함수/메소드마다 이를 수행합니다.,[object Object],각 줄을 소리 내어 읽습니다. 읽은 내용을 이해할 수 있습니까? 실제로 모듈의 함수/메소드가 의미하는 내용에 책임을 갖고 있어야 합니까?,[object Object]
SRP(Single-Responsibility Principle),[object Object],SRP Test 예,[object Object],Automobile 모듈(혹은 클래스)에 SRP 적용하기,[object Object],Automobile,[object Object],start();,[object Object],stop();,[object Object],changeTires(tires []);,[object Object],drive();,[object Object],wash();,[object Object],checkOil();,[object Object],getOil();,[object Object],SRP 준수        SRP 위반,[object Object],,[object Object],,[object Object],,[object Object],,[object Object],,[object Object],,[object Object],,[object Object]
착한 함수,[object Object],23,[object Object]
작게 만들어라,[object Object],24,[object Object],이상적인 블록(if문 While문)안의 내용은 한 줄,[object Object],블록 안에서 다른 함수를 호출하도록 작성,[object Object],public String renderPageWithSetupsAndTeardowns(PageDatapageData, booleanisSuite){,[object Object],If(isTestPage) {,[object Object],WikiPagetestPage = pageData.getWikiPage();,[object Object],StringBuffernewPageContent = new StringBuffer();,[object Object],includeSetupPages(testPage, newPageContent, isSuite);,[object Object],newPageContent.append(pageData.getContent());,[object Object], …..,[object Object],},[object Object],return pageData.getHTML();,[object Object],},[object Object],public String renderPageWithSetupsAndTeardowns(PageDatapageData, booleanisSuite){ ,[object Object],If(isTestPage) {,[object Object],includeSetupAndTeardownPages(pageData, isSuite);,[object Object],},[object Object],return pageData.getHTML();,[object Object],},[object Object]
1 of 35

Recommended

좋은코드작성하기 by
좋은코드작성하기좋은코드작성하기
좋은코드작성하기JD Yang
24.6K views56 slides
자바에서 null을 안전하게 다루는 방법 by
자바에서 null을 안전하게 다루는 방법자바에서 null을 안전하게 다루는 방법
자바에서 null을 안전하게 다루는 방법Sungchul Park
19.7K views38 slides
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호) by
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)Sang Don Kim
2.7K views79 slides
AI 연구자를 위한 클린코드 - GDG DevFest Seoul 2019 by
AI 연구자를 위한 클린코드 - GDG DevFest Seoul 2019AI 연구자를 위한 클린코드 - GDG DevFest Seoul 2019
AI 연구자를 위한 클린코드 - GDG DevFest Seoul 2019Kenneth Ceyer
3.1K views43 slides
Chapter7~9 ppt by
Chapter7~9 pptChapter7~9 ppt
Chapter7~9 pptInjae Lee
583 views39 slides
학교에서 배우지 않는 C by
학교에서 배우지 않는 C학교에서 배우지 않는 C
학교에서 배우지 않는 CHeesuk Kang
3.7K views92 slides

More Related Content

What's hot

TDD with JUnit 2 by
TDD with JUnit 2TDD with JUnit 2
TDD with JUnit 2Junyoung Lee
932 views23 slides
TDD.JUnit.조금더.알기 by
TDD.JUnit.조금더.알기TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기Wonchang Song
3.9K views71 slides
유지보수 가능한 개발 원칙 by
유지보수 가능한 개발 원칙유지보수 가능한 개발 원칙
유지보수 가능한 개발 원칙Hyosang Hong
29 views20 slides
카사 공개세미나1회 W.E.L.C. by
카사 공개세미나1회  W.E.L.C.카사 공개세미나1회  W.E.L.C.
카사 공개세미나1회 W.E.L.C.Ryan Park
1.3K views89 slides
2016 hack festival igrus by
2016 hack festival igrus2016 hack festival igrus
2016 hack festival igrusJinookawk
7.7K views82 slides
0.javascript기본(~3일차내) by
0.javascript기본(~3일차내)0.javascript기본(~3일차내)
0.javascript기본(~3일차내)Sung-hoon Ma
3.7K views153 slides

What's hot(20)

TDD.JUnit.조금더.알기 by Wonchang Song
TDD.JUnit.조금더.알기TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기
Wonchang Song3.9K views
유지보수 가능한 개발 원칙 by Hyosang Hong
유지보수 가능한 개발 원칙유지보수 가능한 개발 원칙
유지보수 가능한 개발 원칙
Hyosang Hong29 views
카사 공개세미나1회 W.E.L.C. by Ryan Park
카사 공개세미나1회  W.E.L.C.카사 공개세미나1회  W.E.L.C.
카사 공개세미나1회 W.E.L.C.
Ryan Park1.3K views
2016 hack festival igrus by Jinookawk
2016 hack festival igrus2016 hack festival igrus
2016 hack festival igrus
Jinookawk7.7K views
0.javascript기본(~3일차내) by Sung-hoon Ma
0.javascript기본(~3일차내)0.javascript기본(~3일차내)
0.javascript기본(~3일차내)
Sung-hoon Ma3.7K views
Refactoring Tutorial 1주차[ Refactoring 개요] by Bingu Shim
Refactoring  Tutorial 1주차[ Refactoring 개요]Refactoring  Tutorial 1주차[ Refactoring 개요]
Refactoring Tutorial 1주차[ Refactoring 개요]
Bingu Shim654 views
NDC11_김성익_슈퍼클래스 by Sungik Kim
NDC11_김성익_슈퍼클래스NDC11_김성익_슈퍼클래스
NDC11_김성익_슈퍼클래스
Sungik Kim1.6K views
[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기 by Chris Ohk
[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기
[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기
Chris Ohk11.8K views
파이썬 함수 이해하기 by Yong Joon Moon
파이썬 함수 이해하기 파이썬 함수 이해하기
파이썬 함수 이해하기
Yong Joon Moon4.8K views
간단하게 알아보는 좋은 코드 서영훈 by Seo YoungHoon
간단하게 알아보는 좋은 코드   서영훈간단하게 알아보는 좋은 코드   서영훈
간단하게 알아보는 좋은 코드 서영훈
Seo YoungHoon4.9K views
Api design for c++ 6장 by Ji Hun Kim
Api design for c++ 6장Api design for c++ 6장
Api design for c++ 6장
Ji Hun Kim2.6K views
주니어 개발자도 이해 할 수 있는 Go - Scope 편 by Darion Kim
주니어 개발자도 이해 할 수 있는 Go - Scope 편주니어 개발자도 이해 할 수 있는 Go - Scope 편
주니어 개발자도 이해 할 수 있는 Go - Scope 편
Darion Kim3K views
The roadtocodecraft by bbongcsu
The roadtocodecraftThe roadtocodecraft
The roadtocodecraft
bbongcsu639 views
2013 C++ Study For Students #1 by Chris Ohk
2013 C++ Study For Students #12013 C++ Study For Students #1
2013 C++ Study For Students #1
Chris Ohk4.5K views
1.Startup JavaScript - 프로그래밍 기초 by Circulus
1.Startup JavaScript - 프로그래밍 기초1.Startup JavaScript - 프로그래밍 기초
1.Startup JavaScript - 프로그래밍 기초
Circulus8.5K views
자바 테스트 자동화 by Sungchul Park
자바 테스트 자동화자바 테스트 자동화
자바 테스트 자동화
Sungchul Park7.2K views

Viewers also liked

Bnf seeg ws by
Bnf seeg wsBnf seeg ws
Bnf seeg wsbbongcsu
427 views4 slides
애자일 마인드셋 by
애자일 마인드셋애자일 마인드셋
애자일 마인드셋Jaehoon Oh
3.7K views35 slides
Refactoring tutorial by
Refactoring tutorialRefactoring tutorial
Refactoring tutorialBingu Shim
2K views101 slides
애자일 개발 프로세스를 이용한 고품질 소프트웨어 개발 by
애자일 개발 프로세스를 이용한 고품질 소프트웨어 개발애자일 개발 프로세스를 이용한 고품질 소프트웨어 개발
애자일 개발 프로세스를 이용한 고품질 소프트웨어 개발Jaehoon Oh
6.5K views61 slides
Bnf seeg by
Bnf seegBnf seeg
Bnf seegbbongcsu
434 views4 slides
Refactoring tutorial 1주차[refactoring 개요] by
Refactoring tutorial 1주차[refactoring 개요]Refactoring tutorial 1주차[refactoring 개요]
Refactoring tutorial 1주차[refactoring 개요]bbongcsu
2.1K views21 slides

Viewers also liked(9)

Bnf seeg ws by bbongcsu
Bnf seeg wsBnf seeg ws
Bnf seeg ws
bbongcsu427 views
애자일 마인드셋 by Jaehoon Oh
애자일 마인드셋애자일 마인드셋
애자일 마인드셋
Jaehoon Oh3.7K views
Refactoring tutorial by Bingu Shim
Refactoring tutorialRefactoring tutorial
Refactoring tutorial
Bingu Shim2K views
애자일 개발 프로세스를 이용한 고품질 소프트웨어 개발 by Jaehoon Oh
애자일 개발 프로세스를 이용한 고품질 소프트웨어 개발애자일 개발 프로세스를 이용한 고품질 소프트웨어 개발
애자일 개발 프로세스를 이용한 고품질 소프트웨어 개발
Jaehoon Oh6.5K views
Bnf seeg by bbongcsu
Bnf seegBnf seeg
Bnf seeg
bbongcsu434 views
Refactoring tutorial 1주차[refactoring 개요] by bbongcsu
Refactoring tutorial 1주차[refactoring 개요]Refactoring tutorial 1주차[refactoring 개요]
Refactoring tutorial 1주차[refactoring 개요]
bbongcsu2.1K views
인수테스트 주도 개발 by Jaehoon Oh
인수테스트 주도 개발인수테스트 주도 개발
인수테스트 주도 개발
Jaehoon Oh2.4K views
Tdd 왜 배우기 어려운가 by Jaehoon Oh
Tdd 왜 배우기 어려운가Tdd 왜 배우기 어려운가
Tdd 왜 배우기 어려운가
Jaehoon Oh2.9K views
Robot framework 을 이용한 기능 테스트 자동화 by Jaehoon Oh
Robot framework 을 이용한 기능 테스트 자동화Robot framework 을 이용한 기능 테스트 자동화
Robot framework 을 이용한 기능 테스트 자동화
Jaehoon Oh13.7K views

Similar to Clean code

[143] Modern C++ 무조건 써야 해? by
[143] Modern C++ 무조건 써야 해?[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?NAVER D2
18.6K views64 slides
읽기 좋은 코드가 좋은 코드다 Part one by
읽기 좋은 코드가 좋은 코드다   Part one읽기 좋은 코드가 좋은 코드다   Part one
읽기 좋은 코드가 좋은 코드다 Part oneJi Hun Kim
2K views101 slides
Working Effectively With Legacy Code - xp2005 by
Working Effectively With Legacy Code - xp2005Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Ryan Park
1.1K views72 slides
불어오는 변화의 바람, From c++98 to c++11, 14 by
불어오는 변화의 바람, From c++98 to c++11, 14 불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14 명신 김
160 views54 slides
About Visual C++ 10 by
About  Visual C++ 10About  Visual C++ 10
About Visual C++ 10흥배 최
1.5K views92 slides
Modern C++ 프로그래머를 위한 CPP11/14 핵심 by
Modern C++ 프로그래머를 위한 CPP11/14 핵심Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심흥배 최
46.7K views100 slides

Similar to Clean code(20)

[143] Modern C++ 무조건 써야 해? by NAVER D2
[143] Modern C++ 무조건 써야 해?[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?
NAVER D218.6K views
읽기 좋은 코드가 좋은 코드다 Part one by Ji Hun Kim
읽기 좋은 코드가 좋은 코드다   Part one읽기 좋은 코드가 좋은 코드다   Part one
읽기 좋은 코드가 좋은 코드다 Part one
Ji Hun Kim2K views
Working Effectively With Legacy Code - xp2005 by Ryan Park
Working Effectively With Legacy Code - xp2005Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005
Ryan Park1.1K views
불어오는 변화의 바람, From c++98 to c++11, 14 by 명신 김
불어오는 변화의 바람, From c++98 to c++11, 14 불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14
명신 김160 views
About Visual C++ 10 by 흥배 최
About  Visual C++ 10About  Visual C++ 10
About Visual C++ 10
흥배 최1.5K views
Modern C++ 프로그래머를 위한 CPP11/14 핵심 by 흥배 최
Modern C++ 프로그래머를 위한 CPP11/14 핵심Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심
흥배 최46.7K views
Effective unit testing ch3. 테스트더블 by YongEun Choi
Effective unit testing   ch3. 테스트더블Effective unit testing   ch3. 테스트더블
Effective unit testing ch3. 테스트더블
YongEun Choi1.7K views
소프트웨어 개선 그룹(Sig) 개발 원칙 by Hong Hyo Sang
소프트웨어 개선 그룹(Sig) 개발 원칙소프트웨어 개선 그룹(Sig) 개발 원칙
소프트웨어 개선 그룹(Sig) 개발 원칙
Hong Hyo Sang85 views
Java 유지보수 가능한 개발 원칙 by Hyosang Hong
Java 유지보수 가능한 개발 원칙Java 유지보수 가능한 개발 원칙
Java 유지보수 가능한 개발 원칙
Hyosang Hong26 views
Sonarqube 20160509 by 영석 조
Sonarqube 20160509Sonarqube 20160509
Sonarqube 20160509
영석 조3.8K views
Multi-thread : producer - consumer by Chang Yoon Oh
Multi-thread : producer - consumerMulti-thread : producer - consumer
Multi-thread : producer - consumer
Chang Yoon Oh2.2K views
Boost라이브러리의내부구조 20151111 서진택 by JinTaek Seo
Boost라이브러리의내부구조 20151111 서진택Boost라이브러리의내부구조 20151111 서진택
Boost라이브러리의내부구조 20151111 서진택
JinTaek Seo860 views
Angular2 가기전 Type script소개 by Dong Jun Kwon
 Angular2 가기전 Type script소개 Angular2 가기전 Type script소개
Angular2 가기전 Type script소개
Dong Jun Kwon2.1K views
[1A5]효율적인안드로이드앱개발 by NAVER D2
[1A5]효율적인안드로이드앱개발[1A5]효율적인안드로이드앱개발
[1A5]효율적인안드로이드앱개발
NAVER D219.2K views
Ai C#세미나 by Astin Choi
Ai C#세미나Ai C#세미나
Ai C#세미나
Astin Choi1.7K views
Design patterns by df
Design patternsDesign patterns
Design patterns
df342 views
C Language I by Suho Kwon
C Language IC Language I
C Language I
Suho Kwon199 views

Clean code

  • 1.
  • 2.
  • 3.
  • 4. 나는 우아하고 효율적인 코드를 좋아한다. 논리가 간단해야 버그가 숨어들지 못한다. 의존성을 최대한 줄여야 유지보수가 쉬워진다. 오류는 명백한 전략에 의거해 철저히 처리한다. 성능을 최적으로 유지해야 사람들이 원칙 없는 최적화로 코드를 망치려는 유혹에 빠지지 않는다. 클린 코드는 한 가지를 제대로 한다.
  • 5. By 그래디부치(Object Oriented Analysis and Design with Application의 저자)
  • 6.
  • 7.
  • 8. 클린코드는 작성자가 아닌 사람도 읽기 쉽고 고치기 쉽다.의미 있는 이름이다. 특정한 목적을 달성하는 방법은 하나만 제공한다. 의존성은 최소이며 각 의존성을 명확히 정의한다. API는 명확하며 최소로 줄였다. 때로는 정보 전부를 코드만으로 명확하게 드러내기 어려우므로 언어에 따라 문학적 표현이 필요하다.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31. 클래스나 모듈을 변경할 이유가 하나 뿐이어야 함
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.