SlideShare uma empresa Scribd logo
1 de 21
CLEAN CODE
우리는 작명가다. 클래스, 메소드, 함수, 변수 이름을 매일매일 작명한다.
시인이 되지마라 함축성은 상상력을 자극하지만 코드는 의도를 분명하게 보여주는  설명문이여야 한다. int	d; // 경과 시간 VS intelapsedTimeInDays; intdaySinceCreation; intdaySinceModification; intfileAgeInDays;
EX) 	public	List<int[]>	getThem() { 	List<int[]> list1 = new ArrayList<int[]>(); 	for( int[] x : theList ) 		if( x[0] == 4 ) 			list1.add(x); 	return list1; } theList theList의 0번째 값 4는 list1	 ?
개선) 	public	List<int[]>	getFlaggedCells() 	{ 	List<int[]> flaggedCells = new ArrayList<int[]>(); 	for( int[] cell : gameBoard ) 		if( cell[STATUS_VALUE] == FLAGGED ) flaggedCells.add(cell); 	return flaggedCells; } cell[STATUS_VALUE] == FLAGGED는 잠정적인 중복의 우려가 있음. 멤버함수로 수정하는 것이 좋음.
HP? hypotenuse, health point, Hewlett-Packard어떤 의미? 일관성이 떨어지는 표기법 l, 1, O, 0 <- 좋은 폰트를 선택하라. 그릇된 정보를 제공하자 마라.
컴파일러, 인터프리터를 위한 작명은 피하라! EX) publicstatic void	copyChars( char a1[], char a2[] ) { 	for( int I = 0; I < a1.length; ++I ) 	{ 		a2[i] = a1[i]; 	} } 코드 본문을 보기 전까지 어떤 인자가 복사 원본이고 어떤 인자가 복사 대상인지 모름.
다음 의도를 구분할 수 있는가? ,[object Object]
customerInfovscustomer
accountDatavsaccount
theMessagevsmessage여러분 자신과 동료를 위해서 의미 있게 구분하라.
프로그래밍은 커뮤니케이션이다. 발음하기 쉬운 이름을 사용하라. Class DtaRcrd102 { private	Date		genymdhms; private	Date		modymdhms; private	final String	pszgint = “102”; /* … */ }
vs class Customer { private	Date		generationTimeStamp; private	Date		modificationTimeStamp; private	final String	recordId = “102”; /* … */ } 어떤 코드로 대화를 하는 것이 편할까?
정보가 많을 수록 검색양은 줄어든다. EX)MAX_CLASSES_PER_STUDENT vs 7 ? 변수나 상수의 가시성의 범위가 넓을 수록 이름의 길이도 길어지는 것이 좋다. 검색하기쉬운 이름을 사용하라!
인코딩은디코딩 규칙을 알아야 한다. 코드를 읽는 사람에게 추가적인 부담을 주지말자. 헝가리언 표기법 멤버 변수 접두어 인터페이스 클래스와 구현 클래스 를구분하기 위한 접두어를사용하지 말자.
명료함은 최고의 덕목이다. 남들이 쉽게 이해할 수 있는 코드를 작성하라.
클래스 이름은 명사, 명사구가 좋다. 	Good Ex) Customer, WikiPage, Account, AddressParser 	Bad Ex) Manager, Processor, Data, Info 동사는 사용하지 않는다.
메소드 이름은 동사, 동사구가 적합하다. EX) postPayment, deletePage, save 접근자, 변경자, 조건자는 접두어get, set, is를 붙인다. 중복 정의 생성자는 정적 팩토리메소드를 사용하고, 인수를 설명하는 이름을 사용한다. EX) Complex fulcrumPoint = complex.FromRealNumber(23.0);
기발한 이름을 피하라. 구어체나 속어를 사용하지 마라. 특정 그룹에서 통용되는 어휘는 의도가 명확하지 않다.
추상적인 개념과 단어가 1 : 1 대응이 되도록 한다. EX) controller, manager, driver 의도가 차이가 무엇인가? 말장난을 하지마라 때론 일관성보다는 맥락이 중요하다. 코드는논문 모델 < 잡지 모델이 좋다.
코드를 읽는 사람도 프로그래머이다. Domain영역보다 해법 영역의 이름을 사용하라. EX) AccountVisitor, JobQueue 적절한 해법 영역의 단어가 없다면 Domain영역에서 이름을 가져오라.

Mais conteúdo relacionado

Mais procurados

Reflect package 사용하기
Reflect package 사용하기Reflect package 사용하기
Reflect package 사용하기Yong Joon Moon
 
