SlideShare a Scribd company logo
1 of 8
14. 점진적인 개선
명령행 인수 구문분석기 사례 연구
Args 명령행 파서
                        	   public static void main(String[] args){
                        	   	   try{

• Args   두개의 인자.        	   	   	    Args arg = new Args("l,p#,d*", args);
                        	   	   	    boolean logging = arg.getBoolean('l');
                        	   	   	    int port = arg.getInt('p');
                        	   	   	    String directory = arg.getString('d');
                        	   	   	    executeApplication(logging, port, directory);
• 매개변수        스키마.      	
                        	
                            	
                            	
                                }catch(ArgsException e){
                                	    System.out.printf("Argument error: %sn", e.errorMessage());
                        	   	   }
                        	   }

• 명령행     인수 배열.

• getXXX().

• ArgsException   발생.
Programming is a craft
       more than it is a science
• 작문과    유사.        • 초보   프로그래머는

• 초안을    작성하고,       -   돌아가는 프로그램
                         을 만들고,
• 2차   초안을 작성하고,
                     -   동작하면 다음 업무
• 계속   다듬어서,             로 진행.
• 최종안을    작성하라.      -   이런 행위는 잘못되
                         었다.
14.2 Args: 1차 초안


• Boolean   인수만 지원하는 버전을 작성. [목록 14-9]

  -   비교적 간결, 단순, 이해하기 쉽다.

• String, Integer   인수 유형 추가.[목록 14-10]

  -   버그와 결함이 보이는 지저분한 코드.
작업 중지!!!


• 인수   유형이 2개 추가되자 복잡해짐.

    2개의 인수를 더 추가하는 것은 분명히 잘못된
• 여기에
코드를 작성하게 됨.

• 지금이    코드를 재작성할 시점이다.
점진적 개선

• TDD   기법을 사용하여 점진적으로 개발.

• 인수(Acceptance)
         테스트 및 단위테스트를 병행하여,
 코드가 정상적으로 동작되고 있음을 확인.

• 코드    수정하면서 테스트를 모두 통과시켜야 한다.

• 리팩토링은    루빅 큐브 맞추기와 유사.

 -   큰 목표는 자잘한 단계 여러번 거쳐 달성됨.
결론
• 단순히
    돌아가는 코드에 만족하는 프로그래머는
전문가 정신이 부족하다.

• 나쁜   코드가 더 오래 동안/ 더 심각하게 프로젝트를 지
연.

• 코드는
   언제나 최대한 깔끔하고
단순하게 정리하자.
• 지금!

More Related Content

What's hot

[C++]2 variables andselectionstatement
[C++]2 variables andselectionstatement[C++]2 variables andselectionstatement
[C++]2 variables andselectionstatementJunyoung Jung
 
Ec++ 3,4 summary
Ec++ 3,4 summaryEc++ 3,4 summary
Ec++ 3,4 summarySehyeon Nam
 
Javascript - Function
Javascript - FunctionJavascript - Function
Javascript - Functionwonmin lee
 
Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심흥배 최
 
[C++ Korea 2nd Seminar] C++17 Key Features Summary
[C++ Korea 2nd Seminar] C++17 Key Features Summary[C++ Korea 2nd Seminar] C++17 Key Features Summary
[C++ Korea 2nd Seminar] C++17 Key Features SummaryChris Ohk
 
Lambda 란 무엇인가
Lambda 란 무엇인가Lambda 란 무엇인가
Lambda 란 무엇인가Vong Sik Kong
 
Hello python 오리엔테이션(파이썬 스터디, 발표자료)
Hello python 오리엔테이션(파이썬 스터디, 발표자료)Hello python 오리엔테이션(파이썬 스터디, 발표자료)
Hello python 오리엔테이션(파이썬 스터디, 발표자료)Cherucy
 
2013 C++ Study For Students #1
2013 C++ Study For Students #12013 C++ Study For Students #1
2013 C++ Study For Students #1Chris Ohk
 
[2008 CodeEngn Conference 02] seaofglass - Immunity Debugger 활용과 플러그인 제작
[2008 CodeEngn Conference 02] seaofglass - Immunity Debugger 활용과 플러그인 제작[2008 CodeEngn Conference 02] seaofglass - Immunity Debugger 활용과 플러그인 제작
[2008 CodeEngn Conference 02] seaofglass - Immunity Debugger 활용과 플러그인 제작GangSeok Lee
 
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)Circulus
 
Swift3 typecasting nested_type
Swift3 typecasting nested_typeSwift3 typecasting nested_type
Swift3 typecasting nested_typeEunjoo Im
 
Swift3 generic
Swift3 genericSwift3 generic
Swift3 genericEunjoo Im
 
