OOP(object oriented programming) 3대 요소

정채운·2023년 10월 17일
0

상속성

상속전
class Warrior
{
public:
	void Move()
	{
		cout << "Move" << endl;
	}
	void SpecialMove()
	{
		cout << "specialMove" << endl;
	}
public:
	int _stamina;
	int _hp;
	int _datmage;
	int _defence;
};

class Mage
{
public:
	void Move()
	{
		cout << "Move" << endl;
	}
public:
	int _mp;
	int _hp;
	int _datmage;
	int _defence;
};

int main()
{
	Warrior w1;

	w1.Move();
	w1.SpecialMove();
}
상속후
class Player
{
public:
	void Move()
	{
		cout << "Move" << endl;
	}
public:
	int _hp;
	int _datmage;
	int _defence;
};

class Warrior : public Player
{
public:
	void SpecialMove()
	{
		cout << "specialMove" << endl;
	}
public:
	int _stamina;
};

class Mage : public Player
{
public:
	int _mp;
};

int main()
{
	Warrior w1;

	w1.Move();
	w1.SpecialMove();
} 
  • 코드의 재사용이 가능
  • 계층적 구조를 이룰 수 있음
  • 클래스 간의 관계가 명확하게 하여 코드를 이해하기 쉽게 만들고 유지보수에 도움이 됨

은닉성

  1. public
    • 공개적
  2. protected
    • 상속 받는 class만 접근 가능
    • 외부에서 접근 불가
  3. private
    • 오직 자기 자신만

차로 예를 들자면

publicprotected, public
핸들조작, 문 여는법, 엑셀밟는 법분해하는 법, 엔진 가동시키는법

그러면 protected와 private 차이점

protected는 상속 받은 자식들만 접근 가능
private는 오직 자신만

이렇게 보안적으로 필요한 요소에 해당 키워드들을 적절히 사용하여 보안을 강화

다형성

  1. Overloading
    • 하나의 클래스 내에서 같은 이름을 갖지만 서로 다른 매개변수를 갖게 하는 기능
  2. Overriding
    • 상속 관계에서 부모 클래스에 정의된 메서드를 재정의 하여 (다형성 제공)
다형성 예시 코드
  class Player
{
public:
	virtual void Jump()
	{
		cout << "일반 점프" << endl;
	}
public:
	int _hp = 100;
	int _damage = 10;
};

class Knight : public Player
{
public:
	virtual void Jump() override
	{
		cout << "슈퍼점프" << endl;
	}
};

void CompareJump(Player* p1, Player* p2)
{
	p1->Jump();
	p2->Jump();
}

void main()
{
	Player p1;
	Knight k1;
	
	CompareJump(&p1, &k1);
} 

아래는 해당 코드에 대한 컴퓨터가 내부적으로 어떻게 동작하는지에 대한 그림

  1. 추상화 (추상 클래스)
  • 추상 메서드를 만들어 줄 수 있음

  • 특정 메서드의 구현을 강제하여 필수적 동작 누락을 방지

     virtual void Move() = 0;
    			or
     virtual void Move() abstract;
    

0개의 댓글