SlideShare ist ein Scribd-Unternehmen logo
1 von 31
Downloaden Sie, um offline zu lesen
9장. 문서화
아꿈사
overview
재사용을 말로 하기는 쉽지만 정작 그것을 실행
하기란 어려운 일이다.
훌륭한 설계와 잘 정리된 문서화 이 둘 모두를
요구하기 때문이다.
문서화 없이 재사용된 컴포넌트는 절대 볼 수 없
을 것이다.
-데이비드 L. 파르나스
9.1 문서화의 이유
-API는 기능적 명세서
class RGBColor{
RGBColor(float, float, float);
~RGBColor();
float Red() const;
float Green() const;
float Blue() const;
void Set(float, float, float);
}
- 무엇을 알 수 있었을까요?
메서드가 정의하는 리턴 타입, 파라미터
하지만, 클래스가 무엇을 수행하는지는 알기
힘듭니다.
/// 하나의 RGB(Red, Green, Blue)색을 표현한다.
/// (0,0,0)은 검은색 그리고 (1,1,1)은 흰색
class RGBColor{
/// 0부터 1사이에 있는 float값을 이용해서 RGB색을 생성
RGBColor(float red, float green, float blue);
~RGBColor();
//색의 빨강색 요소를 리턴한다. 값의 범위는 0부터 1사이다.
float Red() const;
float Green() const;
float Blue() const;
void Set(float, float, float);
}
9.1.2 Documenting the Interface’s Contract
계약 프로그래밍?
소프트웨어 컴포넌트는 자신들이 제공할 서
비스에 대한 계약,의무를 제공하며 이 서비스의
클라이언트는 컴포넌트를 통해 그 계약에 합의
한다는 것?
9.1.2 Documenting the Interface’s Contract
client
컴포넌트 서비스
클라이언트는 서비스를 계약했다
9.1.2 Documenting the Interface’s Contract
-계약 모델의 원칙
1. 사전조건
2. 사후조건
3. 클래스 불변조건
9.1.2 Documenting the Interface’s Contract
1. 사전조건
클라리언트는 함수를 호출하기 전에
요구된 사전조건들을 만족시켜야한다.
9.1.2 Documenting the Interface’s Contract
2. 사후조건
함수는 동작이 완료되면 특정조건이
만족될 것이라는 점을 보장한다.
9.1.2 Documenting the Interface’s Contract
3. 클래스 불변조건
클래스의 모든 인스턴스가 반드시
만족시켜야 하는 제약조건
///
/// brief Calculate the square root of a floating point number.
/// pre value >= 0
/// post fabs((result * result) value) < 0.001
///
double SquareRoot(double value);
9.1.2 Documenting the Interface’s Contract
상속된 클래스의 사전조건은
그 부모 클래스가 가진것보다 강하지 않고 오
히려 약해 질 수 있다.
-켄 퓨
9.1.3 행동 변화에 대한 의사소통
소스코드가 바뀌면
문서화도 고쳐주어라
9.1.4 문서화의 대상
API의 모든 public요소를 문서화 해야한다.
클래스, 함수, 열거형, 상수와, 타입정의,
파라미터, 리턴값,
메서드의 행동 뿐만 아니라, 나머지
API관계에 대한 설명 등등
9.2 문서화의 유형
- 사용자가 직접 참여
9.2 문서화의 유형
- 사용자가 직접 참여
9.2 문서화의 유형
-자동화된 API문서화
주석을 자동으로 생성해주는 툴
주석을 추출해서, 문서화해주는 툴
Doxygen, Groc, Swagger
9.2.2 개요 문서화
-API의 고차원적 개념도(다이어그램)
-핵심 개념, 특징과 용어
-API를 사용하기 위한 시스템 요구사항
-소프트웨어 설치,설정방법
-피드백, 버그 신고는?
9.2.3 예제와 튜토리얼
-간단하고 쉬운 예제
-작업 데모
-튜토리얼과 세부 설명
-사용자 참여
-FAQ
9.2.5 라이선스 정보
1. 등록상표
소유권이 공급자에 귀속
소스코드를 제공 X
라이선스 비용 요구
역공학, 사용자 컴퓨터수, 개발자수 제한
9.2.5 라이선스 정보
2. 자유 오픈 소프트웨어
어떤 제약없이 수정, 배포 복제 가능
-카피레프트
-자유형
9.4 DOXYGEN
9.4 DOXYGEN
9.4 DOXYGEN
9.4 DOXYGEN - 주석
/** ///
* ... text … /// … text ...
*/ ///
/*! //!
* ... text … //! … text ...
*/ //!
9.4 DOXYGEN - 파일주석
///
/// file <filename>
///
/// brief <brief description>
///
/// author <list of author names>
/// date <date description>
/// since <API version when added>
///
/// <description of module>
///
/// <license and copyright information>
///
9.4 DOXYGEN - 클래스 주석
///
/// class <class name> [header file] [header name]
///
/// brief <brief description>
///
/// <detailed description>
///
/// author <list of author names>
/// date <date description>
/// since <API version when added>
///
9.4 DOXYGEN - 메서드 주석
///
/// brief <brief description>
///
/// <detailed description>
///
/// param[in] <input parameter name> <description>
/// param[out] <output parameter name> <description>
/// return <description of the return value>
/// since <API version when added>
/// see <methods to list in the see also section>
/// note <optional note about the method>
///
End of Document

