SlideShare a Scribd company logo
1 of 10
Clean Code


3장 함수

               2012 01. 28
                   원종필
• 의도를 분명히 표현하는
  함수를 어떻게 만들까??

• 함수를 어떻게 만들어야
  처음 읽는 사람이 내부를
  직관적으로 파악할 수 있을까??
작게 만들어라
• 함수가 중첩구조가 생길만큼 커져서는 안된다
• 들여쓰기 수준은 1,2단을 넘어서는 안된다
• 읽기 쉽고 이해하기 쉬워진다
한 가지만 해라
• 함수는 한 가지만 해야 한다
• 한 가지만 하는지 판단법
   • 의미있는 이름으로 다른 함수를 추출할 수 있다면
     여러가지 작업을 하는 것이다
   • 한가지 작업만 하는 함수는 자연스럽게 섹션으로
     나누기 어렵다
함수당 추상화 수준은 하나로
• 함수내 모든 문장이 동일한 추상화 수준에 있어야 한다
• 근본 개념과 세부사항을 뒤섞기 시작하면
  함수에 세부사항을 점점 더 많이 추가하게 된다


Switch 문
• 정말로 switch문을 써야 하는 것인지
  추상 팩토리(Abstract Factory)가 필요한 것은 아닌지
  잘 고려해야 한다
서술적인 이름을 사용하라
• 여러 단어를 사용해 함수 기능을 잘 표현하는 이름을 선택해라




함수 인수
• 인수를 많이 쓰지 말아라. 직관적으로 사용하기 어렵다
• 출력인수는 입력인수보다 이해하기 어렵다
• 인수의 수가 많다면 클래스로 선언해서 인수로 넘기는
  방법도 사용할 수 있다. 인수의 개념을 표현하게 된다.
부수효과를 일으키지 마라
• 부수 효과는 거짓말이다
• 함수에서 한가지를 하겠다고 약속하고 남몰래 다른 짓을
  하는 것인 안 좋다.
• 함수 호출로는 예상하지 못했던 클래스 변수의 수정 등등..
함수를 어떻게 짜야 하는가
• 소프트웨어를 짜는 행위는 글짓기와 비슷하다
 • 서투른 초안을 쓰고 다듬어간다.
• 함수를 짤때도 마찬가지다
 • 처음에는 길고 복잡하다
 • 코드를 다듬고, 함수를 만들고, 이름을 바꾸고,
  중보을 제거하고...
 • 최종적으로는 우리가 원하는 깔끔한 함수가 된다.
Q/A
끝.

More Related Content

Viewers also liked

Clean code
Clean codeClean code
Clean codebbongcsu
 
[2012 01 28]cleancode 1장
[2012 01 28]cleancode 1장[2012 01 28]cleancode 1장
[2012 01 28]cleancode 1장Jong Pil Won
 
파이썬3프로그래밍 2장 2003
파이썬3프로그래밍 2장 2003파이썬3프로그래밍 2장 2003
파이썬3프로그래밍 2장 2003Jong Pil Won
 
Tdd 실습&나머지
Tdd 실습&나머지Tdd 실습&나머지
Tdd 실습&나머지Jong Pil Won
 
TDD&Refactoring Day 02: TDD
TDD&Refactoring Day 02: TDDTDD&Refactoring Day 02: TDD
TDD&Refactoring Day 02: TDDSuwon Chae
 
[2016-03-09] TDD on Spring ~ 봄에는 TDD ~
[2016-03-09] TDD on Spring ~ 봄에는 TDD ~[2016-03-09] TDD on Spring ~ 봄에는 TDD ~
[2016-03-09] TDD on Spring ~ 봄에는 TDD ~Ashal aka JOKER
 
Tdd retro agile_korea_게시용
Tdd retro agile_korea_게시용Tdd retro agile_korea_게시용
Tdd retro agile_korea_게시용Sangcheol Hwang
 
