Your SlideShare is downloading. ×
CLEAN CODE<br />
문체가 수시로 바꾸면 책을 읽기 어렵다.<br />마찬가지로 코드 형식의 일관성이 없으면 코드 가독성이 떨어진다.<br />코드의 가독성은 코드의 품질을 유지하는데 지대한 영향을 미친다.<br />
적절한 소스 파일의 크기는 얼마?<br />FitNesse의 경우를 살펴보면<br />평균 200줄그리고 500줄을 넘지않는 소스 파일로도<br />	50,000줄에 육박하는 시스템을 구축할 수 있다.<br />
신문 기사는<br />주제, 개요, 세부 사항순으로 전개된다.<br />마찬가지로<br />소스 파일도 적절한 주제를 파일 이름으로<br />처음에는 고차원적 개념과 알고리즘을 설명하고<br />마지막에 저차원 함수와 ...
책을 쓸 때 문단을 구분하듯이<br />코드를 작성할 때도 개념 사이를 빈 행으로 구분하라.<br />package fitnesse.wikitext.widget;<br />import java.util.regex.*;<...
반면에 서로 연관성이 있다면,<br />코드를 세로로 가까이 놓아라.<br />연관성이 높은 가까이 두지 않으면<br />코드를 읽기 위해서 스크롤을 위,아래로 뒤지거나<br />이 파일, 저 파일을 오가면서 코드를 읽...
지역 변수는 사용하는 위치에서 최대한 가까이 선언한다.<br />인스턴스 변수는 세로 거리가 없이 클래스의 시작 또는 마지막에 선언한다.<br />
한 함수가 다른 함수를 호출하는 것과 같이 종속성이 있다면<br />세로로 가까이 배치한다.<br />호출 함수를 먼저 배치하고 피호출 함수를 그 다음에 배치한다.<br />
개념적인 친화도가 높은 코드는 가까이 배치한다.<br />EX)<br />public class Assert<br />{<br />   static public void assertTrue(String message, ...
한 행의 길이는<br />모니터에서 가로 스크롤이 생기지 않을 정도로 하자.<br />가로 공백은 밀접한 개념과 느슨한 개념을 표현한다.<br />공백이 있으면 두 요소가 나눠진다는 사실이 분명해진다.<br />가로 정...
정보의 범위에 따라서 들여쓰기를 하라.<br />EX)<br />Public class FitNesseServer implements SocketServer { private FitNesseContextconstext;...
간단한 if문, 짧은 while문과 같이 코드가 짧을 때<br />들여쓰기를 무시하고픈 유혹이 생지만 들여쓰기를 꼭 하라.<br />Public class CommentWidget extends TextWidget<br...
끝<br />
Upcoming SlideShare
Loading in...5
×

Clean code(05)

258

Published on

Summary of chapter 5 in CLEAN CODE.

Published in: Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
258
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Transcript of "Clean code(05)"

  1. 1. CLEAN CODE<br />
  2. 2. 문체가 수시로 바꾸면 책을 읽기 어렵다.<br />마찬가지로 코드 형식의 일관성이 없으면 코드 가독성이 떨어진다.<br />코드의 가독성은 코드의 품질을 유지하는데 지대한 영향을 미친다.<br />
  3. 3. 적절한 소스 파일의 크기는 얼마?<br />FitNesse의 경우를 살펴보면<br />평균 200줄그리고 500줄을 넘지않는 소스 파일로도<br /> 50,000줄에 육박하는 시스템을 구축할 수 있다.<br />
  4. 4. 신문 기사는<br />주제, 개요, 세부 사항순으로 전개된다.<br />마찬가지로<br />소스 파일도 적절한 주제를 파일 이름으로<br />처음에는 고차원적 개념과 알고리즘을 설명하고<br />마지막에 저차원 함수와 세부 내역이 나오도록 하자.<br />
  5. 5. 책을 쓸 때 문단을 구분하듯이<br />코드를 작성할 때도 개념 사이를 빈 행으로 구분하라.<br />package fitnesse.wikitext.widget;<br />import java.util.regex.*;<br />Public class BoldWidget extends ParentWidget<br />{<br /> public static final String REGEXP = “’’’.+?’’’”’<br /> private static final Pattern pattern = Pattern.compile(“’’’(.+?)’’’”,<br />Pattern.MULTILINE +Pattern.DOTALL<br /> );<br /> public BoldWidget(ParentWidget parent, String text()) throws Exception<br /> {<br /> super(parent);<br /> Matcher match = pattern.matcher(text);<br />match.find();<br />addChildWidgets(match.group(1));<br /> }<br /> public String render() throws Exception<br /> {<br />StringBuffer html = new StringBuffer(“<b>”);<br />html.append(childHtml()).append(“</b>”);<br /> return html.toString();<br /> }<br />}<br />package fitnesse.wikitext.widget;<br />import java.util.regex.*;<br />Public class BoldWidget extends ParentWidget{<br /> public static final String REGEXP = “’’’.+?’’’”’<br /> private static final Pattern pattern = Pattern.compile(“’’’(.+?)’’’”,<br />Pattern.MULTILINE +Pattern.DOTALL);<br /> public BoldWidget(ParentWidget parent, String text()) throws Exception{ <br /> super(parent);<br /> Matcher match = pattern.matcher(text);<br />match.find();<br />addChildWidgets(match.group(1));}<br /> public String render() throws Exception{<br />StringBuffer html = new StringBuffer(“<b>”);<br />html.append(childHtml()).append(“</b>”);<br /> return html.toString();<br /> }<br />}<br />
  6. 6. 반면에 서로 연관성이 있다면,<br />코드를 세로로 가까이 놓아라.<br />연관성이 높은 가까이 두지 않으면<br />코드를 읽기 위해서 스크롤을 위,아래로 뒤지거나<br />이 파일, 저 파일을 오가면서 코드를 읽어야한다.<br />
  7. 7. 지역 변수는 사용하는 위치에서 최대한 가까이 선언한다.<br />인스턴스 변수는 세로 거리가 없이 클래스의 시작 또는 마지막에 선언한다.<br />
  8. 8. 한 함수가 다른 함수를 호출하는 것과 같이 종속성이 있다면<br />세로로 가까이 배치한다.<br />호출 함수를 먼저 배치하고 피호출 함수를 그 다음에 배치한다.<br />
  9. 9. 개념적인 친화도가 높은 코드는 가까이 배치한다.<br />EX)<br />public class Assert<br />{<br /> static public void assertTrue(String message, boolean condition)<br /> {<br /> if(!condition)<br /> fail(message);<br /> }<br /> static public void assertTrue(boolean condition)<br /> {<br />assertTrue(null, condition);<br /> }<br /> static public void assertFalse(String message, boolean condition)<br /> {<br />assertTrue(message, !condition);<br /> }<br /> static public void assertFalse(booleancondtion)<br /> {<br />assertFalse(null, condtion);<br /> }<br /> /*…*/<br />};<br />
  10. 10. 한 행의 길이는<br />모니터에서 가로 스크롤이 생기지 않을 정도로 하자.<br />가로 공백은 밀접한 개념과 느슨한 개념을 표현한다.<br />공백이 있으면 두 요소가 나눠진다는 사실이 분명해진다.<br />가로 정렬은 없어도 된다.<br />
  11. 11. 정보의 범위에 따라서 들여쓰기를 하라.<br />EX)<br />Public class FitNesseServer implements SocketServer { private FitNesseContextconstext; public FitNesseServer(FitNesseContext context) { this.context = context; } public void serve(Socket s) { serve(s, 10000); } public void serve(Socket s, long requestTimeout) { try { FitNesseExpediter sender = new FitNesseExpediter(s, context); sender.setRequestParsingTimeLimit(requestTimeout); sender.start(); } catch(Exception e) { e.printStatckTrace(); } } }<br />vs<br />Public class FitNesseServer implements SocketServer<br />{ <br /> private FitNesseContextconstext; <br /> public FitNesseServer(FitNesseContext context) <br /> { <br />this.context= context; <br /> } <br /> public void serve(Socket s) <br /> { <br /> serve(s, 10000); <br /> } <br /> public void serve(Socket s, long requestTimeout) <br /> { <br /> try <br /> { <br />FitNesseExpeditersender = new FitNesseExpediter(s, context); sender.setRequestParsingTimeLimit(requestTimeout); sender.start(); <br /> } <br /> catch(Exception e) <br /> { <br />e.printStatckTrace(); <br /> } <br /> } <br />}<br />
  12. 12. 간단한 if문, 짧은 while문과 같이 코드가 짧을 때<br />들여쓰기를 무시하고픈 유혹이 생지만 들여쓰기를 꼭 하라.<br />Public class CommentWidget extends TextWidget<br />{<br /> public static final String REGEXP = “^#[^ ]*(?:(?: )| | )?”;<br /> public CommentWidget(ParentWidget parent, String text) { super(parent, text); }<br /> public String render() throws Exception { return “”; }<br />}<br />vs<br />Public class CommentWidget extends TextWidget<br />{<br /> public static final String REGEXP = “^#[^ ]*(?:(?: )| | )?”;<br /> public CommentWidget(ParentWidget parent, String text) <br /> { <br /> super(parent, text); <br /> }<br /> public String render() throws Exception <br /> {<br /> return “”; <br /> }<br />}<br />
  13. 13. 끝<br />

×