C++
5. 객체지향 프로그래밍
리버윤
2024. 10. 8. 12:09
728x90
- 객체 지향 프로그래밍
○ ChatGPT - 객체지향 언어를 많이 사용하는 순으로 나열해줘
- Java - 기업과 대규모 시스템에서 널리 사용됨.
- C++ - 시스템 프로그래밍과 게임 개발에 많이 사용됨.
- Python - 데이터 과학, 웹 개발 등 다양한 분야에서 인기가 많음.
- C# - 주로 윈도우 애플리케이션과 게임 개발에 사용됨.
- Ruby - 웹 개발, 특히 Ruby on Rails 프레임워크에서 많이 사용됨.
- JavaScript - 웹 개발에서 객체지향 프로그래밍 패러다임을 사용함.
- Swift - iOS 및 macOS 애플리케이션 개발에 사용됨.
● 소프트웨어 위기(software crisis)의 대응 방안
▶ 구조적 프로그래밍 방법론
OOP : 객체지향 프로그래밍
- C++은 객체 지향 프로그래밍과 기타 유용한 프로그래밍 스타일을 지원하는 다중 패러다임 프로그래밍 언어
▶ 객체지향의 특징
- 캡슐화(encapsulation)
- 추상화(abstraction)
- 상속(inheritance)
- 다형성(polymorphism) : 오버로딩과 오버라이딩
1) 캡슐화(encapsulation)
● ADT : 추상 자료형
2) 상속(inheritance)
3) 다형성(polymorphism)
- 함수 이름을 하나만 쓴다.
▷ 클래스 다이어그램
클래스 -> | 자동차 | 고양이 |
특성 멤버 변수 -> (Member Variable Data Member) |
문 핸들 바퀴 의자 |
이름 나이 털 색상 품종 |
행위 멤버 함수 -> (Member Function Method) |
움직인다 정차한다 가속한다 색깔이 바란다 |
야옹이 4살 고등어 색 |
▷ 객체지향 용어 비교
▷ 구조적 프로그래밍 vs 객체 지향 프로그래밍
- 구조적 프로그래밍 기법을 계승하고 보다 발전시킨 개념
- 자료와 처리동작을 하나로 묶어 다루는 객제 개념 도입
- 소프트웨어 확장 및 재사용 기회 증가
- 클래스
: 각 객체의 속성을 정의하는 수단
클래스 vs 객체 vs 인스턴스 ?
- Class (클래스):
- 클래스는 객체를 만들기 위한 설계도나 청사진입니다.
- 예를 들어, "자동차"라는 클래스를 생각해볼 수 있습니다. 이 클래스는 자동차의 속성(색상, 모델, 엔진 크기 등)과 행동(주행, 정지, 주차 등)을 정의합니다.
- Object (객체):
- 객체는 클래스의 구체적인 실체입니다. 즉, 클래스를 기반으로 만들어진 실제 데이터입니다.
- 자동차 클래스를 바탕으로 만든 "내 차"라는 객체가 있을 수 있습니다. 이 객체는 특정 색상(예: 빨간색)과 모델(예: 현대 아반떼) 등의 속성을 가집니다.
- Instance (인스턴스):
- 인스턴스는 클래스의 객체를 지칭하는 다른 용어입니다. 즉, 특정 클래스에서 생성된 객체입니다.
- "내 차"는 자동차 클래스의 인스턴스입니다. 여러 대의 자동차 객체가 있을 수 있지만, 각각은 자동차 클래스의 인스턴스입니다.
요약
- 클래스는 "자동차"라는 설계도.
- 객체는 "내 차"라는 구체적인 실체.
- 인스턴스는 클래스에서 생성된 객체로, "내 차"는 자동차 클래스의 인스턴스입니다.
클래스 : 자동차
-> 객체 : 아버지차
-> 객체 : 내차 (구체적이고 하나밖에 없는 것)
클래스 : 고양이
-> 객체 : 야옹이
-> 객체 : 뇽뇽이
클래스 : 사람
-> 객체 : 강윤서
-> 객체 : 조승우
-> 객체 : 변요한
#include <iostream>
clas Dog{
//private
public:
int age;
double weight;
};
int main()
{
Dog coco;
coco.age = 3;
coco.weight = 3.5;
std::cout << coco.age << "\t" << coco.weight << '\n';
}
//결과 : 3 3.5
- 구조체
#include <iostream>
class Dog{
//private
public:
int age;
double weight;
void cry() {
std::cout << "멍멍\n";
} //c++이라 함수도 넣을 수 있음
};
int main()
{
Dog coco;
coco.age = 3;
coco.weight = 3.5;
coco.cry(); //함수는 괄호 열고 닫고로 호출
std::cout << coco.age << "\t" << coco.weight << '\n';
}
▷ 구조체 : C vs C++
- C : 변수만 가능 (+ c에는 class 존재하지 않음)
- C++ : 변수와 함수 가능
※ class와 struct의 차이점은? - 접근제어 속성을 생략하면 class는 private가 기본, struct는 public이 기본이다.
+ C++은 호출할 때 struct 생략 가능
#include <stdio.h>
struct Man { //구조체 선언
char name[10]; //멤버
int age; //멤버
double weight; //멤버
};
int main(void)
{
struct Man gildong, sunhee, comso[160]; //C++에선 그냥 Man만 적어도 되지만 C에선 꼭 struct를 써야함
gildong.age = 20; //일반 구조체 변수의 멤버 참조
sunhee.weight = 52.5;
comso[0].age = 25;
printf("%d %f %d\n",
gildong.age, sunhee.weight, comso[0].age);
return 0;
}
▶ 구조체 변수의 초기화와 멤버 값 대입
// C
#include <stdio.h>
struct score {
char hakbun[10];
char name[10];
int kor, eng, tot;
double ave;
};
int main(void)
{
struct score h = { "202345678","하니",80,90 }; //초기화
h.tot = h.kor + h.eng;
h.ave = h.tot / 2.0;
printf("%s %s %d %d %d %.2f\n",
h.hakbun, h.name, h.kor, h.eng, h.tot, h.ave);
return 0;//202345678 하니 80 90 170 85.00
}
#include <stdio.h>
typedef struct score {
char hakbun[10];
char name[10];
int kor, eng, tot;
double ave;
}SCORE;
int main(void)
{
SCORE j, h = { "202345678", "하니",80,90 };
h.tot = h.kor + h.eng;
j = h; //한번 대입하면 다 복사되는 구조체의 편리함
printf("%s %s %d %d %d\n", h.hakbun, h.name, h.kor, h.eng, h.tot);
printf("%s %s %d %d %d\n", j.hakbun, j.name, j.kor, j.eng, j.tot);
return 0;
}
* 구조체의 장점 : 한번 대입하면 다 복사된다.
변수들만 관리할때는 구조체 사용
데이터 뿐만아니라 함수도 관리해야할 때 클래스를 사용
자료 출처 : Smile han 'C++ 프로그래밍'
728x90