크로스 플랫폼 핵심 모듈 설계의 기술 (모바일, 리눅스, 맥, 윈도우를 아우르는 C++ 라이브러리 구축 바이블)

크로스 플랫폼 핵심 모듈 설계의 기술 (모바일, 리눅스, 맥, 윈도우를 아우르는 C++ 라이브러리 구축 바이블)

$38.00
Description
이 책은 지금 당장 유행하는 기술에 관한 책이 아니다. 기술 트렌드에 관계 없이 개발자라면 언젠가 누구나 겪을 법한 내용을 핵심 모듈과 크로스 플랫폼 설계의 관점에서 정리하였다. 변수, 문자열, 예외 처리, 암호화, 디버깅, 테스팅 등 수많은 분야에서 여러분이 알고 있는 지식들을 더욱 더 견고하게 해줄 것이다. 지금 당장은 아니더라도 앞으로 닥칠 위기에 크게 도움을 줄 수도 있다. 차근차근 처음부터 읽어볼 수도 있고 관심 분야를 선택해서 읽어볼 수 있게 구성하였다.

대상 독자
1. 개발 기본기가 부족해 실무에서 삽질이 많은 개발자
2. 개발 경력이 많지만 특급 개발자로 내세우기엔 2%가 부족한 개발자
3. JAVA 등의 다른 언어의 한계에 도달해 C++을 배우고 싶은 개발자
4. 윈도우 개발자가 리눅스로, 리눅스 개발자가 윈도우로 영역을 넓히고 싶은 개발자
5. 대칭키와 공개키 암호화에 대해 제대로 알고 싶은 개발자
6. 시스템 API와 친하지 않은 개발자
7. 리눅스 서버와 통신하는 윈도우 클라이언트 개발자 혹은 그 반대
8. 정적 라이브러리와 동적 라이브러리를 자유자재로 다루고 싶은 개발자
9. 프로세스 생성과 공유 메모리, 파일 시스템 등을 잘 이해하고 싶은 개발자
10. 타임존과 그 프로그래밍 방법에 대해 배우고 싶은 개발자
11. 스레드와 동기화 객체에 대해 뿌리 깊이 이해하고 싶은 개발자
12. 나만의 공통 모듈을 개발하고 싶은 개발자
13. 유니코드로 인해 고통받는 개발자
14. 이 모든 것을 다 떠나서 친구 같은 개발 바이블을 갖고 싶은 개발자
저자

전상현

리팩토링에능합니다.항상구조를뒤바꾸며좀더효율적인형태를창안하려노력합니다.이능력은프로젝트중장기시점에빛을발합니다.안정성을도모하고지속적으로변화하는요구사항을무리없이수용하는가치를지니고있으니까요.
더큰가치도숨어있습니다.바로“인생을압축해서살게해주는기술”이라는점에서요.안정적이고변화에유연하다는것은같은일을더짧은시간에적은노력으로해결할수있다는것과같습니다.
남들이프로젝트하나를마칠기간에둘혹은셋을마칠수있다는것이죠.그것들이모이면개발인생이압축됩니다.덕분에좀더빠르게성장한것같습니다.꽤많은경험과풍파를거치고도아직은서른일곱이라는나이가감사할따름입니다.

목차

지은이의말
이책을읽는방법

1장크로스플랫폼으로개발하라
1.1왜C++인가?
1.2핵심모듈은무엇인가?
 1.2.1핵심모듈의첫번째특성:목적
 1.2.2핵심모듈의두번째특성:생명력
 1.2.3핵심모듈의세번째특성:진입장벽
1.3아키텍트는누구인가?
1.4크로스플랫폼으로개발하라
 1.4.1크로스플랫폼개발기법:런타임기법과컴파일기법
 1.4.2크로스플랫폼개발이필요한두가지관점:디바이스와개발인력

2장개발기법
2.1개발기법의필요성
2.2컴파일러의활용
 2.2.1상호참조오류
 2.2.2선언과구현의분리
 2.2.3선언에직접구현하는경우
2.3링커
 2.3.1링커의역할
 2.3.2정적라이브러리생성
 2.3.3동적라이브러리생성
 2.3.4템플릿의사용과링크에러
2.4모듈트리
 2.4.1규모가큰모듈의종속성문제
 2.4.2모듈의순환참조구조
 2.4.3핵심모듈의형태
2.5공통헤더파일(stdafx.h)과대표헤더파일의활용68
2.6테스트기법
 2.6.1가장간단한테스트코드
 2.6.2테스트모듈의일반화
 2.6.3테스트조건구성

3장핵심모듈설계
3.1네임스페이스의사용
3.2세부모듈정의
3.3모듈매트릭스
3.4크로스플랫폼
3.5오픈소스의적용
3.6소스코드구조
3.7개발환경구축
 3.7.1GUI개발환경
 3.7.2콘솔개발환경
3.8코드중복의제거를위한원소스듀얼컴파일