Java 8 api :: lambda 이용하기
Java 8 api :: lambda 이용하기Java 8 api :: lambda 이용하기
Java 8 api :: lambda 이용하기rupert kim
 
[2007 CodeEngn Conference 01] 김기오 - NASM 어셈블러 사용법과 Calling Convention
[2007 CodeEngn Conference 01] 김기오 - NASM 어셈블러 사용법과 Calling Convention[2007 CodeEngn Conference 01] 김기오 - NASM 어셈블러 사용법과 Calling Convention
[2007 CodeEngn Conference 01] 김기오 - NASM 어셈블러 사용법과 Calling ConventionGangSeok Lee
 
[C++ Korea] Effective Modern C++ Study item14 16 +신촌
[C++ Korea] Effective Modern C++ Study item14 16 +신촌[C++ Korea] Effective Modern C++ Study item14 16 +신촌
[C++ Korea] Effective Modern C++ Study item14 16 +신촌Seok-joon Yun
 
[C++ korea] Effective Modern C++ study item 19 use shared ptr for shared owne...
[C++ korea] Effective Modern C++ study item 19 use shared ptr for shared owne...[C++ korea] Effective Modern C++ study item 19 use shared ptr for shared owne...
[C++ korea] Effective Modern C++ study item 19 use shared ptr for shared owne...Seok-joon Yun
 
Swift3 subscript inheritance initialization
Swift3 subscript inheritance initializationSwift3 subscript inheritance initialization
Swift3 subscript inheritance initializationEunjoo Im
 

What's hot (20)

[C++]2 variables andselectionstatement
[C++]2 variables andselectionstatement[C++]2 variables andselectionstatement
[C++]2 variables andselectionstatement
 
C++11
C++11C++11
C++11
 
6 function
6 function6 function
6 function
 
Ec++ 3,4 summary
Ec++ 3,4 summaryEc++ 3,4 summary
Ec++ 3,4 summary
 
Javascript - Function
Javascript - FunctionJavascript - Function
Javascript - Function
 
Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심
 
[C++ Korea 2nd Seminar] C++17 Key Features Summary
[C++ Korea 2nd Seminar] C++17 Key Features Summary[C++ Korea 2nd Seminar] C++17 Key Features Summary
[C++ Korea 2nd Seminar] C++17 Key Features Summary
 
Lambda 란 무엇인가
Lambda 란 무엇인가Lambda 란 무엇인가
Lambda 란 무엇인가
 
Hello python 오리엔테이션(파이썬 스터디, 발표자료)
Hello python 오리엔테이션(파이썬 스터디, 발표자료)Hello python 오리엔테이션(파이썬 스터디, 발표자료)
Hello python 오리엔테이션(파이썬 스터디, 발표자료)
 
2013 C++ Study For Students #1
2013 C++ Study For Students #12013 C++ Study For Students #1
2013 C++ Study For Students #1
 
[2008 CodeEngn Conference 02] seaofglass - Immunity Debugger 활용과 플러그인 제작
[2008 CodeEngn Conference 02] seaofglass - Immunity Debugger 활용과 플러그인 제작[2008 CodeEngn Conference 02] seaofglass - Immunity Debugger 활용과 플러그인 제작
[2008 CodeEngn Conference 02] seaofglass - Immunity Debugger 활용과 플러그인 제작
 
C++11
C++11C++11
C++11
 
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
 
Swift3 typecasting nested_type
Swift3 typecasting nested_typeSwift3 typecasting nested_type
Swift3 typecasting nested_type
 
Swift3 generic
Swift3 genericSwift3 generic
Swift3 generic
 
Java 8 api :: lambda 이용하기
Java 8 api :: lambda 이용하기Java 8 api :: lambda 이용하기
Java 8 api :: lambda 이용하기
 
[2007 CodeEngn Conference 01] 김기오 - NASM 어셈블러 사용법과 Calling Convention
[2007 CodeEngn Conference 01] 김기오 - NASM 어셈블러 사용법과 Calling Convention[2007 CodeEngn Conference 01] 김기오 - NASM 어셈블러 사용법과 Calling Convention
[2007 CodeEngn Conference 01] 김기오 - NASM 어셈블러 사용법과 Calling Convention
 
[C++ Korea] Effective Modern C++ Study item14 16 +신촌
[C++ Korea] Effective Modern C++ Study item14 16 +신촌[C++ Korea] Effective Modern C++ Study item14 16 +신촌
[C++ Korea] Effective Modern C++ Study item14 16 +신촌
 