Binary Search
Binary SearchBinary Search
Binary Searchskku_npc
 
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩[아꿈사] The C++ Programming Language 11장 연산자 오버로딩
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩해강
 
객체지향 단어가 의미하는 것
객체지향 단어가 의미하는 것객체지향 단어가 의미하는 것
객체지향 단어가 의미하는 것jaypi Ko
 
C언어 들어가기
C언어 들어가기C언어 들어가기
C언어 들어가기jaypi Ko
 
Data Structures
Data StructuresData Structures
Data Structuresskku_npc
 

Mais procurados (7)

Reflect package 사용하기
Reflect package 사용하기Reflect package 사용하기
Reflect package 사용하기
 
7주차 스터디
7주차 스터디7주차 스터디
7주차 스터디
 
Binary Search
Binary SearchBinary Search
Binary Search
 
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩[아꿈사] The C++ Programming Language 11장 연산자 오버로딩
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩
 
객체지향 단어가 의미하는 것
객체지향 단어가 의미하는 것객체지향 단어가 의미하는 것
객체지향 단어가 의미하는 것
 
C언어 들어가기
C언어 들어가기C언어 들어가기
C언어 들어가기
 
Data Structures
Data StructuresData Structures
Data Structures
 

Destaque

Clean code(05)
Clean code(05)Clean code(05)
Clean code(05)규열 김
 
Clean code chapter11 - systems
Clean code   chapter11 - systemsClean code   chapter11 - systems
Clean code chapter11 - systemsitomcc
 
Clean code(04)
Clean code(04)Clean code(04)
Clean code(04)규열 김
 
Clean code(03)
Clean code(03)Clean code(03)
Clean code(03)규열 김
 
Clean code(01)
Clean code(01)Clean code(01)
Clean code(01)규열 김
 
Clean code chapter9
Clean code chapter9Clean code chapter9
Clean code chapter9ukjinkwoun
 
Clean code chapter1
Clean code chapter1Clean code chapter1
Clean code chapter1ukjinkwoun
 
Tobi 스프링 2장 php version
Tobi 스프링 2장   php versionTobi 스프링 2장   php version
Tobi 스프링 2장 php versionukjinkwoun
 
만들면서 배우는 Cocos2d x 멀티 플랫폼 게임 프로그래밍 10-11장
만들면서 배우는 Cocos2d x 멀티 플랫폼 게임 프로그래밍 10-11장만들면서 배우는 Cocos2d x 멀티 플랫폼 게임 프로그래밍 10-11장
만들면서 배우는 Cocos2d x 멀티 플랫폼 게임 프로그래밍 10-11장ukjinkwoun
 
깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)Jay Park
 

Destaque (14)

Clean code(05)
Clean code(05)Clean code(05)
Clean code(05)
 
Clean code chapter11 - systems
Clean code   chapter11 - systemsClean code   chapter11 - systems
Clean code chapter11 - systems
 
코드 Ch20
코드 Ch20코드 Ch20
코드 Ch20
 
Clean code(04)
Clean code(04)Clean code(04)
Clean code(04)
 
Clean code(03)
Clean code(03)Clean code(03)
Clean code(03)
 
Clean code(01)
Clean code(01)Clean code(01)
Clean code(01)
 
Clean code chapter9
Clean code chapter9Clean code chapter9
Clean code chapter9
 
Clean code chapter1
Clean code chapter1Clean code chapter1
Clean code chapter1
 
Tobi 스프링 2장 php version
Tobi 스프링 2장   php versionTobi 스프링 2장   php version
Tobi 스프링 2장 php version
 
만들면서 배우는 Cocos2d x 멀티 플랫폼 게임 프로그래밍 10-11장
만들면서 배우는 Cocos2d x 멀티 플랫폼 게임 프로그래밍 10-11장만들면서 배우는 Cocos2d x 멀티 플랫폼 게임 프로그래밍 10-11장
만들면서 배우는 Cocos2d x 멀티 플랫폼 게임 프로그래밍 10-11장
 
Clean code Chapter.2
Clean code Chapter.2Clean code Chapter.2
Clean code Chapter.2
 
Chean code chapter 1
Chean code chapter 1Chean code chapter 1
Chean code chapter 1
 
함수적 사고 2장
함수적 사고 2장함수적 사고 2장
함수적 사고 2장
 
깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)
 

Semelhante a Clean code(02)

2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여iamprogrammerofficial
 
Programming skills 1부
Programming skills 1부Programming skills 1부
Programming skills 1부JiHyung Lee
 
Clean code
Clean codeClean code
Clean codebbongcsu
 
