2. 애플리케이션 프로그래밍 인터페이스
•
•
API 란 기능을 모듈화하는 재사용 가능한 블록을 뜻한다
간단한 함수에서부터 수백 개의 클래스일수 도 있음
애플리케이션 코드
API
API
API
API
API
3. 계약과 계약자
•
집을 혼자 다 지을 수도 있지만 , 전문 계약자들을 고용 ( 계약 ) 함으
로써 일을 위임해서 더 효율적으로 집을 지을 수 있다
– 일의 분업이 가능하며
– 운이 좋을 경우 공짜로 일해줄 사람을 찾을 수 도 있음
– 무엇보다 전문 지식이 없어도 집을 지을 수 있다
•
API 를 전문 계약자들이라 한다면 , 적당한 API 를 사용하여 애플리
케이션을 구현하는 것을 계약에 비유할 수 있다
4. C++ API
•
C++ API 는 다음과 같은 요소를 포함한다
– 헤더 : 인터페이스를 정의하는 .h 파일의 모음
– 라이브러리 : API 를 구현하는 라이브러리
– 문서화 : API 를 사용하는 방법 . API 의 모든 클래스나 생성된 메타데이터
•
윈도우 API, 표준 템플릿 라이브러리 C++ API 의 예이다
5. API 설계는 어떻게 틀린가 ?
•
•
•
•
•
•
API 수많은 개발자들에 의해서 다양하게 쓰이는 인터페이스를 작성
하는 것이다
API 의 수정은 자신과 의존 관계를 맺는 모든 애플리케이션에 영향을
미친다
API 를 변경할 때 하위 호환을 제공해야 한다
계획 , 설계 , 버전 관리 및 리뷰에 많은 자원을 소비한다
문서화가 꼭 필요하다
테스트 자동화가 필요하다
6. 왜 API 를 쓰는가 ? - 코드
•
•
•
•
•
•
•
구현을 은닉할 수 있다
지속성을 향상 시킨다
모듈화 한다
중복 코드 제거
가정하에 작성된 하드코드 제거
쉬운 코드 변경
쉬운 최적화
7. 왜 API 를 쓰는가 ? - 재사용
•
•
•
•
기존 코드를 재사용함으로 효율적 개발을 가능하게 한다
필요한 기능을 직접 구현하기 보다 오픈 소스 등을 사용할 수 있다
구체적인 구현 내용을 알 필요 없으며 , 개발기간이 단축된다
API 사용의 단점 중 하나는 API 는 내가 원하는 것 보다 일반적인 형
태의 인터페이스를 가지기 때문에 이를 위한 추가 작업이 필요하다는
것이다
8. 왜 API 를 쓰는가 ? - 병렬 개발
•
•
•
내가 개발하는 코드가 동료가 개발하는 코드에 의존성을 가지고 있다
고 가정하자
내가 개발하는 API 가 다 완성되어야 , 동료가 API 를 개발할 수도
있는 것일까 ?
나와 동료가 미리 API 정의한다면 동시에 개발이 가능하게 된다
9. API 를 사용하지 말아야 할 때
•
사용하려는 API 에 라이선스 제한이 있을 경우
– GPL 라이선스라면 코드를 공개해야 한다
– 라이선스 비용이 비쌀 경우
•
기능이 부적합할 때
– 환경을 지원하지 못할 때
– 성능이 나쁘거나 원하는 처리결과를 제공하지 못할 때
•
소스 코드의 부재
– 라이브러리에 버그가 있을 경우
•
충실하지 못한 문서화
– 사용법이 충분하게 설명되지 않는 경우
10. 파일 포맷과 네트워크 프로토콜
•
•
•
•
•
정보 교환을 위한 표준 인터페이스 또는 명세를 정의
애플리케이션을 프로그래밍하기 위한 인터페이스가 아님
오히려 명세 변경을 관리하기 위한 API 의 구현이 필요
파일 포맷을 일고 쓰는 API 를 개발하면 , 파일 포맷이 바뀌었을 때
구현만 바꾸면 된다
네트워크 접근을 API 로 추상화 하였다면 , UDP 가 TCP 로 바뀌어
도 인터페이스에는 영향이 미치지 않는다
11. 책의 구성
•
•
•
•
•
•
•
•
•
2 장 품질 : 정보 은폐 , 완전성 최소화 , 느슨한 연결과 같이 품질에
관련된 내용
3 장 패턴 : 디자인 패턴과 관용법
4 장 설계 : 구조 , 유즈 케이스 모델링과 프로젝트 진행시 직면하는
어려움을 해결하는 방법
5 장 API 개발 방법 : API 구현 방법과 예시
6 장 C++ 의 올바른 사용법 : API 설계에 영향을 미치는 C++ 의 다
양한 기능
7 장 성능 : 고성능 API 를 구현하는 방법
8 장 버전 관리 : API 버전 관리 및 호환성 유지
9 장 문서화 : API 문서화
10 장 테스트 : 자동화 테스트 방법
12. 책의 구성
•
•
11 장 스크립팅 : 스크립트 언어에서 C++ API 를 사용하는 경우
12 장 확장성 : 플러그 인을 통한 확장