객체지향

tahn·2022년 11월 27일
0

C++

목록 보기
5/8
post-thumbnail

절차지향 vs 객체 지향

절차 지향 프로그래밍

  • 동사구인 '~하다'에 중점을 둔 프로그래밍
  • 함수들이 각기 자신들의 기능을 절차에 의해 호출한다.

객체 지향 프로그래밍(OOP)

  • 객체에 중점을 둔 프로그래밍

객체 지향 프로그래밍의 특징

  • 상속을 통한 재 사용성을 보장한다.
  • 유지보수 및 관리가 용이하다.

클래스란?

  • C++부터 등장한 사용자 정의 자료형
  • 변수와 데이터를 다루는 기능을 하나로 묶어 놓은 것이다.
  • 객체들을 추상화시킨 하나의 틀이다.

프로그래밍에서 객체란?

  • 클래스는 사용자 정의 자료형
  • 클래스에 변수명을 부여해서 메모리에 등록시키면 객체가 된다.
  • 메모리에 등록된 클래스는 Instance라고도 부른다.

멤버 접근자

1. private

  • 멤버 접근을 오로지 내부에서만 허용한다.

2. public

  • 멤버 접근을 내/외부 모두 허용한다.

3. protected

  • 멤버 접근을 내부 혹은 상속 관계에서만 허용한다.

클래스와 구조체의 차이점

멤버 접근 지정자의 차이점

클래스 : private
구조체 : public

그 외의 모든 기능들이 동일하다.

-> 즉, 멤버 접근 지정자 외에는 차이점은 없다.

클래스와 구조체의 차이점이 없는 상황에서 구조체 멤버로 함수를 정의하지 않는다.
-> 구조체는 순전히 데이터 덩어리 용도로만 사용한다.

객체지향의 4대 속성

1. 추상화

  • 객체들의 공통적인 특징을 뽑아내서 이름을 생성
  • -> 클래스를 정의하는 과정이 추상화 과정이라고 할 수 있음.

https://www.notion.so/d14f198e3a704ede922bc155c39edb96#5373d634472c4981a2d4780f172e6f28

2. 캡슐화

  • 데이터 은닉 + 같은 기능끼리 묶는 기능

https://www.notion.so/d14f198e3a704ede922bc155c39edb96#cdc8b7ed451146cd8ea95ecda8c541b0

  • 재료가게의 기능(함수)를 모아서 한 클래스에 쓰는 것. 이 행위를 추상화 라고 함
  • 예를 들어 정해진 순서의 세 가지의 함수를 순서대로 실행시키는 경우가 발생 하였을 때.
class A
{
pulic:
    void Take()
    {
     코드라인
    }
};

class B
{
pulic:
    void Take()
    {
     코드라인
    }
};

class C
{
pulic:
    void Take()
    {
     코드라인
    }
};

void main()
{
   A();
   B();
   C();
}

순서가 A -> B -> C가 아니고 B -> A -> C 이런식으로 섞이는 경우가 생길 수가 있다.

캡슐화로 이런 경우가 발생하는 것을 막을 수 있다.

class D
{
public:
	void Take()
	{
		A.Take();
		B.Take();
		C.Take();
	}

void main()
{
  D.Take();
}

캡슐화된 클래스는 데이터를 보호하고 오용을 방지한다.

전역 변수는 아무나 전역 변수에 접근할 수 있으므로 엄격하게 제어할 수 없어서 위험하다. public 멤버 변수도 같은 이유로 위험하다.

3. 상속성

  • 객체지향의 꽃이다. 상속이란 상위개념의 특징을 하위 개념이 물려받는 특징을 말한다. 하나의 클래스가 가지고 있는 특징들을 그대로 다른 클래스가 돌려주고자 할 때 상속성의 특징을 사용한다.
  • struct 와 같이 상위 틀을 만들어 놓고 그 특징을 물려받을 하위 개념에서 사용할 수 있도록 틀을 짜는 것도 예시가 될 수 있음.
  • ex) RPG 게임에서 HP, MP, STR, LUCK, INT, DEX, level up 등(개념과 함수)을 미리 만들어 놓고, 하위 개념인 개개인 캐릭터 생성 시 사용.. 등

4. 다형성

  • 각기 다른 객체가 동일한 메세지를 통해 다른 각기 다른 기능을 하는 것.
  • 함수 오버로딩
  • 객체지향 언어의 중요한 특징 중 하나가 다형성
  • 객체의 다형성은 상속과 관련된거.
profile
html 개발자

0개의 댓글