파이썬 스터디 2주차
파이썬 스터디 2주차파이썬 스터디 2주차
파이썬 스터디 2주차Han Sung Kim
 
불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14 불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14 명신 김
 
읽기 좋은 코드가 좋은 코드다 Part one
읽기 좋은 코드가 좋은 코드다   Part one읽기 좋은 코드가 좋은 코드다   Part one
읽기 좋은 코드가 좋은 코드다 Part oneJi Hun Kim
 
공유 Jdk 7-2-project coin
공유 Jdk 7-2-project coin공유 Jdk 7-2-project coin
공유 Jdk 7-2-project coinknight1128
 
2014-15 Intermediate C++ Study #7
2014-15 Intermediate C++ Study #72014-15 Intermediate C++ Study #7
2014-15 Intermediate C++ Study #7Chris Ohk
 
간단하게 알아보는 좋은 코드 서영훈
간단하게 알아보는 좋은 코드   서영훈간단하게 알아보는 좋은 코드   서영훈
간단하게 알아보는 좋은 코드 서영훈Seo YoungHoon
 
객체지향 정리. Part1
객체지향 정리. Part1객체지향 정리. Part1
객체지향 정리. Part1kim HYUNG JIN
 
Effective c++ chapter7_8_9_dcshin
Effective c++ chapter7_8_9_dcshinEffective c++ chapter7_8_9_dcshin
Effective c++ chapter7_8_9_dcshinDong Chan Shin
 
R 프로그램의 이해와 활용 v1.1
R 프로그램의 이해와 활용 v1.1R 프로그램의 이해와 활용 v1.1
R 프로그램의 이해와 활용 v1.1happychallenge
 
자료구조 Project6
자료구조 Project6자료구조 Project6
자료구조 Project6KoChungWook
 
안드로이드기초
안드로이드기초안드로이드기초
안드로이드기초hylo926
 
Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Ryan Park
 
델파이 코딩 스타일과 아키텍처
델파이 코딩 스타일과 아키텍처델파이 코딩 스타일과 아키텍처
델파이 코딩 스타일과 아키텍처Devgear
 
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019min woog kim
 

Semelhante a Clean code(02) (20)

2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여
 
Programming skills 1부
Programming skills 1부Programming skills 1부
Programming skills 1부
 
Clean code
Clean codeClean code
Clean code
 
파이썬 스터디 2주차
파이썬 스터디 2주차파이썬 스터디 2주차
파이썬 스터디 2주차
 
강의자료3
강의자료3강의자료3
강의자료3
 
불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14 불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14
 
읽기 좋은 코드가 좋은 코드다 Part one
읽기 좋은 코드가 좋은 코드다   Part one읽기 좋은 코드가 좋은 코드다   Part one
읽기 좋은 코드가 좋은 코드다 Part one
 
강의자료 2
강의자료 2강의자료 2
강의자료 2
 
공유 Jdk 7-2-project coin
공유 Jdk 7-2-project coin공유 Jdk 7-2-project coin
공유 Jdk 7-2-project coin
 
2014-15 Intermediate C++ Study #7
2014-15 Intermediate C++ Study #72014-15 Intermediate C++ Study #7
2014-15 Intermediate C++ Study #7
 
간단하게 알아보는 좋은 코드 서영훈
간단하게 알아보는 좋은 코드   서영훈간단하게 알아보는 좋은 코드   서영훈
간단하게 알아보는 좋은 코드 서영훈
 
객체지향 정리. Part1
객체지향 정리. Part1객체지향 정리. Part1
객체지향 정리. Part1
 
Effective c++ chapter7_8_9_dcshin
Effective c++ chapter7_8_9_dcshinEffective c++ chapter7_8_9_dcshin
Effective c++ chapter7_8_9_dcshin
 
R 프로그램의 이해와 활용 v1.1
R 프로그램의 이해와 활용 v1.1R 프로그램의 이해와 활용 v1.1
R 프로그램의 이해와 활용 v1.1
 
자료구조 Project6
자료구조 Project6자료구조 Project6
자료구조 Project6
 
안드로이드기초
안드로이드기초안드로이드기초
안드로이드기초
 
Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005
 
델파이 코딩 스타일과 아키텍처
델파이 코딩 스타일과 아키텍처델파이 코딩 스타일과 아키텍처
델파이 코딩 스타일과 아키텍처
 
C review
C  reviewC  review
C review
 
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
 

