380 likes | 547 Views
chapter 01. C++ 언어. 01. C++ 언어의 소개. C 언어를 기반으로 객체지향 패러다임을 더하여 만든 언어 분산 시스템 , 임베디드 시스템 , 시스템 프로그램 , 과학 계산용 프로그램 등의 다양한 분야에 대해서 적용됨 . 많은 운영체제에서 C++ 언어로 개발이 가능한 개발환경이 갖추어져 있음 . 국제 표준이 존재하므로 , 국제 표준에 의거해 작성된 프로그램은 어디에서든지 같은 의미 낮은 레벨의 접근이 가능하므로 손쉽게 시스템 레벨의 프로그램을 작성할 수 있도록 지원한다 .
E N D
chapter 01. C++ 언어
01. C++언어의 소개 • C언어를 기반으로 객체지향 패러다임을 더하여 만든 언어 • 분산 시스템, 임베디드 시스템, 시스템 프로그램, 과학 계산용 프로그램 등의 다양한 분야에 대해서 적용됨. • 많은 운영체제에서 C++언어로 개발이 가능한 개발환경이 갖추어져 있음. • 국제 표준이 존재하므로, 국제 표준에 의거해 작성된 프로그램은 어디에서든지 같은 의미 • 낮은 레벨의 접근이 가능하므로 손쉽게 시스템 레벨의 프로그램을 작성할 수 있도록 지원한다. • 명령형과 객체지향의 개념뿐만 아니라 제네릭 프로그래밍, 함수형 프로그래밍 등의 다양한 패러다임을 지원함.
ISO/IEC 14882 – Programming Language C++ • 국제적으로 명망과 인지도가 있는 각국의 프로그래밍 언어 전문가들에 의해서 만들어진 C++ 언어의 공통된 협약 • C++에 대한 국제표준으로 ISO/IEC에서 만든 공통 협약으로 갱신될 때마다 버전이 바뀌며, 현재 최종 버전은 14882:2003 이다. • C++ 언어의 표준안은 ANSI (American National Standard Institute)에서 처음 시도되었으며, 1989년 ANSI C++ 표준이 제공됨. • 일반적으로 C++ 프로그램은 이 국제표준이 제정하고 있는 규약을 만족하는 프로그램만을 의미한다. • C++ 프로그램을 작성하고 실행하는 환경 간의 차이를 최소화하고, 각국의 전문가들과 공통된 언어로 의사소통이 가능함. • 국제 표준을 따를 경우 의사소통과정에서 발생할 수 있는 불필요한 자원의 낭비를 줄이고, 이식성을 높일 수 있다는 장점이 있다.
멀티 패러다임 • 프로그래밍 언어의 패러다임 –프로그래밍 언어에서 추구하는 대상이나 강조하는 기본 개념 • C++언어는 하나의 언어에서 명령형, 객체지향 및 함수형, 제네릭, 메타 프로그래밍 등을 제공하는 멀티 패러다임 을 지원함. • C++언어의 주요 패러다임
C언어와 C++언어 • C++언어는 C언어의 패러다임과 언어적인 부분까지 포함하는 좀 더 큰 범위를 차지함. • C++언어는 초기에 만들어질 때 C언어의 언어적인 부분을 가져오고 클래스의 개념을 확장하는 것으로 시작했음. • 현재 C언어와 C++언어는 독립적으로 표준화가 계속되고 있으며, 표준화의 추진 그룹 역시 상호간에 많은 영향을 미치고 있음. • C언어와 C++언어의 차이점 • 코멘트 스타일에 //추가 문자 상수(Charater Literal)의 타입 • 문자열 상수의 한정어 임시 선언(Tentative Declaration) • Struct 파일 범위에서 선언된 명칭 • 호환되는 타입(Compatible Type) • void *에서 일반 포인터로의 변환 • 암시적 선언(Implicit Declaration)
02. C++언어와 객체지향 프로그래밍 • 소프트웨어의 위기 해소 및 생산성 증대를 위해서 제안된 많은 기술 중에서 객체지향 설계/개발 기법이 가장 큰 성과를 거두었음. • C++언어는 C언어에 당시 Smaltalk, Eiffel등의 언어에서 지원하던 객체지향의 개념을 접목하여 태동됨. • 클래스, 상속, 오버로딩, 오버라이딩 등의 C++언어의 많은 기술적 요소들이 객체지향을 지원하기 위해서 존재함. • C++언어에서 지원하는 객체지향 개념은 구조적 방법에 의한 프로그램에 비해 가독성이 높으며, 소프트웨어의 생산성을 높일 수 있도록 함. • C++언어는 객체지향뿐만 아니라 다양한 패러다임을 지원함.
구조적 방법 • 구조적 방법의 개념 • 문제에 대한 분할 및 정보(Divide and Conquer)의 개념으로 문제를 분해하고, 이를 단계별로 해결하는 방법 • 프로그램의 실행 흐름을 강조하므로 절차지향이라고도 하며, C언어를 비롯한 많은 프로그래밍 언어들이 이를 지원함. • 구조적 방법의 단점 • 개발자가 실세계의 문제보다 프로그램이 실행되는 기계의 관점에서 문제를 해결해야 한다는 어려움이 있음. • 대형 소프트웨어에서 잠재적인 오류를 증가시킬 가능성이 있음. • 처리 절차에 대해서만 강조하기 때문에 데이터에 대한 고려가 부족해 데이터가 제대로 보호되지 못함. (전역변수)
객체지향 방법 • 객체지향 방법론 • 소프트웨어 시스템을 구성하는 요소를 인터페이스와 데이터를 포함한 객체의 단위로 나누고, 객체간의 메시지 전달을 통해 문제를 해결 • 실 세계의 문제를 직접 묘사할 수 있는 장점 및 재사용성에 의해 빠른 소프트웨어의 개발 및 생산성의 증대에 도움을 줌. • 객체지향 프로그램에서는 객체의 구성 및 객체간의 통신을 정의하는 것이 중요함. • 객체지향의 기본 키워드 • 객체(Object) : 실세계에 존재하는 모든 사물 • 클래스(Class) : 객체를 프로그램으로 표현할 수 있도록 만든 언어적 도구 • 인스턴스(Instance) : 프로그램에서 클래스를 통해 만든 실제의 실행 객체 • 클래스의 디자인의 중요한 문제 • 어느 정도 레벨까지를 클래스로 구현해야 하는가? • 패턴(Pattern)의 적용을 고려
객체지향 디자인 1 • 객체지향 설계의 고려사항 • 객체의 정의 및 객체간의 통신에 대한 정의 • 캡슐화, 추상화, 상속 및 다형성 등의 핵심 개념의 적용 • 캡슐화(Encapsulation) • 데이터와 함수 등 객체와 관련된 것을 하나로 묶는 것. • 정보 은닉(Information Hiding)과 함께 연관 지어 사용되는 개념 • 외부에서 알아야 할 필요가 없는 데이터와 연산을 외부에서 보이지 않게 숨겨 자세한 실행 흐름을 드러나지 않게 함. • 추상화(Abstraction) • 인터페이스(Interface)와 구현(Implementation)을 분리하는 것. • 객체가 가진 특성 중 필수 속성만으로 객체를 묘사하고 유사성을 표현하며, 세부적인 상세 사항은 각 객체에 따라 다르게 구현되도록 함. • C++ 언어는 가상 함수를 통한 클래스의 상속을 통하여 추상화를 제공 함. • 기능 추상화 와 자료 추상화 가 있음.
객체지향 디자인 2 • 상속(Inheritance) • 기존에 정의된 클래스를 이용하여 새로운 클래스를 정의할 수 있도록 함. • 클래스에 상, 하 관계를 맺을 수 있도록 하고 하위 클래스는 상위 클래스에서 정의한 모든 내용을 수정 없이 사용 가능하도록 정의함. • 상위 클래스(Super Class), 기본 클래스(Base Class), 부모 클래스(Parent Class) • 하위 클래스(Sub Class), 유도 클래스(Derive Class), 자식 클래스(Child Class) • 다중 상속(Multiple Inheritance): 두 개 이상의 부모 클래스로부터 상속받는 것으로 지정한 부모 클래스의 속성을 모두 물려받음. • 다형성(Polymorphism) • 서로 다른 타입에 대해 동일한 방식으로 접근할 수 있도록 하나의 인터페이스를 제공하는 것. • C++언어에서는 가상 함수(6장), 템플릿(8장), 오버로딩(7장) 등의 방법을 이용해서 다형성을 제공 함.
03. C++ 프로그램의 구조 • C++ 프로그램은 하나 이상의 헤더 파일과 소스파일로 구성됨. • 헤더파일 : 해당 클래스의 선언과 적용될 수 있는 데이터, 상수 정의등으로 구성되는 확장명이 .h, .hpp 인 파일 • 소스파일 : 구체적인 실행 코드가 담기는 파일로 .cpp, .cc, .cxx등의 확장명을 가지는 파일로 구현파일이라고도 함. • Hello World 프로그램 • 01 // First C++ program – print Hello • 02 #include <iostream> • 03 using namespace std; • 04 int main() • 05 { • 06 cout << "Hello, world!\n"; /* hello world 문자열을 화면에 출력함. */ • 07 }
Hello World 프로그램의 구조 • 주석문(1행) – 프로그램의 주요 코드를 위한 설명을 위해 사용됨. • /* … */ • // • 전처리 명령(2행) – 실제의 번역에 앞서서 번역기에 대한 특별한 기능을 지시하기 위한 문장 • using 명령(3행) – 프로그램에서 사용하는 네임스페이스를 지정함. • main 함수(4행) – 프로그램의 실제 수행시에 운영체제에 의해서 자동으로 수행되는 함수 • 실행블록(5~7행) – 실제 수행을 위한 문장이 포함되어 있는 블록
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 ]; • };
C++ 프로그램: 스택 구현파일 • 스택 프로그램의 구현파일(stack.cpp) • #include “stack.h” • my_stack:: my_stack () • { • top = 0; • } • my_stack::~ my_stack () • { • top = 0; • } • void my_stack::push( int item ) • { • if( !full() ) • buffer[ Top ++ ] = item; • } • int my_stack::pop() • { • if( !empty() ) • top --; • } • bool my_stack::empty() • { • return (top == 0); • } • bool my_stack::full() • { • return ( top == Max_Data-1 ); • }
외부에서의 클래스 이용: 스택 • 클래스 단위로 작성된 헤더와 구현 파일의 이용(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; • }
C언어와 C++언어의 혼합 프로그래밍 • c.h • extern "C" void print( int i ) ; • c.c • #include <stdio.h> • void print( int i ) • { • printf( "%d is printed.\n", i ); • } • cpp.cpp • #include "c.h" • int main( ) • { • print(1); • } • C++언어에서는 C언어로 작성된 프로그램을 별도의 수정 없이 사용할 수 있도록 언어적으로 규정. • extern “C” 를 이용하여 C프로그램에서 작성된 인스턴스나 함수를 C++ 프로그램에서 사용할 수 있음.
04. C++ 프로그램의 개발 환경 • 비주얼 C++ • 윈도우 환경에서 널리 사용되는 C++ 프로그램의 통합개발환경(IDE, Integrated Development Environment) • 하나의 개발 환경 내에서 원시코드의 편집에서 컴파일, 링크 및 실행의 전 과정을 수행할 수 있도록 에디터, 컴파일러, 링커 및 디버거가 모두 제공이 됨. • .Net 프레임워크에서 비주얼 C++의 기능을 통합하여 지원되고 있음. • g++ • 유닉스나 리눅스 환경에서 C++ 프로그램의 개발을 지원하는 기본 컴파일러 • C컴파일러인 gcc와 마찬가지로 자유 소프트웨어 재단(FSF, Free Software Foundation)과 GNU(Gnu is not Unix)에서 공급하는 무료 컴파일러 • 기본적으로 통합개발환경을 지원하지는 않으며, vi와 같은 별도의 범용에디터를 사용해야 함.
비주얼 C++의 설치 1 1. 소개화면 2. 라이센스
비주얼 C++의 설치 2 3. 제품 ID 및 사용자 정보 입력 4. 설치 옵션
비주얼 C++의 설치 3 5. 공통파일 설치 폴더 선택 6. 설치 안내화면 1
비주얼 C++의 설치 4 7. 설치 안내 화면 2 8. 설치 프로그램 선택
비주얼 C++의 설치 5 9. 설치 환경 변수 10. 설치 진행
비주얼 C++의 설치 6 11. 설치 완료
비주얼 C++의 실행 1. 비주얼 C++의 실행 2. 비주얼 C++ 초기화면
비주얼 C++을 이용한 프로그램 개발 1 1. 새 프로젝트의 생성단계 1 2. 새 프로젝트의 생성단계 2
비주얼 C++을 이용한 프로그램 개발 2 3. 신규 파일 추가 4. 프로그램의 편집
비주얼 C++을 이용한 프로그램 개발 3 5. 실행 파일의 생성 6. 프로그램 실행
g++의 사용방법 • g++ 의 도움 말 보기 • $man g++ • g++의 주요 옵션 • 무 옵션 : 컴파일, 링크를 수행하여 a.out 이라는 이름으로 실행파일을 생성함. • -o :생성되는 실행 파일의 이름을 지정 • -c : 컴파일 과정만을 수행 • -ldirPath : dirPath를 경로에 추가함 • -LdirPath : dirPath를 라이브러리 경로에 추가함. • -Wall : 컴파일 과정에서 발생되는 모든 에러, 경고 메시지를 출력함. • -ansi : ANSI 표준 C/C++ 형태로 컴파일함 • -pedantic :모든 경고 메시지를 출력하고, 컴파일러 확장기능을 사용하지 않음
vi의 기본 모드 및 실행 • vi의 모드 • 명령 모드: 명령어를 입력할 수 있는 상태 • 입력 모드: 텍스트를 수정할 수 있는 상태 • Ex 모드: 추가적인 에디터 명령어를 입력 받는 상태 • vi의 실행과 종료 • $vi • :q! • vi의 종료 명령 • q: vi 종료 • q!: 입력한 내용을 무시하고, vi를 종료함 • wq: 현재 입력한 내용을 저장하고 종료함
vi의 명령 1 • vi의 입력명령 • vi의 종료 명령
vi의 명령 2 • vi의 커서 이동 명령
vi의 명령 3 • vi의 수정 명령
vi의 명령 4 • vi의 삭제 명령 • vi의 편집 명령
vi의 명령 5 • vi의 작업취소 명령 • vi의 편집 명령
g++과 vi를 이용한 프로그램 개발 1 • vi 데이터를 이용하여 코드를 입력한다. • $vi hellosample.cc
g++과 vi를 이용한 프로그램 개발 2 • g++을 이용하여 실행파일을 생성한다. • $g++ -o hellosample hellosample.cc
g++과 vi를 이용한 프로그램 개발 3 • 프로그램의 실행 • $./hellosample