Presentation is loading. Please wait.

Presentation is loading. Please wait.

명품 C++ 프로그래밍 1장. C++ 시작.

Similar presentations


Presentation on theme: "명품 C++ 프로그래밍 1장. C++ 시작."— Presentation transcript:

1 명품 C++ 프로그래밍 1장. C++ 시작

2 세상을 먹어 치우는 소프트웨어 소프트웨어 기업의 세상 미국의 대형 서점 보더스 -> 아마존에 대패
블록버스터(Blockbuster) -> 네플릭스(Neflix)에 대패 eBay, Facebook, Groupon, Skype, Twitter, Android, 아이튠스, 판도라, 픽사 등 엄청난 소프트웨어 인력들을 필요로 하는 세상이 왔다.

3 프로그래밍과 프로그래밍 언어 프로그래밍 언어 기계어(machine language) 어셈블리어 고급언어
0, 1의 이진수로 구성된 언어 컴퓨터의 CPU는 본질적으로 기계어만 처리 가능 어셈블리어 기계어의 명령을 ADD, SUB, MOVE 등과 같은 상징적인 니모닉 기호 (mnemonic symbol)로 일대일 대응시킨 언어 어셈블러 : 어셈블리어 프로그램을 기계어 코드로 변환 고급언어 사람이 이해하기 쉽고 복잡한 작업, 자료 구조,알고리즘을 표현하기 위해 고안된 언어 Pascal, Basic, C/C++, Java, C# 컴파일러 : 고급 언어로 작성된 프로그램을 기계어 코드로 변환

4 사람과 컴퓨터, 기계어와 고급 언어 35 + 56 = ? 기계어 어셈블리어 C++ 01010000 00101001
LOAD AX 35 LOAD BX 56 ADD AX BX int i; i = ; 기계어 어셈블리어 C++ 어셈블 컴파일

5 프로그래밍 언어의 진화와 C++의 기원 Ken Tompson Martin Richards Ken Tompson과
Dennis Ritchie Bjarne Stroustrup Assembly BCPL Fortran Algol Basic C C++ Java C# Javascript Objective-C B 1970 1972 1983 1995 1967 1954 2000 1958 1964 Visual Basic 1991 Perl 1987 PHP

6 표준 C++ 프로그램의 중요성 C++ 언어의 표준 표준의 중요성 비 표준 C++ 프로그램
1998년 미국 표준원(ANSI, American National Standards Institute) C++ 언어에 대한 표준 설정 ISO/IEC 문서에 작성됨. 유료 문서 표준의 진화 1998년(C++98), 2003년(C++03), 2007년(C++TR1), 2011년 (C++11) 표준의 중요성 표준에 의해 작성된 C++ 프로그램 모든 플랫폼. 모든 표준 C++ 컴파일러에 의해 컴파일 동일한 실행 결과 보장 운영체제와 컴파일러의 종류에 관계없는 높은 호환성 비 표준 C++ 프로그램 Visual C++, Borland C++ 등 컴파일러 회사 고유의 비 표준 구문 특정 C++ 컴파일러에서만 컴파일 호환성 결여

7 표준/비표준 C++ 프로그램의 비교 #include <iostream> int main() {
std::cout << "Hello“; return 0; } 표준 C++ 규칙에 따라 작성된 C++ 프로그램 볼랜드 C++ 컴파일러 비주얼 C++ GNU C++ 컴퓨터 실행파일 int __cdecl main() { std::cout << "Hello"; 작성되지 않는 비주얼 C++ 프로그램 모든 C++ 컴파일러에 의해 컴파일 비주얼 C++ 전용 키워드

8 C++ 언어의 주요한 설계 목적 C 언어와의 호환성 객체 지향 개념 도입 엄격한 타입 체크 실행 시간의 효율성 저하 최소화
캡슐화, 상속, 다형성 소프트웨어의 재사용을 통해 생산성 향상 복잡하고 큰 규모의 소프트웨어의 작성, 관리, 유지보수 용이 엄격한 타입 체크 실행 시간 오류의 가능성을 줄임 디버깅 편리 실행 시간의 효율성 저하 최소화 실행 시간을 저하시키는 요소와 해결 작은 크기의 멤버 함수 잦은 호출 가능성 -> 인라인 함수로 실행 시간 저 하 해소

