1. 객체지향
1.1 객체지향의 개념
객체 지향은 실제 세계를 모델링하여 소프트웨어를 개발하는 방법이다. 현실세계의 존재를 '객체'로 정의하고, 객체의 속성과 개체간의 관계를 정의하여 소프트웨어를 개발한다.
객체란?
- 객체(Object) : 상태와 동작을 가진 존재 -> 멤버변수 + 멤버함수
- 상태(State) : 객체의 특징값(속성) -> 멤버 변수
- 동작(Behavior) : 객체가 취할 수 있는 동작 -> 멤버 함수 ex ) 객체 - 자동차, 상태 - 색상 속도 주행거리 등, 동작 - 출발하기 정지하기 가속하기 감속하기 등
메시지 : 객체간 통신과 상호작용을 위해 주고받는 수단
클래스 : 객체를 만드는 설계도(틀). 클래스로부터 만들어지는 각 객체는 클래스의 '인스턴스(Instance)'
1.2 클래스
절차지향 프로그래밍(Procedural Programming) : 문제를 해결하는 절차를 중요하게 생각하는 소프트웨어 개발 방법이다. 절차는 함수라는 단위로 묶이지만 데이터와 함수가 묶여있지는 않다.
객체지향 프로그래밍(Object-Oriented Programming) : 데이터와 함수를 하나의 덩어리로 묶어서 생각하는 방법이다. 데이터와 함수를 하나로 묶는 것을 캡슐화(encapsulation)라고 한다. 각 객체끼리는 메시지를 이용해 소통한다.
객체지향 프로그래밍에서는 객체들을 조립하여 빠르게 소프트웨어를 만들 수 있다.
2. 객체지향 프로그래밍
2.1 객체지향 프로그래밍의 개념
객체지향 프로그래밍의 개념 네 가지
- 캡슐화(Encapsulation) : 데이터와 연산을 개체 안에 묶는 것. 내부를 몰라도 사용할 수 있다.
- 정보 은닉(Information Hiding) : 객체 내부의 데이터와 구현의 세부사항을 외부 세계에 보여주지 않는 것. 외부에 영향을 주지 않으면서 쉽게 내부를 업그레이드 할 수 있다.
- 상속(Inheritance) : 기존의 코드를 재활용하기 위한 기법. 이비 작성된 클래스를 이어받아서 새로운 클래스를 생성한다.
- 다형성(Polymorphism) : 객체가 취하는 동작이 상황에 따라서 달라지는 것. 함수 이름의 재사용
객체지향의 장점
- 신뢰성이 있는 소프트웨어를 쉽게 작성할 수 있다.
- 코드 재사용이 쉽다.
- 업그레이드가 쉽다.
- 디버깅이 쉽다.
2.2 클래스의 구현
String 클래스의 객체 생성 및 멤버 함수 호출
#include <iostream>
#include <iostream>
#include <string>
using namespace std;
int main() {
string s1 = "This is a test."; // string 객체를 생성하고 초기화한다.
s1.insert(4, "Hello");
cout << s1 << endl;
int index = s1.find("test");
cout << index << endl;
s1.append("World");
cout << s1 << endl;
return 0;
}
Wheel of Fortune 예제
/******************************************************************************************************************
C++ 프로그래밍 예제 - Wheel of Foortune Game
사용자가 알파벳을 하나씩 입력하면서 문자열을 추리하는 프로그램
- 문자열은 사전에 정해져있음
- 횟수 제한 있음
- 대소문자 구분함
******************************************************************************************************************/
#include <iostream>
#include <string>
using namespace std;
void main() {
string default = "programming";
string changing = "programming";
string answer = "___________";
char ch;
int index;
int count = 10;
cout << "*************************************************************************" << endl;
cout << "* WHEEL OF FORTUME GAME *" << endl;
cout << "*************************************************************************" << endl;
cout << answer << " 에 들어갈 알파벳을 맞춰보세요!" << endl;
while (default != answer && count > 0) { // 알아내고자 하는 문자열과 만들어진 문자열이 같아질 때 까지 반복
cout << "남은 기회 : " << count << endl;
cout << "알파벳을 입력하세요 ";
cin >> ch; // 알파벳 하나 입력받음
index = changing.find(ch); // 문자열에서 위치를 찾아 반환
if (index < 0) { // ch가 문자열에 없으면
cout << ch << " 는 없습니다. 다른 알파벳을 입력하세요" << endl;
} else { // 있는경우
while (1) { // 무한루프(문자열에서 모든 ch를 찾을 때 까지)
if (index < 0) break; // ch가 문자열에 없으면 루프 종료
answer[index] = ch; // 위치에 알파벳 삽입
changing[index] = '_'; // 기존 문자열에서 제거
index = changing.find(ch); // 문자열에서 위치를 찾아 반환
}
}
cout << answer << endl;
count--;
} //문자열 찾아내거나 10번 루프 끝
if (default == answer) cout << "**********************축하합니다! 정답을 맞췄습니다**********************" << endl;
else cout << "***************************아쉽지만 실패했습니다.***************************" << endl;
}
e-koreatech 비주얼 C++ 프로그래밍 https://www.e-koreatech.ac.kr
'공부 > C++' 카테고리의 다른 글
05. 클래스 (0) | 2017.11.23 |
---|---|
03. 레퍼런스, 중복함수 (0) | 2017.11.20 |
02. C언어와 C++언어 (0) | 2017.11.15 |
01. C++ 프로그래밍 기초 (0) | 2017.11.14 |