Weitere ähnliche Inhalte

Was ist angesagt?

[ES6] 1. let과 const
[ES6] 1. let과 const[ES6] 1. let과 const
[ES6] 1. let과 constHan JaeYeab
 
뭔지 모르지만 발표
뭔지 모르지만 발표뭔지 모르지만 발표
뭔지 모르지만 발표Kyoung Up Jung
 
Docker registry swift_junojunho
Docker registry swift_junojunhoDocker registry swift_junojunho
Docker registry swift_junojunhoJunho Kim
 
PHP로 Slack Bot 만들기
PHP로 Slack Bot 만들기PHP로 Slack Bot 만들기
PHP로 Slack Bot 만들기Changwan Jun
 
[부스트캠퍼세미나]권혁우_REST는 바이바이_ GraphQL과 함께하는 칼퇴시대
[부스트캠퍼세미나]권혁우_REST는 바이바이_ GraphQL과 함께하는 칼퇴시대[부스트캠퍼세미나]권혁우_REST는 바이바이_ GraphQL과 함께하는 칼퇴시대
[부스트캠퍼세미나]권혁우_REST는 바이바이_ GraphQL과 함께하는 칼퇴시대CONNECT FOUNDATION
 
그루비로 안드로이드 앱 개발하기
그루비로 안드로이드 앱 개발하기그루비로 안드로이드 앱 개발하기
그루비로 안드로이드 앱 개발하기Sangkyoon Nam
 
인내심없는 개발자를 위한 자바스크립트 - 한줄씩 영어공부하기.
인내심없는 개발자를 위한 자바스크립트 - 한줄씩 영어공부하기.인내심없는 개발자를 위한 자바스크립트 - 한줄씩 영어공부하기.
인내심없는 개발자를 위한 자바스크립트 - 한줄씩 영어공부하기.Nasol Kim
 
티켓몬스터를 위한 PHP 개발 방법
티켓몬스터를 위한 PHP 개발 방법티켓몬스터를 위한 PHP 개발 방법
티켓몬스터를 위한 PHP 개발 방법Young D
 
모바일 크로스플랫폼 비교 - 월간슬라이드 4월
모바일 크로스플랫폼 비교 - 월간슬라이드 4월모바일 크로스플랫폼 비교 - 월간슬라이드 4월
모바일 크로스플랫폼 비교 - 월간슬라이드 4월월간 IT 슬라이드
 
112 deview
112 deview112 deview
112 deviewNAVER D2
 
워드프레스 기초 (ABCD) #1
워드프레스 기초 (ABCD) #1워드프레스 기초 (ABCD) #1
워드프레스 기초 (ABCD) #1성일 한
 
아이폰에 포팅해보기
아이폰에 포팅해보기아이폰에 포팅해보기
아이폰에 포팅해보기changehee lee
 
Django개발은 PyCharm에서
Django개발은 PyCharm에서Django개발은 PyCharm에서
Django개발은 PyCharm에서Kyoung Up Jung
 