TDD: Test Driven Development 첫번째 이야기
TDD: Test Driven Development 첫번째 이야기TDD: Test Driven Development 첫번째 이야기
TDD: Test Driven Development 첫번째 이야기Ji Heon Kim
 
행복한 개발을 위한_테스트_케이스
행복한 개발을 위한_테스트_케이스행복한 개발을 위한_테스트_케이스
행복한 개발을 위한_테스트_케이스도형 임
 
테스트 케이스와 SW 품질
테스트 케이스와 SW 품질테스트 케이스와 SW 품질
테스트 케이스와 SW 품질도형 임
 
Tdd 왜 배우기 어려운가
Tdd 왜 배우기 어려운가Tdd 왜 배우기 어려운가
Tdd 왜 배우기 어려운가Jaehoon Oh
 
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)Suwon Chae
 
테스트 자동화와 TDD(테스트 주도 개발방법론)
테스트 자동화와 TDD(테스트 주도 개발방법론)테스트 자동화와 TDD(테스트 주도 개발방법론)
테스트 자동화와 TDD(테스트 주도 개발방법론)KH Park (박경훈)
 
시작하자 단위테스트
시작하자 단위테스트시작하자 단위테스트
시작하자 단위테스트YongEun Choi
 

Viewers also liked (15)

Clean code
Clean codeClean code
Clean code
 
[2012 01 28]cleancode 1장
[2012 01 28]cleancode 1장[2012 01 28]cleancode 1장
[2012 01 28]cleancode 1장
 
파이썬3프로그래밍 2장 2003
파이썬3프로그래밍 2장 2003파이썬3프로그래밍 2장 2003
파이썬3프로그래밍 2장 2003
 
Tdd 4장
Tdd 4장Tdd 4장
Tdd 4장
 
Tdd 실습&나머지
Tdd 실습&나머지Tdd 실습&나머지
Tdd 실습&나머지
 
TDD&Refactoring Day 02: TDD
TDD&Refactoring Day 02: TDDTDD&Refactoring Day 02: TDD
TDD&Refactoring Day 02: TDD
 
[2016-03-09] TDD on Spring ~ 봄에는 TDD ~
[2016-03-09] TDD on Spring ~ 봄에는 TDD ~[2016-03-09] TDD on Spring ~ 봄에는 TDD ~
[2016-03-09] TDD on Spring ~ 봄에는 TDD ~
 
Tdd retro agile_korea_게시용
Tdd retro agile_korea_게시용Tdd retro agile_korea_게시용
Tdd retro agile_korea_게시용
 
TDD: Test Driven Development 첫번째 이야기
TDD: Test Driven Development 첫번째 이야기TDD: Test Driven Development 첫번째 이야기
TDD: Test Driven Development 첫번째 이야기
 
행복한 개발을 위한_테스트_케이스
행복한 개발을 위한_테스트_케이스행복한 개발을 위한_테스트_케이스
행복한 개발을 위한_테스트_케이스
 
테스트 케이스와 SW 품질
테스트 케이스와 SW 품질테스트 케이스와 SW 품질
테스트 케이스와 SW 품질
 
Tdd 왜 배우기 어려운가
Tdd 왜 배우기 어려운가Tdd 왜 배우기 어려운가
Tdd 왜 배우기 어려운가
 
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)
 
테스트 자동화와 TDD(테스트 주도 개발방법론)
테스트 자동화와 TDD(테스트 주도 개발방법론)테스트 자동화와 TDD(테스트 주도 개발방법론)
테스트 자동화와 TDD(테스트 주도 개발방법론)
 
시작하자 단위테스트
시작하자 단위테스트시작하자 단위테스트
시작하자 단위테스트
 

Similar to [2012 01 28]cleancode 3장

The art of readable code ch4 ch8
The art of readable code ch4   ch8The art of readable code ch4   ch8
The art of readable code ch4 ch8Ki Sung Bae
 
읽기 좋은 코드가 좋은코드다
읽기 좋은 코드가 좋은코드다읽기 좋은 코드가 좋은코드다
읽기 좋은 코드가 좋은코드다wonmin lee
 
