PowerPoint 프레젠테이션
Download
Report
Transcript PowerPoint 프레젠테이션
CHAPTER
06.
C++ 프로그래밍 입문
가상 함수와 다중 상속
초보자를 위한
객체지향 프로그래밍
ehanbit.net
√ 원리를 알면 IT가 맛있다
C++ 프로그래밍 입문
IT COOKBOOK
chapter 01.
C++ 언어
한빛미디어㈜
-2-
ehanbit.net
C++ 프로그래밍 입문
IT COOKBOOK
01. C++언어의 소개
C언어를 기반으로 객체지향 패러다임을 더하여 만든 언어
분산 시스템, 임베디드 시스템, 시스템 프로그램, 과학 계산용 프로그램
등의 다양한 분야에 대해서 적용됨.
많은 운영체제에서 C++언어로 개발이 가능한 개발환경이 갖추어져 있음.
국제 표준이 존재하므로, 국제 표준에 의거해 작성된 프로그램은 어디에
서든지 같은 의미
낮은 레벨의 접근이 가능하므로 손쉽게 시스템 레벨의 프로그램을 작성
할 수 있도록 지원한다.
명령형과 객체지향의 개념뿐만 아니라 제네릭 프로그래밍, 함수형 프로
그래밍 등의 다양한 패러다임을 지원함.
한빛미디어㈜
-3-
ehanbit.net
C++ 프로그래밍 입문
IT COOKBOOK
ISO/IEC 14882 – Programming Language C++
국제적으로 명망과 인지도가 있는 각국의 프로그래밍 언어 전문가들에
의해서 만들어진 C++ 언어의 공통된 협약
C++에 대한 국제표준으로 ISO/IEC에서 만든 공통 협약으로 갱신될 때마
다 버전이 바뀌며, 현재 최종 버전은 14882:2003 이다.
C++ 언어의 표준안은 ANSI (American National Standard Institute)에서
처음 시도되었으며, 1989년 ANSI C++ 표준이 제공됨.
일반적으로 C++ 프로그램은 이 국제표준이 제정하고 있는 규약을 만족
하는 프로그램만을 의미한다.
C++ 프로그램을 작성하고 실행하는 환경 간의 차이를 최소화하고, 각국
의 전문가들과 공통된 언어로 의사소통이 가능함.
국제 표준을 따를 경우 의사소통과정에서 발생할 수 있는 불필요한 자원
의 낭비를 줄이고, 이식성을 높일 수 있다는 장점이 있다.
한빛미디어㈜
-4-
ehanbit.net
C++ 프로그래밍 입문
IT COOKBOOK
멀티 패러다임
프로그래밍 언어의 패러다임 – 프로그래밍 언어에서 추구하는 대상이나
강조하는 기본 개념
C++언어는 하나의 언어에서 명령형, 객체지향 및 함수형, 제네릭, 메타
프로그래밍 등을 제공하는 멀티 패러다임 을 지원함.
C++언어의 주요 패러다임
방식
설명
명령형(Imperative)
일련의 순서로 구성되며, 나열된 순서대로 프로그램이 수행
함수형(Functional)
함수의 형태로 프로그램을 작성함
객체지향(OO)
제네릭(Generic)
메타(Meta)
한빛미디어㈜
프로그램을 객체의 집합으로 구성하여, 메시지의 상호교환을 통한 처리 수행
코드의 재사용과 일반적인 개념을 추상화하기 위한 개념
컴파일 시간에 모든 실질적인 계산이 끝나 실행 시간에 영향을 최소화
-5-
ehanbit.net
C++ 프로그래밍 입문
IT COOKBOOK
C언어와 C++언어
C++언어는 C언어의 패러다임과 언어적인 부분까지 포함하는 좀 더 큰
범위를 차지함.
C++언어는 초기에 만들어질 때 C언어의 언어적인 부분을 가져오고 클래
스의 개념을 확장하는 것으로 시작했음.
현재 C언어와 C++언어는 독립적으로 표준화가 계속되고 있으며, 표준화
의 추진 그룹 역시 상호간에 많은 영향을 미치고 있음.
C언어와 C++언어의 차이점
코멘트 스타일에 //추가
문자 상수(Charater Literal)의 타입
문자열 상수의 한정어
임시 선언(Tentative Declaration)
Struct
파일 범위에서 선언된 명칭
호환되는 타입(Compatible Type)
void *에서 일반 포인터로의 변환
암시적 선언(Implicit Declaration)
한빛미디어㈜
-6-
ehanbit.net
C++ 프로그래밍 입문
IT COOKBOOK
02. C++언어와 객체지향 프로그래밍
소프트웨어의 위기 해소 및 생산성 증대를 위해서 제안된 많은 기술 중에
서 객체지향 설계/개발 기법이 가장 큰 성과를 거두었음.
C++언어는 C언어에 당시 Smaltalk, Eiffel등의 언어에서 지원하던 객체
지향의 개념을 접목하여 태동됨.
클래스, 상속, 오버로딩, 오버라이딩 등의 C++언어의 많은 기술적 요소
들이 객체지향을 지원하기 위해서 존재함.
C++언어에서 지원하는 객체지향 개념은 구조적 방법에 의한 프로그램에
비해 가독성이 높으며, 소프트웨어의 생산성을 높일 수 있도록 함.
C++언어는 객체지향뿐만 아니라 다양한 패러다임을 지원함.
한빛미디어㈜
-7-
ehanbit.net
C++ 프로그래밍 입문
IT COOKBOOK
구조적 방법
구조적 방법의 개념
– 문제에 대한 분할 및 정보(Divide and Conquer)의 개념으로 문제를
분해하고, 이를 단계별로 해결하는 방법
– 프로그램의 실행 흐름을 강조하므로 절차지향이라고도 하며, C언어
를 비롯한 많은 프로그래밍 언어들이 이를 지원함.
구조적 방법의 단점
- 개발자가 실세계의 문제보다 프로그램이 실행되는 기계의 관점에서
문제를 해결해야 한다는 어려움이 있음.
- 대형 소프트웨어에서 잠재적인 오류를 증가시킬 가능성이 있음.
- 처리 절차에 대해서만 강조하기 때문에 데이터에 대한 고려가 부족
해 데이터가 제대로 보호되지 못함. (전역변수)
한빛미디어㈜
-8-
ehanbit.net
C++ 프로그래밍 입문
IT COOKBOOK
객체지향 방법
객체지향 방법론
– 소프트웨어 시스템을 구성하는 요소를 인터페이스와 데이터를 포함한 객체의
단위로 나누고, 객체간의 메시지 전달을 통해 문제를 해결
– 실 세계의 문제를 직접 묘사할 수 있는 장점 및 재사용성에 의해 빠른 소프트
웨어의 개발 및 생산성의 증대에 도움을 줌.
– 객체지향 프로그램에서는 객체의 구성 및 객체간의 통신을 정의하는 것이 중
요함.
객체지향의 기본 키워드
- 객체(Object) : 실세계에 존재하는 모든 사물
- 클래스(Class) : 객체를 프로그램으로 표현할 수 있도록 만든 언어적 도구
- 인스턴스(Instance) : 프로그램에서 클래스를 통해 만든 실제의 실행 객체
클래스의 디자인의 중요한 문제
– 어느 정도 레벨까지를 클래스로 구현해야 하는가?
– 패턴(Pattern)의 적용을 고려
한빛미디어㈜
-9-
ehanbit.net
C++ 프로그래밍 입문
IT COOKBOOK
객체지향 디자인 1
객체지향 설계의 고려사항
– 객체의 정의 및 객체간의 통신에 대한 정의
– 캡슐화, 추상화, 상속 및 다형성 등의 핵심 개념의 적용
캡슐화(Encapsulation)
- 데이터와 함수 등 객체와 관련된 것을 하나로 묶는 것.
- 정보 은닉(Information Hiding)과 함께 연관 지어 사용되는 개념
- 외부에서 알아야 할 필요가 없는 데이터와 연산을 외부에서 보이지 않게 숨
겨 자세한 실행 흐름을 드러나지 않게 함.
추상화(Abstraction)
- 인터페이스(Interface)와 구현(Implementation)을 분리하는 것.
- 객체가 가진 특성 중 필수 속성만으로 객체를 묘사하고 유사성을 표현하며,
세부적인 상세 사항은 각 객체에 따라 다르게 구현되도록 함.
- C++ 언어는 가상 함수를 통한 클래스의 상속을 통하여 추상화를 제공 함.
- 기능 추상화 와 자료 추상화 가 있음.
한빛미디어㈜
- 10 -
ehanbit.net
C++ 프로그래밍 입문
IT COOKBOOK
객체지향 디자인 2
상속(Inheritance)
- 기존에 정의된 클래스를 이용하여 새로운 클래스를 정의할 수 있도록 함.
- 클래스에 상, 하 관계를 맺을 수 있도록 하고 하위 클래스는 상위 클래스에서
정의한 모든 내용을 수정 없이 사용 가능하도록 정의함.
- 상위 클래스(Super Class), 기본 클래스(Base Class), 부모 클래스(Parent
Class)
- 하위 클래스(Sub Class), 유도 클래스(Derive Class), 자식 클래스(Child
Class)
- 다중 상속(Multiple Inheritance): 두 개 이상의 부모 클래스로부터 상속받는
것으로 지정한 부모 클래스의 속성을 모두 물려받음.
다형성(Polymorphism)
- 서로 다른 타입에 대해 동일한 방식으로 접근할 수 있도록 하나의 인터페이
스를 제공하는 것.
- C++언어에서는 가상 함수(6장), 템플릿(8장), 오버로딩(7장) 등의 방법을 이
용해서 다형성을 제공 함.
한빛미디어㈜
- 11 -
ehanbit.net
C++ 프로그래밍 입문
IT COOKBOOK
03. C++ 프로그램의 구조
C++ 프로그램은 하나 이상의 헤더 파일과 소스파일로 구성됨.
-
헤더파일 : 해당 클래스의 선언과 적용될 수 있는 데이터, 상수 정의등으로
구성되는 확장명이 .h, .hpp 인 파일
- 소스파일 : 구체적인 실행 코드가 담기는 파일로 .cpp, .cc, .cxx등의 확장명
을 가지는 파일로 구현파일이라고도 함.
Hello World 프로그램
01
02
03
04
05
06
07
한빛미디어㈜
// First C++ program – print Hello
#include <iostream>
using namespace std;
int main()
{
cout << "Hello, world!\n";
/* hello world 문자열을 화면에 출력함. */
}
- 12 -
ehanbit.net
C++ 프로그래밍 입문
IT COOKBOOK
Hello World 프로그램의 구조
주석문(1행) – 프로그램의 주요 코드를 위한 설명을 위해 사용됨.
/* … */
//
전처리 명령(2행) – 실제의 번역에 앞서서 번역기에 대한 특별한 기능을
지시하기 위한 문장
using 명령(3행) – 프로그램에서 사용하는 네임스페이스를 지정함.
main 함수(4행) – 프로그램의 실제 수행시에 운영체제에 의해서 자동으
로 수행되는 함수
실행블록(5~7행) – 실제 수행을 위한 문장이 포함되어 있는 블록
한빛미디어㈜
- 13 -
ehanbit.net
C++ 프로그래밍 입문
IT COOKBOOK
C++ 프로그램: 스택 헤더파일
스택 프로그램의 헤더파일 (stack.h)
class my_stack // 클래스 my_stack의 선언
{
enum { Max_Data = 100 };
public:
my_stack ();
~ my_stack ();
void push( int );
int pop();
bool empty();
bool full();
private:
size_t top;
int buffer[ Max_Data ];
};
한빛미디어㈜
- 14 -
ehanbit.net
C++ 프로그래밍 입문
IT COOKBOOK
C++ 프로그램: 스택 구현파일
스택 프로그램의 구현파일(stack.cpp)
#include “stack.h”
int my_stack::pop()
{
if( !empty() )
top --;
}
bool my_stack::empty()
{
return (top == 0);
}
bool my_stack::full()
{
return ( top == Max_Data-1 );
}
my_stack:: my_stack ()
{
top = 0;
}
my_stack::~ my_stack ()
{
top = 0;
}
void my_stack::push( int item )
{
if( !full() )
buffer[ Top ++ ] = item;
}
한빛미디어㈜
- 15 -
ehanbit.net
C++ 프로그래밍 입문
IT COOKBOOK
외부에서의 클래스 이용: 스택
클래스 단위로 작성된 헤더와 구현 파일의 이용(main.cpp)
#include <iostream>
#include “stack.h”
using namespace std;
int main()
{
my_stack stack;
stack.push( 5 );
stack.push( 2 );
cout << stack.pop() << endl;
cout << stack.pop() << endl;
}
한빛미디어㈜
- 16 -
ehanbit.net
C++ 프로그래밍 입문
IT COOKBOOK
C언어와 C++언어의 혼합 프로그래밍
c.h
C++언어에서는 C언어로 작성된
프로그램을 별도의 수정 없이 사
용할 수 있도록 언어적으로 규정.
extern "C" void print( int i ) ;
c.c
#include <stdio.h>
void print( int i )
{
printf( "%d is printed.\n", i );
extern “C” 를 이용하여 C프로
그램에서 작성된 인스턴스나 함
수를 C++ 프로그램에서 사용할
수 있음.
}
cpp.cpp
#include "c.h"
int main( )
{
print(1);
}
한빛미디어㈜
- 17 -
ehanbit.net
C++ 프로그래밍 입문
IT COOKBOOK
04. C++ 프로그램의 개발 환경
비주얼 C++
–
–
–
윈도우 환경에서 널리 사용되는 C++ 프로그램의 통합개발환경(IDE,
Integrated Development Environment)
하나의 개발 환경 내에서 원시코드의 편집에서 컴파일, 링크 및 실행의 전 과
정을 수행할 수 있도록 에디터, 컴파일러, 링커 및 디버거가 모두 제공이 됨.
.Net 프레임워크에서 비주얼 C++의 기능을 통합하여 지원되고 있음.
g++
–
–
–
한빛미디어㈜
유닉스나 리눅스 환경에서 C++ 프로그램의 개발을 지원하는 기본 컴파일러
C컴파일러인 gcc와 마찬가지로 자유 소프트웨어 재단(FSF, Free Software
Foundation)과 GNU(Gnu is not Unix)에서 공급하는 무료 컴파일러
기본적으로 통합개발환경을 지원하지는 않으며, vi와 같은 별도의 범용에디
터를 사용해야 함.
- 18 -
ehanbit.net
C++ 프로그래밍 입문
IT COOKBOOK
비주얼 C++의 설치 1
1. 소개화면
2. 라이센스
한빛미디어㈜
- 19 -
ehanbit.net
C++ 프로그래밍 입문
IT COOKBOOK
비주얼 C++의 설치 2
3. 제품 ID 및 사용자 정보 입력
4. 설치 옵션
한빛미디어㈜
- 20 -
ehanbit.net
C++ 프로그래밍 입문
IT COOKBOOK
비주얼 C++의 설치 3
5. 공통파일 설치 폴더 선택
6. 설치 안내화면 1
한빛미디어㈜
- 21 -
ehanbit.net
C++ 프로그래밍 입문
IT COOKBOOK
비주얼 C++의 설치 4
7. 설치 안내 화면 2
8. 설치 프로그램 선택
한빛미디어㈜
- 22 -
ehanbit.net
C++ 프로그래밍 입문
IT COOKBOOK
비주얼 C++의 설치 5
9. 설치 환경 변수
10. 설치 진행
한빛미디어㈜
- 23 -
ehanbit.net
C++ 프로그래밍 입문
IT COOKBOOK
비주얼 C++의 설치 6
11. 설치 완료
한빛미디어㈜
- 24 -
ehanbit.net
C++ 프로그래밍 입문
IT COOKBOOK
비주얼 C++의 실행
1. 비주얼 C++의 실행
2. 비주얼 C++ 초기화면
한빛미디어㈜
- 25 -
ehanbit.net
C++ 프로그래밍 입문
IT COOKBOOK
비주얼 C++을 이용한 프로그램 개발 1
1. 새 프로젝트의 생성단계 1
2. 새 프로젝트의 생성단계 2
한빛미디어㈜
- 26 -
ehanbit.net
C++ 프로그래밍 입문
IT COOKBOOK
비주얼 C++을 이용한 프로그램 개발 2
3. 신규 파일 추가
4. 프로그램의 편집
한빛미디어㈜
- 27 -
ehanbit.net
C++ 프로그래밍 입문
IT COOKBOOK
비주얼 C++을 이용한 프로그램 개발 3
5. 실행 파일의 생성
6. 프로그램 실행
한빛미디어㈜
- 28 -
ehanbit.net
C++ 프로그래밍 입문
IT COOKBOOK
g++의 사용방법
g++ 의 도움 말 보기
$man g++
g++의 주요 옵션
–
–
–
–
–
–
–
–
한빛미디어㈜
무 옵션 : 컴파일, 링크를 수행하여 a.out 이라는 이름으로 실행파일을 생성
함.
-o : 생성되는 실행 파일의 이름을 지정
-c : 컴파일 과정만을 수행
-ldirPath : dirPath를 경로에 추가함
-LdirPath : dirPath를 라이브러리 경로에 추가함.
-Wall : 컴파일 과정에서 발생되는 모든 에러, 경고 메시지를 출력함.
-ansi : ANSI 표준 C/C++ 형태로 컴파일함
-pedantic : 모든 경고 메시지를 출력하고, 컴파일러 확장기능을 사용하지
않음
- 29 -
ehanbit.net
C++ 프로그래밍 입문
IT COOKBOOK
vi의 기본 모드 및 실행
vi의 모드
명령 모드: 명령어를 입력할 수 있는 상태
입력 모드: 텍스트를 수정할 수 있는 상태
Ex 모드: 추가적인 에디터 명령어를 입력 받는 상태
vi의 실행과 종료
$vi
:q!
vi의 종료 명령
q: vi 종료
q!: 입력한 내용을 무시하고, vi를 종료함
wq: 현재 입력한 내용을 저장하고 종료함
한빛미디어㈜
- 30 -
ehanbit.net
C++ 프로그래밍 입문
IT COOKBOOK
vi의 명령 1
vi의 입력명령
입력명령
의미
a
커서 위치의 다음 칸부터 내용을 입력한다(append).
A
커서가 있는 줄의 끝에 내용을 입력한다.
i
커서의 현재 위치에서 내용을 입력한다(insert).
I
커서가 있는 줄의 맨 앞에서 내용을 입력한다.
o
커서가 있는 줄의 바로 아래에 새로운 줄을 만들고 입력한다.
O
커서가 있는 줄의 바로 위에 새로운 줄을 만들고 입력한다.
vi의 종료 명령
종료 명령
한빛미디어㈜
의미
q
VI 종료
q!
입력한 내용을 무시하고, VI를 종료한다.
wq
현재 입력한 내용을 저장하고, VI를 종료한다.
ZZ
명령 모드에서 입력하며 wq와 같은 의미다.
- 31 -
ehanbit.net
C++ 프로그래밍 입문
IT COOKBOOK
vi의 명령 2
vi의 커서 이동 명령
명령
한빛미디어㈜
기능
명령
기능
h
한칸 왼쪽으로 이동
l
한칸 오른쪽으로 이동
j
한줄 아래로 이동
k
한줄 위로 이동
w
다음 단어의 첫 글자로 이동
W
다음 단어의 첫 글자로 이동
b
이전 단어의 첫 글자로 이동
B
이전 단어의 첫 글자로 이동
e
단어의 마지막 글자로 이동
E
단어의 마지막 글자로 이동
^
줄의 첫 글자로 이동
$
줄의 마지막 글자로 이동
0
줄의 처음으로 이동
<CR>
다음 줄의 첫 글자로 이동
+
다음 줄의 첫 글자로 이동
-
윗 줄의 첫 글자로 이동
(
이전 문장의 첫 글자로 이동
)
다음 문장의 첫 글자로 이동
{
이전 문단으로 이동
}
다음 문단으로 이동
- 32 -
ehanbit.net
C++ 프로그래밍 입문
IT COOKBOOK
vi의 명령 3
vi의 수정 명령
명령
r
커서의 위치에 있는 한 개의 글자를 교체(replace)
R
커서 위치에서 ESC 키를 누를 때까지 다른 글자로 교체
S, cl
커서 위치의 글자를 여러 글자로 교체
ch
커서 바로 앞의 글자를 여러 글자로 교체
cw
커서 위치의 한 단어를 교체
c0
커서 위치부터 줄의 처음까지를 교체
C, c$
한빛미디어㈜
기능
커서 위치에서 줄의 끝까지를 교체
cc
커서가 있는 줄을 교체
cj
커서가 있는 줄과 그 다음 줄을 교체
ck
커서가 있는 줄과 그 앞줄을 교체
- 33 -
ehanbit.net
C++ 프로그래밍 입문
IT COOKBOOK
vi의 명령 4
vi의 삭제 명령
명령
x, dl
dw
기능
커서 위치의 글자 삭제
명령
X, dh
기능
커서 바로 앞의 글자를 삭제
한 단어를 삭제
d0
커서 위치에서 줄의 처음까지 삭제
D, d$
커서 위치부터 줄의 끝까지 삭제
dd
커서가 있는 줄을 삭제
dj
커서가 있는 줄과 다음줄을 삭제
dk
커서가 있는 줄과 앞 줄을 삭제
vi의 편집 명령
명령
한빛미디어㈜
기능
명령
기능
yw
커서 위치부터 단어의 끝까지 복사
yj
커서가 있는 줄과 다음줄을 복사
y0
커서 위치부터 줄의 처음까지 복사
yk
커서가 있는 줄과 앞줄을 복사
y$
커서 위치부터 줄의 끝까지 복사
p
커서의 다음위치에 붙여넣기
yy
커서가 있는 줄을 복사
P
커서 위치에 붙여넣기
- 34 -
ehanbit.net
C++ 프로그래밍 입문
IT COOKBOOK
vi의 명령 5
vi의 작업취소 명령
명령
기능
u
작업취소(undo), 계속해서 누르면 한 단계씩 이전의 상태로 되돌아간다.
U
커서가 위치한 줄에서 수행된 모든 작업을 취소한다.
Ctrl + r
작업을 재실행한다(redo).
vi의 편집 명령
명령
.
바로 전에 수행했던 명령을 반복 수행한다.
J
Join, 현재 커서가 위치한 줄과 아래 줄을 하나의 줄로 연결한다.
~
대문자를 소문자로, 소문자를 대문자로 바꾼다.
Ctrl + g
파일명, 편집하고 있는 문서의 총 줄 수, 커서의 위치 등의 정보를 표시한다.
[,]
C 언어의 프로그래밍을 위해서 사용할 경우, 함수 단위로 커서를 이동한다.
:n
/[pattern]
입력한 줄(n)로 커서를 이동한다.
현재의 문서에서 입력한 [pattern]을 가진 문자열로 커서를 이동한다.
n
다음에 나타나는 [pattern]의 위치로 커서를 이동한다.
N
n 과 반대방향으로 커서를 이동한다.
:![command]
한빛미디어㈜
기능
VI를 종료하지 않은 상태에서 명령어를 실행한다.
- 35 -
ehanbit.net
C++ 프로그래밍 입문
IT COOKBOOK
g++과 vi를 이용한 프로그램 개발 1
vi 데이터를 이용하여 코드를 입력한다.
$vi hellosample.cc
한빛미디어㈜
- 36 -
ehanbit.net
C++ 프로그래밍 입문
IT COOKBOOK
g++과 vi를 이용한 프로그램 개발 2
g++을 이용하여 실행파일을 생성한다.
$g++ -o hellosample hellosample.cc
한빛미디어㈜
- 37 -
ehanbit.net
C++ 프로그래밍 입문
IT COOKBOOK
g++과 vi를 이용한 프로그램 개발 3
프로그램의 실행
$./hellosample
한빛미디어㈜
- 38 -
ehanbit.net