[C++ korea] Effective Modern C++ study item 19 use shared ptr for shared owne...
[C++ korea] Effective Modern C++ study item 19 use shared ptr for shared owne...[C++ korea] Effective Modern C++ study item 19 use shared ptr for shared owne...
[C++ korea] Effective Modern C++ study item 19 use shared ptr for shared owne...
 
Swift3 subscript inheritance initialization
Swift3 subscript inheritance initializationSwift3 subscript inheritance initialization
Swift3 subscript inheritance initialization
 

Similar to Cleancode ch14-successive refinement

15 2. arguement passing to main
15 2. arguement passing to main15 2. arguement passing to main
15 2. arguement passing to main웅식 전
 
병렬 프로그래밍
병렬 프로그래밍병렬 프로그래밍
병렬 프로그래밍준혁 이
 
정규표현식 Regular expression (regex)
정규표현식 Regular expression (regex)정규표현식 Regular expression (regex)
정규표현식 Regular expression (regex)Sunyoung Kim
 
Scala, Scalability
Scala, ScalabilityScala, Scalability
Scala, ScalabilityDongwook Lee
 
JavaInAction 자바 8
JavaInAction 자바 8JavaInAction 자바 8
JavaInAction 자바 8NBT Inc.
 
Let's Go (golang)
Let's Go (golang)Let's Go (golang)
Let's Go (golang)상욱 송
 
Programming skills 1부
Programming skills 1부Programming skills 1부
Programming skills 1부JiHyung Lee
 
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++Min-soo Park
 
자바스크립트 함수
자바스크립트 함수자바스크립트 함수
자바스크립트 함수유진 변
 
Regex & property sheet
Regex & property sheetRegex & property sheet
Regex & property sheetYoungkwon Lee
 
Python programming for Bioinformatics
Python programming for BioinformaticsPython programming for Bioinformatics
Python programming for BioinformaticsHyungyong Kim
 
스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오Taeoh Kim
 
정규표현식(Regular expressions)
정규표현식(Regular expressions)정규표현식(Regular expressions)
정규표현식(Regular expressions)Juhee Kim
 