NDC2019 - 게임플레이 프로그래머의 역할
NDC2019 - 게임플레이 프로그래머의 역할NDC2019 - 게임플레이 프로그래머의 역할
NDC2019 - 게임플레이 프로그래머의 역할Hoyoung Choi
 
스마일게이트 서버개발캠프 - 5vengers
스마일게이트 서버개발캠프 - 5vengers 스마일게이트 서버개발캠프 - 5vengers
스마일게이트 서버개발캠프 - 5vengers ServerDevCamp
 
Game programming patterns
Game programming patternsGame programming patterns
Game programming patternsQooJuice
 
About Functional Programming Paradigms
About Functional Programming Paradigms About Functional Programming Paradigms
About Functional Programming Paradigms Junho Yeo
 
소프트웨어 학습 및 자바 웹 개발자 학습 로드맵
소프트웨어 학습 및 자바 웹 개발자 학습 로드맵소프트웨어 학습 및 자바 웹 개발자 학습 로드맵
소프트웨어 학습 및 자바 웹 개발자 학습 로드맵Javajigi Jaesung
 
Effective c++ 4
Effective c++ 4Effective c++ 4
Effective c++ 4현찬 양
 
임태현, 서버점검 제로에의 도전, NDC2011
임태현, 서버점검 제로에의 도전, NDC2011임태현, 서버점검 제로에의 도전, NDC2011
임태현, 서버점검 제로에의 도전, NDC2011devCAT Studio, NEXON
 
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018devCAT Studio, NEXON
 
회사에서의 글쓰기
회사에서의 글쓰기회사에서의 글쓰기
회사에서의 글쓰기Jeong Ed
 
깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)Jay Park
 
(독서광) 클린코드 이제는 파이썬이다
(독서광) 클린코드 이제는 파이썬이다(독서광) 클린코드 이제는 파이썬이다
(독서광) 클린코드 이제는 파이썬이다Jay Park
 
프로그래머 일하면서 성장하기
프로그래머 일하면서 성장하기프로그래머 일하면서 성장하기
프로그래머 일하면서 성장하기wlstjdpark
 
Effective c++ chapter 7,8
Effective c++ chapter 7,8Effective c++ chapter 7,8
Effective c++ chapter 7,8문익 장
 
Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬Dong Chan Shin
 
짝 프로그래밍 소개
짝 프로그래밍 소개짝 프로그래밍 소개
짝 프로그래밍 소개Seungyoon Lee
 
컴포넌트 제대로 만들기
컴포넌트 제대로 만들기컴포넌트 제대로 만들기
컴포넌트 제대로 만들기HyunSeob Lee
 
애자일 프랙티스
애자일 프랙티스애자일 프랙티스
애자일 프랙티스한 경만
 

Similar to [2012 01 28]cleancode 3장 (20)

The art of readable code ch4 ch8
The art of readable code ch4   ch8The art of readable code ch4   ch8
The art of readable code ch4 ch8
 
읽기 좋은 코드가 좋은코드다
읽기 좋은 코드가 좋은코드다읽기 좋은 코드가 좋은코드다
읽기 좋은 코드가 좋은코드다
 
NDC2019 - 게임플레이 프로그래머의 역할
NDC2019 - 게임플레이 프로그래머의 역할NDC2019 - 게임플레이 프로그래머의 역할
NDC2019 - 게임플레이 프로그래머의 역할
 
리팩토링
리팩토링리팩토링
리팩토링
 
스마일게이트 서버개발캠프 - 5vengers
스마일게이트 서버개발캠프 - 5vengers 스마일게이트 서버개발캠프 - 5vengers
스마일게이트 서버개발캠프 - 5vengers
 
Game programming patterns
Game programming patternsGame programming patterns
Game programming patterns
 
About Functional Programming Paradigms
About Functional Programming Paradigms About Functional Programming Paradigms
About Functional Programming Paradigms
 