4장변수형정의
4.1기본적으로제공되는변수형
4.2long형변수에대해서
 4.2.1개발자들사이에논란이있는각변수형의크기
 4.2.2플랫폼에따라달라지는변수의크기
 4.2.3왜long형변수만차이가날까?
4.3개념적변수형정의
4.4포인터변수형정의
4.5const변수형정의
4.6문자변수형정의
4.7리눅스계열정의

5장문자열함수들
5.1TCHAR타입
5.2char형함수들과wchar_t형함수들
5.3문자열함수구현의필요성
5.4중복코드회피기법
[여기서잠깐]반복적인코드를회피하는방법
5.5표준문자열함수들
[여기서잠깐]static함수에대해서
5.6StringCch,StringCb함수들
5.7String..Ex함수들
5.8std::string함수들
5.9와일드카드가포함된문자열비교함수
5.10숫자변환함수들
 5.10.1숫자에서문자열로변환하는함수군
 5.10.2자연수파싱함수 
 5.10.38진법,16진법파싱함수
 5.10.4정수파싱함수
 5.10.5실수파싱함수
 5.10.6지수표기파싱함수
 5.10.7문자열에서변수로변환하는함수군
 5.10.8문자열에서템플릿변수로변환하는함수군

6장유니코드
6.1ASCII코드와EUCKR,멀티바이트스트링
6.2코드페이지와유니코드문자집합
[여기서잠깐]EUCKR과코드페이지949에대해서
6.3유니코드인코딩
6.4UTF8,UTF16,UTF32
6.5유니코드와char,wchar_t변수형의관계
6.6유니코드인코딩변환함수들
6.7코드를작성할때필요한변환함수들
6.8BOM에대해서
6.9유니코드변환함수구현
 6.9.1유니코드인코딩변환함수선언
 6.9.2WCS및MBS변환함수선언
 6.9.3TCS및NTCS변환함수선언및구현
 6.9.4WCS및MBS변환함수구현
 6.9.5윈도우용유니코드문자셋변환함수구현 
 6.9.6리눅스용유니코드문자셋변환함수구현
 6.9.7유니코드인코딩변환함수구현

7장예외처리
7.1예상치못한예외상황
7.2try-catch구문사용
7.3무엇을던지고무엇을받을것인가?
7.4exception객체의생명주기
7.5함수바깥으로예외던지기
7.6실무에서의예외처리기법

8장인코딩,암호화,암호식
8.1용어의정리
8.2인코딩의여러개념
8.3해시함수구현
8.4Base64구현
[여기서잠깐]메모리반환방식에대해서
8.5대칭키암호화구현
 8.5.1블록암호화알고리즘
 8.5.2블록암호화키와함수
 8.5.3블록암호화운용방식
 8.5.4블록암호화의설계
 8.5.5인터페이스코드작성 
[여기서잠깐]인터페이스를class가아닌struct로선언하는이유는?
[여기서잠깐]다이아몬드상속구조에대해서
 8.5.6알고리즘코드작성
 8.5.7운용방식코드작성
[여기서잠깐]인터페이스소멸자virtual선언의중요성
8.6비대칭키암호화
 8.6.1.디피-헬먼키교환
 8.6.2.RSA암호식
 8.6.3.엘가말암호식
 8.6.4.ECC암호식
[여기서잠깐]타원곡선암호화에대해서
 8.6.5.비대칭키암호화함수정의
 8.6.5.비대칭키암호화함수구현

9장디버그로그함수구현
9.1무엇을남길것인가?
9.2모든로그가필요한것인가?
9.3로그의1차분류:지역
9.4로그의2차분류:타입
9.5로깅함수인터페이스
9.6로그메시지의선택적상세화
9.7어디에로그메시지를남길것인가?
9.8성능vs정확성
9.9로그파일로테이션
[여기서잠깐]로그파일로테이션버그경험에대해서
9.10로그인스턴스관리
9.11로그함수들을핵심모듈의어느위치에둘것인가?
9.12로그인스턴스소멸시점369싱글톤이무엇인가요?

10장크로스플랫폼구축
10.1크로스플랫폼코드의기초
10.2에러코드처리
 10.2.1반환되는에러코드에따라로직을구현해야하는경우
 10.2.2직접개발한함수에서의에러코드사용
[여기서잠깐]또다른에러코드처리방법에대해서
 10.2.3에러코드타입정의
10.3컴파일기법
10.4플랫폼고유의함수들
10.5크로스플랫폼코드의최종형태
10.6공통함수정의
 10.6.1함수명에대해서
 10.6.2리턴값처리

11장시스템공통함수들
11.1유닉스시간변환함수
11.2윈도우시간변환함수
11.3요일계산함수
11.4현재시스템의엔디안판단함수
11.5바이트오더링변환함수군
11.6빅엔디안/리틀엔디안으로부터복원하는함수군

