C++

5. 객체지향 프로그래밍

리버윤 2024. 10. 8. 12:09
728x90

- 객체 지향 프로그래밍

○  ChatGPT - 객체지향 언어를 많이 사용하는 순으로 나열해줘
  1. Java - 기업과 대규모 시스템에서 널리 사용됨.
  2. C++ - 시스템 프로그래밍과 게임 개발에 많이 사용됨.
  3. Python - 데이터 과학, 웹 개발 등 다양한 분야에서 인기가 많음.
  4. C# - 주로 윈도우 애플리케이션과 게임 개발에 사용됨.
  5. Ruby - 웹 개발, 특히 Ruby on Rails 프레임워크에서 많이 사용됨.
  6. JavaScript - 웹 개발에서 객체지향 프로그래밍 패러다임을 사용함.
  7. 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 인스턴스 ?
  1. Class (클래스):
    • 클래스는 객체를 만들기 위한 설계도나 청사진입니다.
    • 예를 들어, "자동차"라는 클래스를 생각해볼 수 있습니다. 이 클래스는 자동차의 속성(색상, 모델, 엔진 크기 등)과 행동(주행, 정지, 주차 등)을 정의합니다.
  2. Object (객체):
    • 객체는 클래스의 구체적인 실체입니다. 즉, 클래스를 기반으로 만들어진 실제 데이터입니다.
    • 자동차 클래스를 바탕으로 만든 "내 차"라는 객체가 있을 수 있습니다. 이 객체는 특정 색상(예: 빨간색)과 모델(예: 현대 아반떼) 등의 속성을 가집니다.
  3. 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