소프트웨어 학습 및 자바 웹 개발자 학습 로드맵
소프트웨어 학습 및 자바 웹 개발자 학습 로드맵소프트웨어 학습 및 자바 웹 개발자 학습 로드맵
소프트웨어 학습 및 자바 웹 개발자 학습 로드맵
 
Effective c++ 4
Effective c++ 4Effective c++ 4
Effective c++ 4
 
임태현, 서버점검 제로에의 도전, NDC2011
임태현, 서버점검 제로에의 도전, NDC2011임태현, 서버점검 제로에의 도전, NDC2011
임태현, 서버점검 제로에의 도전, NDC2011
 
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
 
회사에서의 글쓰기
회사에서의 글쓰기회사에서의 글쓰기
회사에서의 글쓰기
 
깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)
 
(독서광) 클린코드 이제는 파이썬이다
(독서광) 클린코드 이제는 파이썬이다(독서광) 클린코드 이제는 파이썬이다
(독서광) 클린코드 이제는 파이썬이다
 
프로그래머 일하면서 성장하기
프로그래머 일하면서 성장하기프로그래머 일하면서 성장하기
프로그래머 일하면서 성장하기
 
Effective c++ chapter 7,8
Effective c++ chapter 7,8Effective c++ chapter 7,8
Effective c++ chapter 7,8
 
Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬
 
짝 프로그래밍 소개
짝 프로그래밍 소개짝 프로그래밍 소개
짝 프로그래밍 소개
 
컴포넌트 제대로 만들기
컴포넌트 제대로 만들기컴포넌트 제대로 만들기
컴포넌트 제대로 만들기
 
애자일 프랙티스
애자일 프랙티스애자일 프랙티스
애자일 프랙티스
 

More from Jong Pil Won

[2012 11 12]애자일 회고
[2012 11 12]애자일 회고[2012 11 12]애자일 회고
[2012 11 12]애자일 회고Jong Pil Won
 
[2012 03 17]clean_code 14장 점진적개선
[2012 03 17]clean_code 14장 점진적개선[2012 03 17]clean_code 14장 점진적개선
[2012 03 17]clean_code 14장 점진적개선Jong Pil Won
 
[2012 02 03]clean_code 5장
[2012 02 03]clean_code 5장[2012 02 03]clean_code 5장
[2012 02 03]clean_code 5장Jong Pil Won
 
[2012 02 03]clean_code 4장
[2012 02 03]clean_code 4장[2012 02 03]clean_code 4장
[2012 02 03]clean_code 4장Jong Pil Won
 
[2011 05 21] 4장 제어
[2011 05 21] 4장 제어[2011 05 21] 4장 제어
[2011 05 21] 4장 제어Jong Pil Won
 
[2011 05 21] 4장 제어
[2011 05 21] 4장 제어[2011 05 21] 4장 제어
[2011 05 21] 4장 제어Jong Pil Won
 
[2011 05 21] 4장 제어
[2011 05 21] 4장 제어[2011 05 21] 4장 제어
[2011 05 21] 4장 제어Jong Pil Won
 
[2011 04 30]python-3장
[2011 04 30]python-3장[2011 04 30]python-3장
[2011 04 30]python-3장Jong Pil Won
 
[2011 04 11]mock_object 소개
[2011 04 11]mock_object 소개[2011 04 11]mock_object 소개
[2011 04 11]mock_object 소개Jong Pil Won
 
10장 동기부여와훈련 경험
10장 동기부여와훈련 경험10장 동기부여와훈련 경험
10장 동기부여와훈련 경험Jong Pil Won
 

More from Jong Pil Won (11)

[2012 11 12]애자일 회고
[2012 11 12]애자일 회고[2012 11 12]애자일 회고
[2012 11 12]애자일 회고
 
[2012 03 17]clean_code 14장 점진적개선
[2012 03 17]clean_code 14장 점진적개선[2012 03 17]clean_code 14장 점진적개선
[2012 03 17]clean_code 14장 점진적개선
 