12장윈도우:시스템정보함수군
12.1에러코드조회및설정
[여기서잠깐]스레드에안전한스레드지역변수에대해서
12.2지역시간과협정세계시간
12.3타임존
12.4사용자및컴퓨터이름조회
[여기서잠깐]날짜변경선과본초자오선에대해서
[여기서잠깐]GetComputerName함수호출할때의버퍼크기
12.5스레드와프로세스ID및핸들조회
12.6경과시간계산및유휴상태설정

13장윈도우:파일및디렉토리관련함수군
13.1POSIX파일함수
13.2네이티브파일함수
13.3시스템디렉토리와임시디렉토리
13.4파일존재여부확인,복사,이동,삭제
13.5디렉토리생성,삭제
13.6디렉토리탐색
[여기서잠깐]클래스변수가담겨있는구조체의초기화
13.7현재실행경로확인,설정
13.8현재파일명얻어오기

14장윈도우:멀티스레드동시성제어함수들커널객체란?
14.1세마포어
14.2뮤텍스
[여기서잠깐]뮤텍스를이용한프로세스생성제한기법
14.3크리티컬섹션
14.4이벤트
14.5원자성이보존되는함수군
[여기서잠깐]변수의volatile선언에대해서

15장윈도우:프로세스와스레드,동적라이브러리
15.1스레드
[여기서잠깐]윈도우의커널객체관리함수들
15.2스레드우선순위
15.3프로세스관련함수군
15.4동적라이브러리호출
15.5동적라이브러리제작
15.6공유메모리,메모리매핑파일
16장리눅스:시스템정보함수군
16.1에러코드조회및설정
16.2지역시간과협정세계시간
16.3타임존
16.5사용자및컴퓨터이름조회
16.6스레드와프로세스ID및핸들조회
16.7경과시간계산및유휴상태설정

17장리눅스:파일및디렉토리관련함수군
17.1POSIX파일시스템함수
 17.1.1네이티브파일함수
17.2시스템디렉토리,임시디렉토리
[여기서잠깐]파일경로만들때의팁
17.4파일존재여부확인,복사,이동,삭제
 17.4.1파일존재여부확인하기:access()
 17.4.2파일복사하기:API가존재하지않음
 17.4.3파일이동하기:rename()
 17.4.4파일삭제하기:unlink()
17.5디렉토리생성,삭제
17.6디렉토리탐색
17.7현재실행경로확인,설정
17.8현재파일명얻어오기
[여기서잠깐]dladdr로파일경로조회에실패하는경우에대해서

18장리눅스:멀티스레드동시성제어함수들
18.1세마포어
 18.1.1세마포어함수군
 18.1.2세마포어객체관리방식:윈도우
 18.1.3세마포어객체관리방식:리눅스
 18.1.4세마포어함수군작성하기605SharedPointer에대해서
18.2뮤텍스
 18.2.1뮤텍스의특성
 18.2.2뮤텍스구현하기
18.3크리티컬섹션
18.4이벤트
18.5원자성이보존되는함수군

19장리눅스:프로세스와스레드,동적라이브러리
19.1스레드
 19.1.1스레드제어함수소개
 19.1.2스레드함수구현하기
19.2스레드우선순위
 19.2.1스레드스케줄링정책과우선순위조정
 19.2.2스레드우선순위에따른실행결과확인
19.3프로세스관련함수군
19.4동적라이브러리호출
19.5동적라이브러리제작
19.6공유메모리,메모리매핑파일

20장맥:OSX를위한시스템함수들구현
20.1이름없는세마포어
20.2일부상수들의이름변경
20.3현재파일명을얻어오는G

출판사 서평

어떤플랫폼에서도자유롭게실행되는코딩의기술

_중복코드를제거하기위해컴파일러와링커를응용하는방법들
_윈도우와리눅스의유니코드처리방식에대해정확하게이해할수있는TCHAR의기술
_견고한코드를작성하게하는예외처리의기술
_오픈소스혹은상용제품들의로그옵션들에대해속속들이알게해주는디버그로그개발기법
_서로다른인코딩을쉽게사용하기위한인터페이스를구축하기위한기술
_윈도우와리눅스,맥뿐아니라모바일플랫폼안드로이드와아이폰까지전천후로개발할수있는크로스플랫폼의기술
_규칙성과불규칙성에서배우는윈도우시스템함수들
_윈도우시스템과차이점과공통점을배울수있는리눅스시스템함수들
_리눅스와아주유사하며일부가다른맥시스템함수들
_크로스플랫폼완성후에주요한기능중심으로클래스와함수를만들어내는기술

최근에는Boost등의이미잘만들어진크로스플랫폼모듈들이제공되고있는데,왜그와비슷한코드를다시작성해야하느냐고비판할지모릅니다.물론결과물자체는무의미할수있습니다.
하지만개발하는과정에서겪는여러가지문제들의해결책을찾으면서얻게되는설계및개발지식들은이후의다른소프트웨어를개발할때분명히큰도움이될것입니다.단순히사용하기만해서는그런내공을쌓을수가없습니다.
게다가다른사람보다더깊이있는지식을얻기위해서는무의미한이런시도가거의유일한방법일지도모릅니다.
_저자서문중에서