[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로
[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로
[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로Oracle Korea
 

Similar to Cleancode ch14-successive refinement (20)

15 2. arguement passing to main
15 2. arguement passing to main15 2. arguement passing to main
15 2. arguement passing to main
 
병렬 프로그래밍
병렬 프로그래밍병렬 프로그래밍
병렬 프로그래밍
 
파이선 실전공략-1
파이선 실전공략-1파이선 실전공략-1
파이선 실전공략-1
 
Java_10 람다
Java_10 람다Java_10 람다
Java_10 람다
 
정규표현식 Regular expression (regex)
정규표현식 Regular expression (regex)정규표현식 Regular expression (regex)
정규표현식 Regular expression (regex)
 
Scalability
ScalabilityScalability
Scalability
 
Scala, Scalability
Scala, ScalabilityScala, Scalability
Scala, Scalability
 
JavaInAction 자바 8
JavaInAction 자바 8JavaInAction 자바 8
JavaInAction 자바 8
 
Let's Go (golang)
Let's Go (golang)Let's Go (golang)
Let's Go (golang)
 
Programming skills 1부
Programming skills 1부Programming skills 1부
Programming skills 1부
 
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
 
자바스크립트 함수
자바스크립트 함수자바스크립트 함수
자바스크립트 함수
 
Regex & property sheet
Regex & property sheetRegex & property sheet
Regex & property sheet
 
Java8 람다
Java8 람다Java8 람다
Java8 람다
 
Python programming for Bioinformatics
Python programming for BioinformaticsPython programming for Bioinformatics
Python programming for Bioinformatics
 
스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오
 
ES6 for Node.js Study 2주차
ES6 for Node.js Study 2주차ES6 for Node.js Study 2주차
ES6 for Node.js Study 2주차
 
정규표현식(Regular expressions)
정규표현식(Regular expressions)정규표현식(Regular expressions)
정규표현식(Regular expressions)
 
Apache avro
Apache avroApache avro
Apache avro
 
[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로
[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로
[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로
 

More from Kyungryul KIM

전문검색기술도전
전문검색기술도전전문검색기술도전
전문검색기술도전Kyungryul KIM
 
Nib_NSWindowController
Nib_NSWindowControllerNib_NSWindowController
Nib_NSWindowControllerKyungryul KIM
 
서버인프라를지탱하는기술5 1 2
서버인프라를지탱하는기술5 1 2서버인프라를지탱하는기술5 1 2
서버인프라를지탱하는기술5 1 2Kyungryul KIM
 
Chaper24 languages high_and_low
Chaper24 languages high_and_lowChaper24 languages high_and_low
Chaper24 languages high_and_lowKyungryul KIM
 
Ch22 운영체제
Ch22 운영체제Ch22 운영체제
Ch22 운영체제Kyungryul KIM
 

More from Kyungryul KIM (20)

Ch4 pugixml
Ch4 pugixmlCh4 pugixml
Ch4 pugixml
 
Node ch12
Node ch12Node ch12
Node ch12
 
11.scripting
11.scripting11.scripting
11.scripting
 
32 osx app_release
32 osx app_release32 osx app_release
32 osx app_release
 
Meteor ddp
Meteor ddpMeteor ddp
Meteor ddp
 
Cocos2dx 7.1-7.2
Cocos2dx 7.1-7.2Cocos2dx 7.1-7.2
Cocos2dx 7.1-7.2
 
Cocos2 d x-7.3_4
Cocos2 d x-7.3_4Cocos2 d x-7.3_4
Cocos2 d x-7.3_4
 
Cocos2d x-ch5-1
Cocos2d x-ch5-1Cocos2d x-ch5-1
Cocos2d x-ch5-1
 
Coco2d x
Coco2d xCoco2d x
Coco2d x
 
23 drag drop
23 drag drop23 drag drop
23 drag drop
 
Hadoop ch5
Hadoop ch5Hadoop ch5
Hadoop ch5
 
전문검색기술도전
전문검색기술도전전문검색기술도전
전문검색기술도전
 
Nib_NSWindowController
Nib_NSWindowControllerNib_NSWindowController
Nib_NSWindowController
 
Dsas
DsasDsas
Dsas
 
서버인프라를지탱하는기술5 1 2
서버인프라를지탱하는기술5 1 2서버인프라를지탱하는기술5 1 2
서버인프라를지탱하는기술5 1 2
 
Chaper24 languages high_and_low
Chaper24 languages high_and_lowChaper24 languages high_and_low
Chaper24 languages high_and_low
 
Ch22 운영체제
Ch22 운영체제Ch22 운영체제
Ch22 운영체제
 
Mibis ch20
Mibis ch20Mibis ch20
Mibis ch20
 
Mibis ch15
Mibis ch15Mibis ch15
Mibis ch15
 
Mibis ch8
Mibis ch8Mibis ch8
Mibis ch8
 

Recently uploaded

A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)Tae Young Lee
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Kim Daeun
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionKim Daeun
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Wonjun Hwang
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Wonjun Hwang
 

Recently uploaded (6)

A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)
 

Cleancode ch14-successive refinement

  • 1. 14. 점진적인 개선 명령행 인수 구문분석기 사례 연구
  • 2. Args 명령행 파서 public static void main(String[] args){ try{ • Args 두개의 인자. Args arg = new Args("l,p#,d*", args); boolean logging = arg.getBoolean('l'); int port = arg.getInt('p'); String directory = arg.getString('d'); executeApplication(logging, port, directory); • 매개변수 스키마. }catch(ArgsException e){ System.out.printf("Argument error: %sn", e.errorMessage()); } } • 명령행 인수 배열. • getXXX(). • ArgsException 발생.
  • 3.
  • 4. Programming is a craft more than it is a science • 작문과 유사. • 초보 프로그래머는 • 초안을 작성하고, - 돌아가는 프로그램 을 만들고, • 2차 초안을 작성하고, - 동작하면 다음 업무 • 계속 다듬어서, 로 진행. • 최종안을 작성하라. - 이런 행위는 잘못되 었다.
  • 5. 14.2 Args: 1차 초안 • Boolean 인수만 지원하는 버전을 작성. [목록 14-9] - 비교적 간결, 단순, 이해하기 쉽다. • String, Integer 인수 유형 추가.[목록 14-10] - 버그와 결함이 보이는 지저분한 코드.
  • 6. 작업 중지!!! • 인수 유형이 2개 추가되자 복잡해짐. 2개의 인수를 더 추가하는 것은 분명히 잘못된 • 여기에 코드를 작성하게 됨. • 지금이 코드를 재작성할 시점이다.
  • 7. 점진적 개선 • TDD 기법을 사용하여 점진적으로 개발. • 인수(Acceptance) 테스트 및 단위테스트를 병행하여, 코드가 정상적으로 동작되고 있음을 확인. • 코드 수정하면서 테스트를 모두 통과시켜야 한다. • 리팩토링은 루빅 큐브 맞추기와 유사. - 큰 목표는 자잘한 단계 여러번 거쳐 달성됨.
  • 8. 결론 • 단순히 돌아가는 코드에 만족하는 프로그래머는 전문가 정신이 부족하다. • 나쁜 코드가 더 오래 동안/ 더 심각하게 프로젝트를 지 연. • 코드는 언제나 최대한 깔끔하고 단순하게 정리하자. • 지금!

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n