Boss2D 설치과정
Boss2D 설치과정Boss2D 설치과정
Boss2D 설치과정Bonex Gu
 
[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기
[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기
[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기CONNECT FOUNDATION
 
그루비 소개 발표자료 - 김연수
그루비 소개 발표자료 - 김연수그루비 소개 발표자료 - 김연수
그루비 소개 발표자료 - 김연수Yeon Soo Kim
 
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발동현 김
 

Was ist angesagt? (20)

[ES6] 1. let과 const
[ES6] 1. let과 const[ES6] 1. let과 const
[ES6] 1. let과 const
 
Log4j 사용법
Log4j 사용법Log4j 사용법
Log4j 사용법
 
뭔지 모르지만 발표
뭔지 모르지만 발표뭔지 모르지만 발표
뭔지 모르지만 발표
 
Docker registry swift_junojunho
Docker registry swift_junojunhoDocker registry swift_junojunho
Docker registry swift_junojunho
 
PHP로 Slack Bot 만들기
PHP로 Slack Bot 만들기PHP로 Slack Bot 만들기
PHP로 Slack Bot 만들기
 
[부스트캠퍼세미나]권혁우_REST는 바이바이_ GraphQL과 함께하는 칼퇴시대
[부스트캠퍼세미나]권혁우_REST는 바이바이_ GraphQL과 함께하는 칼퇴시대[부스트캠퍼세미나]권혁우_REST는 바이바이_ GraphQL과 함께하는 칼퇴시대
[부스트캠퍼세미나]권혁우_REST는 바이바이_ GraphQL과 함께하는 칼퇴시대
 
Log4j
Log4jLog4j
Log4j
 
그루비로 안드로이드 앱 개발하기
그루비로 안드로이드 앱 개발하기그루비로 안드로이드 앱 개발하기
그루비로 안드로이드 앱 개발하기
 
인내심없는 개발자를 위한 자바스크립트 - 한줄씩 영어공부하기.
인내심없는 개발자를 위한 자바스크립트 - 한줄씩 영어공부하기.인내심없는 개발자를 위한 자바스크립트 - 한줄씩 영어공부하기.
인내심없는 개발자를 위한 자바스크립트 - 한줄씩 영어공부하기.
 
티켓몬스터를 위한 PHP 개발 방법
티켓몬스터를 위한 PHP 개발 방법티켓몬스터를 위한 PHP 개발 방법
티켓몬스터를 위한 PHP 개발 방법
 
Gulp 입문
Gulp 입문 Gulp 입문
Gulp 입문
 
모바일 크로스플랫폼 비교 - 월간슬라이드 4월
모바일 크로스플랫폼 비교 - 월간슬라이드 4월모바일 크로스플랫폼 비교 - 월간슬라이드 4월
모바일 크로스플랫폼 비교 - 월간슬라이드 4월
 
112 deview
112 deview112 deview
112 deview
 
워드프레스 기초 (ABCD) #1
워드프레스 기초 (ABCD) #1워드프레스 기초 (ABCD) #1
워드프레스 기초 (ABCD) #1
 
아이폰에 포팅해보기
아이폰에 포팅해보기아이폰에 포팅해보기
아이폰에 포팅해보기
 
Django개발은 PyCharm에서
Django개발은 PyCharm에서Django개발은 PyCharm에서
Django개발은 PyCharm에서
 
Boss2D 설치과정
Boss2D 설치과정Boss2D 설치과정
Boss2D 설치과정
 
[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기
[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기
[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기
 
그루비 소개 발표자료 - 김연수
그루비 소개 발표자료 - 김연수그루비 소개 발표자료 - 김연수
그루비 소개 발표자료 - 김연수
 
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
 

Ähnlich wie c++ API디자인 ch9. 발표자료

XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXpressEngine
 
처음 시작하는 라라벨
처음 시작하는 라라벨처음 시작하는 라라벨
처음 시작하는 라라벨KwangSeob Jeong
 
안드로이드 빌드: 설탕없는 세계
안드로이드 빌드: 설탕없는 세계안드로이드 빌드: 설탕없는 세계
안드로이드 빌드: 설탕없는 세계Leonardo YongUk Kim
 
[H3 2012] Open API 와 Ruby on Rails 에 대한 이야기
[H3 2012] Open API 와 Ruby on Rails 에 대한 이야기[H3 2012] Open API 와 Ruby on Rails 에 대한 이야기
[H3 2012] Open API 와 Ruby on Rails 에 대한 이야기KTH, 케이티하이텔
 
6. code level reversing
6. code level reversing6. code level reversing
6. code level reversingYoungjun Chang
 
20160414 ROS 2차 강의 (for 아스라다 팀)
20160414 ROS 2차 강의 (for 아스라다 팀)20160414 ROS 2차 강의 (for 아스라다 팀)
20160414 ROS 2차 강의 (for 아스라다 팀)Yoonseok Pyo
 
Angular2 톺아보기
Angular2 톺아보기 Angular2 톺아보기
Angular2 톺아보기 철민 배
 
20160420 ROS 3차 강의 (for 아스라다 팀)
20160420 ROS 3차 강의 (for 아스라다 팀)20160420 ROS 3차 강의 (for 아스라다 팀)
20160420 ROS 3차 강의 (for 아스라다 팀)Yoonseok Pyo
 
[스프링 스터디 2일차] AOP
[스프링 스터디 2일차] AOP[스프링 스터디 2일차] AOP
[스프링 스터디 2일차] AOPAnselmKim
 
Patterns for effectviely documenting frameworks
Patterns for effectviely documenting frameworksPatterns for effectviely documenting frameworks
Patterns for effectviely documenting frameworksSunuk Park
 
올챙이(Tadpole for DB Tools)로 살펴보는 Eclipse RAP
올챙이(Tadpole for DB Tools)로 살펴보는 Eclipse RAP올챙이(Tadpole for DB Tools)로 살펴보는 Eclipse RAP
올챙이(Tadpole for DB Tools)로 살펴보는 Eclipse RAPcho hyun jong
 
텀 프로젝트에서 제품 프로젝트로 - 성준영님
텀 프로젝트에서 제품 프로젝트로 - 성준영님텀 프로젝트에서 제품 프로젝트로 - 성준영님
텀 프로젝트에서 제품 프로젝트로 - 성준영님NAVER D2
 
Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기KwangSeob Jeong
 

Ähnlich wie c++ API디자인 ch9. 발표자료 (20)

XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
 
처음 시작하는 라라벨
처음 시작하는 라라벨처음 시작하는 라라벨
처음 시작하는 라라벨
 
안드로이드 빌드: 설탕없는 세계
안드로이드 빌드: 설탕없는 세계안드로이드 빌드: 설탕없는 세계
안드로이드 빌드: 설탕없는 세계
 
[H3 2012] Open API 와 Ruby on Rails 에 대한 이야기
[H3 2012] Open API 와 Ruby on Rails 에 대한 이야기[H3 2012] Open API 와 Ruby on Rails 에 대한 이야기
[H3 2012] Open API 와 Ruby on Rails 에 대한 이야기
 
6. code level reversing
6. code level reversing6. code level reversing
6. code level reversing
 
20160414 ROS 2차 강의 (for 아스라다 팀)
20160414 ROS 2차 강의 (for 아스라다 팀)20160414 ROS 2차 강의 (for 아스라다 팀)
20160414 ROS 2차 강의 (for 아스라다 팀)
 
Angular2 톺아보기
Angular2 톺아보기 Angular2 톺아보기
Angular2 톺아보기
 
20160420 ROS 3차 강의 (for 아스라다 팀)
20160420 ROS 3차 강의 (for 아스라다 팀)20160420 ROS 3차 강의 (for 아스라다 팀)
20160420 ROS 3차 강의 (for 아스라다 팀)
 
C++ api design 품질
C++ api design 품질C++ api design 품질
C++ api design 품질
 
Manage book project
Manage book projectManage book project
Manage book project
 
Manage book project
Manage book projectManage book project
Manage book project
 
Linq
LinqLinq
Linq
 
[스프링 스터디 2일차] AOP
[스프링 스터디 2일차] AOP[스프링 스터디 2일차] AOP
[스프링 스터디 2일차] AOP
 
Patterns for effectviely documenting frameworks
Patterns for effectviely documenting frameworksPatterns for effectviely documenting frameworks
Patterns for effectviely documenting frameworks
 
올챙이(Tadpole for DB Tools)로 살펴보는 Eclipse RAP
올챙이(Tadpole for DB Tools)로 살펴보는 Eclipse RAP올챙이(Tadpole for DB Tools)로 살펴보는 Eclipse RAP
올챙이(Tadpole for DB Tools)로 살펴보는 Eclipse RAP
 
텀 프로젝트에서 제품 프로젝트로 - 성준영님
텀 프로젝트에서 제품 프로젝트로 - 성준영님텀 프로젝트에서 제품 프로젝트로 - 성준영님
텀 프로젝트에서 제품 프로젝트로 - 성준영님
 
Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기
 
Node.js in Flitto
Node.js in FlittoNode.js in Flitto
Node.js in Flitto
 
J2 Ee
J2 EeJ2 Ee
J2 Ee
 
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
 

Mehr von Mungyu Choi

HTTP 완벽가이드 - ch15. 엔터티, 인코딩 (Entities and Encoding)
HTTP 완벽가이드 - ch15. 엔터티, 인코딩 (Entities and Encoding)HTTP 완벽가이드 - ch15. 엔터티, 인코딩 (Entities and Encoding)
HTTP 완벽가이드 - ch15. 엔터티, 인코딩 (Entities and Encoding)Mungyu Choi
 
HTTP 완벽가이드 - ch5. web server
HTTP 완벽가이드 - ch5. web serverHTTP 완벽가이드 - ch5. web server
HTTP 완벽가이드 - ch5. web serverMungyu Choi
 
learning spark - Chatper8. Tuning and Debugging
learning spark - Chatper8. Tuning and Debugginglearning spark - Chatper8. Tuning and Debugging
learning spark - Chatper8. Tuning and DebuggingMungyu Choi
 
Chapter3 - learning spark
Chapter3 - learning sparkChapter3 - learning spark
Chapter3 - learning sparkMungyu Choi
 
Elasticsearch server Chapter5
Elasticsearch server Chapter5Elasticsearch server Chapter5
Elasticsearch server Chapter5Mungyu Choi
 
JVM과 톰캣 튜닝
JVM과 톰캣 튜닝JVM과 톰캣 튜닝
JVM과 톰캣 튜닝Mungyu Choi
 
조대협의 서버 사이드 - 대용량 아키텍처와 성능튜닝
조대협의 서버 사이드 - 대용량 아키텍처와 성능튜닝조대협의 서버 사이드 - 대용량 아키텍처와 성능튜닝
조대협의 서버 사이드 - 대용량 아키텍처와 성능튜닝Mungyu Choi
 
Nodejs 트래픽 라우팅, 파일 서비스, 미들웨어
Nodejs 트래픽 라우팅, 파일 서비스, 미들웨어Nodejs 트래픽 라우팅, 파일 서비스, 미들웨어
Nodejs 트래픽 라우팅, 파일 서비스, 미들웨어Mungyu Choi
 
nodejs websocket & SOCKET.IO
nodejs websocket & SOCKET.IOnodejs websocket & SOCKET.IO
nodejs websocket & SOCKET.IOMungyu Choi
 
정렬(버블정렬,선택정렬,삽입정렬)
정렬(버블정렬,선택정렬,삽입정렬)정렬(버블정렬,선택정렬,삽입정렬)
정렬(버블정렬,선택정렬,삽입정렬)Mungyu Choi
 
Ch11. server infra
Ch11. server infraCh11. server infra
Ch11. server infraMungyu Choi
 
대규모 서비스를 지탱하는 기술 ch6
대규모 서비스를 지탱하는 기술 ch6대규모 서비스를 지탱하는 기술 ch6
대규모 서비스를 지탱하는 기술 ch6Mungyu Choi
 
4.1 단일호스트의 부하
4.1 단일호스트의 부하4.1 단일호스트의 부하
4.1 단일호스트의 부하Mungyu Choi
 

Mehr von Mungyu Choi (18)

HTTP 완벽가이드 - ch15. 엔터티, 인코딩 (Entities and Encoding)
HTTP 완벽가이드 - ch15. 엔터티, 인코딩 (Entities and Encoding)HTTP 완벽가이드 - ch15. 엔터티, 인코딩 (Entities and Encoding)
HTTP 완벽가이드 - ch15. 엔터티, 인코딩 (Entities and Encoding)
 
HTTP 완벽가이드 - ch5. web server
HTTP 완벽가이드 - ch5. web serverHTTP 완벽가이드 - ch5. web server
HTTP 완벽가이드 - ch5. web server
 
learning spark - Chatper8. Tuning and Debugging
learning spark - Chatper8. Tuning and Debugginglearning spark - Chatper8. Tuning and Debugging
learning spark - Chatper8. Tuning and Debugging
 
Chapter3 - learning spark
Chapter3 - learning sparkChapter3 - learning spark
Chapter3 - learning spark
 
Elasticsearch server Chapter5
Elasticsearch server Chapter5Elasticsearch server Chapter5
Elasticsearch server Chapter5
 
JVM과 톰캣 튜닝
JVM과 톰캣 튜닝JVM과 톰캣 튜닝
JVM과 톰캣 튜닝
 
조대협의 서버 사이드 - 대용량 아키텍처와 성능튜닝
조대협의 서버 사이드 - 대용량 아키텍처와 성능튜닝조대협의 서버 사이드 - 대용량 아키텍처와 성능튜닝
조대협의 서버 사이드 - 대용량 아키텍처와 성능튜닝
 
Nodejs 트래픽 라우팅, 파일 서비스, 미들웨어
Nodejs 트래픽 라우팅, 파일 서비스, 미들웨어Nodejs 트래픽 라우팅, 파일 서비스, 미들웨어
Nodejs 트래픽 라우팅, 파일 서비스, 미들웨어
 
nodejs websocket & SOCKET.IO
nodejs websocket & SOCKET.IOnodejs websocket & SOCKET.IO
nodejs websocket & SOCKET.IO
 
정렬(버블정렬,선택정렬,삽입정렬)
정렬(버블정렬,선택정렬,삽입정렬)정렬(버블정렬,선택정렬,삽입정렬)
정렬(버블정렬,선택정렬,삽입정렬)
 
b+tree
b+treeb+tree
b+tree
 
Hdfs
HdfsHdfs
Hdfs
 
hadoop ch1
hadoop ch1hadoop ch1
hadoop ch1
 
A tour of go
A tour of goA tour of go
A tour of go
 
Ch11. server infra
Ch11. server infraCh11. server infra
Ch11. server infra
 
대규모 서비스를 지탱하는 기술 ch6
대규모 서비스를 지탱하는 기술 ch6대규모 서비스를 지탱하는 기술 ch6
대규모 서비스를 지탱하는 기술 ch6
 
4.1 단일호스트의 부하
4.1 단일호스트의 부하4.1 단일호스트의 부하
4.1 단일호스트의 부하
 
Chap4_2
Chap4_2Chap4_2
Chap4_2
 

c++ API디자인 ch9. 발표자료

  • 2. overview 재사용을 말로 하기는 쉽지만 정작 그것을 실행 하기란 어려운 일이다. 훌륭한 설계와 잘 정리된 문서화 이 둘 모두를 요구하기 때문이다. 문서화 없이 재사용된 컴포넌트는 절대 볼 수 없 을 것이다. -데이비드 L. 파르나스
  • 3. 9.1 문서화의 이유 -API는 기능적 명세서
  • 4. class RGBColor{ RGBColor(float, float, float); ~RGBColor(); float Red() const; float Green() const; float Blue() const; void Set(float, float, float); }
  • 5. - 무엇을 알 수 있었을까요? 메서드가 정의하는 리턴 타입, 파라미터 하지만, 클래스가 무엇을 수행하는지는 알기 힘듭니다.
  • 6. /// 하나의 RGB(Red, Green, Blue)색을 표현한다. /// (0,0,0)은 검은색 그리고 (1,1,1)은 흰색 class RGBColor{ /// 0부터 1사이에 있는 float값을 이용해서 RGB색을 생성 RGBColor(float red, float green, float blue); ~RGBColor(); //색의 빨강색 요소를 리턴한다. 값의 범위는 0부터 1사이다. float Red() const; float Green() const; float Blue() const; void Set(float, float, float); }
  • 7. 9.1.2 Documenting the Interface’s Contract 계약 프로그래밍? 소프트웨어 컴포넌트는 자신들이 제공할 서 비스에 대한 계약,의무를 제공하며 이 서비스의 클라이언트는 컴포넌트를 통해 그 계약에 합의 한다는 것?
  • 8. 9.1.2 Documenting the Interface’s Contract client 컴포넌트 서비스 클라이언트는 서비스를 계약했다
  • 9. 9.1.2 Documenting the Interface’s Contract -계약 모델의 원칙 1. 사전조건 2. 사후조건 3. 클래스 불변조건
  • 10. 9.1.2 Documenting the Interface’s Contract 1. 사전조건 클라리언트는 함수를 호출하기 전에 요구된 사전조건들을 만족시켜야한다.
  • 11. 9.1.2 Documenting the Interface’s Contract 2. 사후조건 함수는 동작이 완료되면 특정조건이 만족될 것이라는 점을 보장한다.
  • 12. 9.1.2 Documenting the Interface’s Contract 3. 클래스 불변조건 클래스의 모든 인스턴스가 반드시 만족시켜야 하는 제약조건
  • 13. /// /// brief Calculate the square root of a floating point number. /// pre value >= 0 /// post fabs((result * result) value) < 0.001 /// double SquareRoot(double value);
  • 14. 9.1.2 Documenting the Interface’s Contract 상속된 클래스의 사전조건은 그 부모 클래스가 가진것보다 강하지 않고 오 히려 약해 질 수 있다. -켄 퓨
  • 15. 9.1.3 행동 변화에 대한 의사소통 소스코드가 바뀌면 문서화도 고쳐주어라
  • 16. 9.1.4 문서화의 대상 API의 모든 public요소를 문서화 해야한다. 클래스, 함수, 열거형, 상수와, 타입정의, 파라미터, 리턴값, 메서드의 행동 뿐만 아니라, 나머지 API관계에 대한 설명 등등
  • 17. 9.2 문서화의 유형 - 사용자가 직접 참여
  • 18. 9.2 문서화의 유형 - 사용자가 직접 참여
  • 19. 9.2 문서화의 유형 -자동화된 API문서화 주석을 자동으로 생성해주는 툴 주석을 추출해서, 문서화해주는 툴 Doxygen, Groc, Swagger
  • 20. 9.2.2 개요 문서화 -API의 고차원적 개념도(다이어그램) -핵심 개념, 특징과 용어 -API를 사용하기 위한 시스템 요구사항 -소프트웨어 설치,설정방법 -피드백, 버그 신고는?
  • 21. 9.2.3 예제와 튜토리얼 -간단하고 쉬운 예제 -작업 데모 -튜토리얼과 세부 설명 -사용자 참여 -FAQ
  • 22. 9.2.5 라이선스 정보 1. 등록상표 소유권이 공급자에 귀속 소스코드를 제공 X 라이선스 비용 요구 역공학, 사용자 컴퓨터수, 개발자수 제한
  • 23. 9.2.5 라이선스 정보 2. 자유 오픈 소프트웨어 어떤 제약없이 수정, 배포 복제 가능 -카피레프트 -자유형
  • 27. 9.4 DOXYGEN - 주석 /** /// * ... text … /// … text ... */ /// /*! //! * ... text … //! … text ... */ //!
  • 28. 9.4 DOXYGEN - 파일주석 /// /// file <filename> /// /// brief <brief description> /// /// author <list of author names> /// date <date description> /// since <API version when added> /// /// <description of module> /// /// <license and copyright information> ///
  • 29. 9.4 DOXYGEN - 클래스 주석 /// /// class <class name> [header file] [header name] /// /// brief <brief description> /// /// <detailed description> /// /// author <list of author names> /// date <date description> /// since <API version when added> ///
  • 30. 9.4 DOXYGEN - 메서드 주석 /// /// brief <brief description> /// /// <detailed description> /// /// param[in] <input parameter name> <description> /// param[out] <output parameter name> <description> /// return <description of the return value> /// since <API version when added> /// see <methods to list in the see also section> /// note <optional note about the method> ///