9 C 언어에 추가한 기능 인라인 함수(inline function) 함수 중복(function overloading)
함수 호출 대신 함수 코드의 확장 삽입 함수 중복(function overloading) 매개 변수의 개수나 타입이 다른 동일한 이름의 함수들 선언 디폴트 매개 변수(default parameter) 매개 변수에 디폴트 값이 전달되도록 함수 선언 참조와 참조 변수(reference) 하나의 변수에 별명을 사용하는 참조 변수 도입 참조에 의한 호출(call-by-reference) 함수 호출 시 참조 전달 new/delete 연산자 동적 메모리 할당/해제를 위해 new와 delete 연산자 도입 연산자 재정의 기존 C++ 연산자에 새로운 연산 정의 제네릭 함수와 클래스 데이터 타입에 의존하지 않고 일반화시킨 함수나 클래스 작성 가능

10 C++ 객체 지향 특성 - 캡슐화 캡슐화(Encapsulation) 클래스와 객체
데이터를 캡슐로 싸서 외부의 접근으로부터 보호 C++에서 클래스(class 키워드)로 캡슐 표현 클래스와 객체 클래스 – 객체를 만드는 틀 객체 – 클래스라는 틀에서 생겨난 실체 객체(object), 실체(instance)는 같은 뜻 객체 생성 클래스 (객체를 정의하는 틀) 객체들 - 실체 class Circle { private: int radius; // 반지름 값 public: Circle(int r) { radius = r; } double getArea() { return 3.14*radius*radius; } }; 멤버들 원을 추상화한 Circle 클래스 원 객체들(실체)

11 C++ 객체 지향 특성 - 상속성 객체 지향 상속(Inheritance) C++ 상속
자식이 부모의 유전자를 물려 받는 것과 유사 C++ 상속 객체가 자식 클래스의 멤버와 부모 클래스에 선언된 모양 그대로 멤버들을 가지고 탄생

12 C++ 객체 지향 특성 - 다형성 다형성(Polymorphism)
하나의 기능이 경우에 따라 다르게 보이거나 다르게 작동하는 현상 연산자 중복, 함수 중복, 함수 재정의(overriding) > 5 “남자” + “여자” > “남자여자” redColor 객체 + blueColor 객체 --> purpleColor 객체 + 연산자 중복 void add(int a, int b) { ... } void add(int a, int b, int c) { ... } void add(int a, double d) { ... } add 함수 중복 함수 재정의(오버라이딩)

13 C ++ 언어에서 객체 지향을 도입한 목적 소프트웨어 생산성 향상 실세계에 대한 쉬운 모델링
소프트웨어의 생명 주기 단축 문제 해결 필요 기 작성된 코드의 재사용 필요 C++ 클래스 상속 및 객체 재사용으로 해결 실세계에 대한 쉬운 모델링 과거의 소프트웨어 수학 계산이나 통계 처리에 편리한 절차 지향 언어가 적합 현대의 소프트웨어 물체 혹은 객체의 상호 작용에 대한 묘사가 필요 실세계는 객체로 구성된 세계 객체를 중심으로 하는 객체 지향 언어 적합

14 절차 지향 프로그래밍과 객체 지향 프로그래밍 실행하고자 하는 절차대로 일련의 명령어 나열.
흐름도를 설계하고 흐름도에 따라 프로그램 작성 객체들을 정의하고, 객체들의 상호 관계, 상호 작용으로 구현

15 C++와 제네릭 프로그래밍 제네릭 함수와 제네릭 클래스 제네릭 프로그래밍(generic programming)
제네릭 함수(generic function) 동일한 프로그램 코드에 다양한 데이터 타입을 적용할 수 있게 일반 화 시킨 함수 제네릭 클래스(generic class) 동일한 프로그램 코드에 다양한 데이터 타입을 적용할 수 있게 일반 화 시킨 클래스 template 키워드로 선언 템플릿 함수 혹은 템플릿 클래스라고도 부름 Java, C# 등 다른 언어에도 동일한 개념 있음 제네릭 프로그래밍(generic programming) 제네릭 함수와 제네릭 클래스를 활용하여 프로그램을 작성하는 새로운 프로그래밍 패러다임 점점 중요성이 높아지고 있음

16 C++ 언어의 아킬레스 C++ 언어는 C 언어와의 호환성 추구 장점 단점 기존에 개발된 C 프로그램 코드 활용
캡슐화의 원칙이 무너짐 C++에서 전역 변수와 전역 함수를 사용할 수 밖에 없음 부작용(side effect) 발생 염려

17 C++ 프로그램 개발 과정 Hello ......... C++ 라이브러리 cout << C++ 소스 프로그램 작성
#include <iostream> int main() { std::cout << "Hello"; return 0; } _main,12# $<<01010 _Hello001 컴파일 링킹 실행 오류 발생 목적 파일 (hello.obj) 소스 파일 (hello.cpp) 실행 파일 (hello.exe) 디버깅 오류 수정

18 C++ 프로그램 작성 및 컴파일 편집 컴파일 C++ 소스 프로그램은 텍스트 파일 C++ 소스 프로그램의 표준 확장자는 .cpp
아무 텍스트 편집기로 편집 가능 C++ 소스 프로그램의 표준 확장자는 .cpp C++ 통합 개발 소프트웨어 이용 추천 C++ 소스 편집, 컴파일, 링킹, 실행, 디버깅 등 모든 단계 통합 지원 대표적인 소프트웨어 - Visual Studio C 컴파일 C++ 소스 프로그램을 기계어를 가진 목적 파일로 변환 cpp 파일을 obj 파일로 변환

19 1 #include <iostream> 2 3 int main() {
_main PROC ; COMDAT ; 3 : int main() { push ebp b ec mov ebp, esp ec c 00 sub esp, ; c0H push ebx 0000a 56 push esi 0000b 57 push edi 0000c 8d bd 40 ff ff ff lea edi, DWORD PTR [ebp-192] 00012 b mov ecx, 48 ; H 00017 b8 cc cc cc cc mov eax, ; ccccccccH 0001c f3 ab rep stosd ; 4 : std::cout << "Hello"; 0001e push OFFSET 00023 a mov eax, DWORD PTR push eax 00029 e call 0002e 83 c add esp, 8 ; 5 : return 0; c0 xor eax, eax ; 6 : } f pop edi e pop esi b pop ebx c4 c 00 add esp, ; c0H 0003c 3b ec cmp ebp, esp 0003e e call __RTC_CheckEsp b e5 mov esp, ebp d pop ebp 00046 c3 ret 0 _main ENDP 어셈블리어 코드 int main() { 라인을 컴파일한 기계어 코드 1 #include <iostream> 2 3 int main() { 4 std::cout << “Hello”; 5 return 0; 6 }

20 링킹 링킹 목적 파일끼리 합쳐 실행 파일을 만드는 과정
목적 파일은 바로 실행할 수 없음 목적 파일과 C++ 표준 라이브러리의 함수 연결, 실행 파일을 만드 는 과정 hello.obj + cout 객체 + << 연산자 함수 => hello.exe를 만듬 hello.obj 표준 C++ 라이브러리 hello.exe << << 링킹 cout cout

21 프로그램 실행과 디버깅 실행 파일은 독립적으로 바로 실행 가능 실행 중에 발생하는 오류 디버깅
원하는 결과가 나오지 않거나 실행 중에 프로그램의 비정상 종료 디버깅 실행 중에 발생한 오류를 찾는 과정 디버거 디버깅을 도와주는 프로그램 컴파일러를 만드는 회사에서 함께 공급 소스 레벨 디버깅 C++ 소스를 한 라인씩 실행하고 변수 값의 변화를 보면서 오류 발견 Visual Studio는 소스 레벨 디버깅 지원

22 C++ 표준 라이브러리 C++ 표준 라이브러리는 3 개의 그룹으로 구분 C 라이브러리 C++ 입출력 라이브러리
콘솔 및 파일 입출력을 위한 라이브러리 C++ STL 라이브러리 제네릭 프로그래밍을 지원하기 위해 템플릿 라이브러리 STL 라이브러리 C 라이브러리 C++ 입출력 라이브러리

23 Visual Studio 10.0 시작

24 프로젝트 만들기 프로젝트 이름 C:\C++\chap1\Hello 폴더가 생긴다. 솔루션 위치 C:\C++\chap1
폴더를 생성한다. C:\C++\chap1\Hello 폴더가 생긴다. 솔루션 위치

25 생성된 프로젝트에 대한 확인 창

26 Win32 응용프로그램 마법사 체크해야 함

27 Hello 프로젝트 생성 후

28 새 항목 만드는 메뉴 선택

29 hello.cpp 소스 파일 생성 코드 선택 C++ 소스 파일 이름 입력 hello.cpp가 생기는 폴더

30 hello.cpp 파일이 생성된 초기 모습 빈 hello.cpp 파일 생성

31 hello.cpp 작성 프로그램 작성

32 솔루션 탐색기에서 컴파일 메뉴 선택 hello.cpp 컴파일, 컴파일만 수행

33 Hello 프로젝트의 빌드로 Hello.exe 생성

34 Ctrl+F5(디버깅하지 않고 실행하기 메뉴)로 실행할 때 빌드를 묻는 창
소스가 수정되어 빌드되지 않은 상태에서, 실행을 요청하는 경우에 출력되는 창

35 Hello 프로젝트가 실행되는 화면 Hello 프로젝트 빌드 성공. Hello.exe 생성


Download ppt "명품 C++ 프로그래밍 1장. C++ 시작."

Similar presentations


Ads by Google