Clean code(02)

  • 2. 우리는 작명가다. 클래스, 메소드, 함수, 변수 이름을 매일매일 작명한다.
  • 3. 시인이 되지마라 함축성은 상상력을 자극하지만 코드는 의도를 분명하게 보여주는 설명문이여야 한다. int d; // 경과 시간 VS intelapsedTimeInDays; intdaySinceCreation; intdaySinceModification; intfileAgeInDays;
  • 4. EX) public List<int[]> getThem() { List<int[]> list1 = new ArrayList<int[]>(); for( int[] x : theList ) if( x[0] == 4 ) list1.add(x); return list1; } theList theList의 0번째 값 4는 list1 ?
  • 5. 개선) public List<int[]> getFlaggedCells() { List<int[]> flaggedCells = new ArrayList<int[]>(); for( int[] cell : gameBoard ) if( cell[STATUS_VALUE] == FLAGGED ) flaggedCells.add(cell); return flaggedCells; } cell[STATUS_VALUE] == FLAGGED는 잠정적인 중복의 우려가 있음. 멤버함수로 수정하는 것이 좋음.
  • 6. HP? hypotenuse, health point, Hewlett-Packard어떤 의미? 일관성이 떨어지는 표기법 l, 1, O, 0 <- 좋은 폰트를 선택하라. 그릇된 정보를 제공하자 마라.
  • 7. 컴파일러, 인터프리터를 위한 작명은 피하라! EX) publicstatic void copyChars( char a1[], char a2[] ) { for( int I = 0; I < a1.length; ++I ) { a2[i] = a1[i]; } } 코드 본문을 보기 전까지 어떤 인자가 복사 원본이고 어떤 인자가 복사 대상인지 모름.
  • 8.
  • 11. theMessagevsmessage여러분 자신과 동료를 위해서 의미 있게 구분하라.
  • 12. 프로그래밍은 커뮤니케이션이다. 발음하기 쉬운 이름을 사용하라. Class DtaRcrd102 { private Date genymdhms; private Date modymdhms; private final String pszgint = “102”; /* … */ }
  • 13. vs class Customer { private Date generationTimeStamp; private Date modificationTimeStamp; private final String recordId = “102”; /* … */ } 어떤 코드로 대화를 하는 것이 편할까?
  • 14. 정보가 많을 수록 검색양은 줄어든다. EX)MAX_CLASSES_PER_STUDENT vs 7 ? 변수나 상수의 가시성의 범위가 넓을 수록 이름의 길이도 길어지는 것이 좋다. 검색하기쉬운 이름을 사용하라!
  • 15. 인코딩은디코딩 규칙을 알아야 한다. 코드를 읽는 사람에게 추가적인 부담을 주지말자. 헝가리언 표기법 멤버 변수 접두어 인터페이스 클래스와 구현 클래스 를구분하기 위한 접두어를사용하지 말자.
  • 16. 명료함은 최고의 덕목이다. 남들이 쉽게 이해할 수 있는 코드를 작성하라.
  • 17. 클래스 이름은 명사, 명사구가 좋다. Good Ex) Customer, WikiPage, Account, AddressParser Bad Ex) Manager, Processor, Data, Info 동사는 사용하지 않는다.
  • 18. 메소드 이름은 동사, 동사구가 적합하다. EX) postPayment, deletePage, save 접근자, 변경자, 조건자는 접두어get, set, is를 붙인다. 중복 정의 생성자는 정적 팩토리메소드를 사용하고, 인수를 설명하는 이름을 사용한다. EX) Complex fulcrumPoint = complex.FromRealNumber(23.0);
  • 19. 기발한 이름을 피하라. 구어체나 속어를 사용하지 마라. 특정 그룹에서 통용되는 어휘는 의도가 명확하지 않다.
  • 20. 추상적인 개념과 단어가 1 : 1 대응이 되도록 한다. EX) controller, manager, driver 의도가 차이가 무엇인가? 말장난을 하지마라 때론 일관성보다는 맥락이 중요하다. 코드는논문 모델 < 잡지 모델이 좋다.
  • 21. 코드를 읽는 사람도 프로그래머이다. Domain영역보다 해법 영역의 이름을 사용하라. EX) AccountVisitor, JobQueue 적절한 해법 영역의 단어가 없다면 Domain영역에서 이름을 가져오라.
  • 22. 이름이 충분한 의미를 가지지 못한다면, 클래스, 함수, 이름 공간에 넣어 맥락을 부여한다. 모든 방법이 실패하면, 접두어를 붙인다. 과유불급이다. 불필요한 맥락을 없애라!
  • 23. 좋은 이름을 선택하려면 설명하는 능력이 있어야 하고 문화적인 배경이 같아야 한다. 지속적으로이름을 개선하라! 개발자의 반대, 관리자의 질책을 두려워 마라. 코드를 개선하려는 노력을 중단해서는 안 된다.
  • 24.