[2012 02 03]clean_code 5장
[2012 02 03]clean_code 5장[2012 02 03]clean_code 5장
[2012 02 03]clean_code 5장
 
[2012 02 03]clean_code 4장
[2012 02 03]clean_code 4장[2012 02 03]clean_code 4장
[2012 02 03]clean_code 4장
 
[2011 05 21] 4장 제어
[2011 05 21] 4장 제어[2011 05 21] 4장 제어
[2011 05 21] 4장 제어
 
[2011 05 21] 4장 제어
[2011 05 21] 4장 제어[2011 05 21] 4장 제어
[2011 05 21] 4장 제어
 
[2011 05 21] 4장 제어
[2011 05 21] 4장 제어[2011 05 21] 4장 제어
[2011 05 21] 4장 제어
 
[2011 04 30]python-3장
[2011 04 30]python-3장[2011 04 30]python-3장
[2011 04 30]python-3장
 
Tdd 마무리
Tdd 마무리Tdd 마무리
Tdd 마무리
 
[2011 04 11]mock_object 소개
[2011 04 11]mock_object 소개[2011 04 11]mock_object 소개
[2011 04 11]mock_object 소개
 
10장 동기부여와훈련 경험
10장 동기부여와훈련 경험10장 동기부여와훈련 경험
10장 동기부여와훈련 경험
 

[2012 01 28]cleancode 3장

  • 1. Clean Code 3장 함수 2012 01. 28 원종필
  • 2. • 의도를 분명히 표현하는 함수를 어떻게 만들까?? • 함수를 어떻게 만들어야 처음 읽는 사람이 내부를 직관적으로 파악할 수 있을까??
  • 3. 작게 만들어라 • 함수가 중첩구조가 생길만큼 커져서는 안된다 • 들여쓰기 수준은 1,2단을 넘어서는 안된다 • 읽기 쉽고 이해하기 쉬워진다
  • 4. 한 가지만 해라 • 함수는 한 가지만 해야 한다 • 한 가지만 하는지 판단법 • 의미있는 이름으로 다른 함수를 추출할 수 있다면 여러가지 작업을 하는 것이다 • 한가지 작업만 하는 함수는 자연스럽게 섹션으로 나누기 어렵다
  • 5. 함수당 추상화 수준은 하나로 • 함수내 모든 문장이 동일한 추상화 수준에 있어야 한다 • 근본 개념과 세부사항을 뒤섞기 시작하면 함수에 세부사항을 점점 더 많이 추가하게 된다 Switch 문 • 정말로 switch문을 써야 하는 것인지 추상 팩토리(Abstract Factory)가 필요한 것은 아닌지 잘 고려해야 한다
  • 6. 서술적인 이름을 사용하라 • 여러 단어를 사용해 함수 기능을 잘 표현하는 이름을 선택해라 함수 인수 • 인수를 많이 쓰지 말아라. 직관적으로 사용하기 어렵다 • 출력인수는 입력인수보다 이해하기 어렵다 • 인수의 수가 많다면 클래스로 선언해서 인수로 넘기는 방법도 사용할 수 있다. 인수의 개념을 표현하게 된다.
  • 7. 부수효과를 일으키지 마라 • 부수 효과는 거짓말이다 • 함수에서 한가지를 하겠다고 약속하고 남몰래 다른 짓을 하는 것인 안 좋다. • 함수 호출로는 예상하지 못했던 클래스 변수의 수정 등등..
  • 8. 함수를 어떻게 짜야 하는가 • 소프트웨어를 짜는 행위는 글짓기와 비슷하다 • 서투른 초안을 쓰고 다듬어간다. • 함수를 짤때도 마찬가지다 • 처음에는 길고 복잡하다 • 코드를 다듬고, 함수를 만들고, 이름을 바꾸고, 중보을 제거하고... • 최종적으로는 우리가 원하는 깔끔한 함수가 된다.
  • 9. Q/A
  • 10. 끝.