[OOP] is-a , has-a

Seoeun ParkΒ·2024λ…„ 12μ›” 4일
0

OOP

λͺ©λ‘ 보기
3/3

πŸ–₯️ 'is-a'λž€?

B(class) is a A(class)

클래슀 Aκ°€ μ„œλ‘œ κ΄€λ ¨μžˆλŠ” 클래슀 B의 μ„œλΈŒ ν΄λž˜μŠ€μž„μ„ μ˜λ―Έν•¨.
상속 κ΄€κ³„μ—μ„œ 주둜 μ‚¬μš©.

class A
{
public:
	void MoveA()
    {
    	printf("Move A\n");
    }
};

class B : public A
{
public:
	void MoveB()
    {
    	printf("Move B\n");
    }
};

int main()
{
	B b;
    b.MoveA();
    
	return 0;
}

console :
Move A

🚨 문제점 : 클래슀 A와 클래슀 BλŠ” μ„œλ‘œ λ°€μ ‘ν•˜κ²Œ κ²°ν•©λ˜κΈ° λ•Œλ¬Έμ— λΆ€λͺ¨ 클래슀인 Aμ—μ„œ 변경이 일어날 경우, μžμ‹ 클래슀 B도 영ν–₯을 받을 κ°€λŠ₯성이 λ†’λ‹€.

'κ³ μ–‘μ΄λŠ” 포유λ₯˜μ΄λ‹€.'와 같은 1:1 κ΄€κ³„μ—μ„œλŠ” μ•ˆμ „ν•œ 클래슀 계측ꡬ쑰λ₯Ό 이룰 수 μžˆμ§€λ§Œ, λΉˆλ²ˆν•œ 상속은 ν”Όν•˜λŠ” 것이 μ’‹λ‹€.
ν˜Ήμ€ 좔상 클래슀둜 λ‹€λ£¨λŠ” 것도 ν•œ 방법이닀.


πŸ–₯️ 'has-a'λž€?

A(class) has a B(class)

클래슀 Aκ°€ μ„œλ‘œ κ΄€λ ¨ μ—†λŠ” 클래슀 Bλ₯Ό κ°€μ§€κ³ (ν¬ν•¨ν•˜κ³ ) μžˆμŒμ„ 의미.

class A
{
public:
	void Attack()
    {
    	printf("A - Attack! \n");
    }
};

class B : public A
{
public:
	void UseWeapon()
    {
    	Attack();
    }
};

int main()
{
	B b;
    b.UseWeapon();
    
	return 0;
}

console :
A - Attack!

🚨 문제점 :

profile
κ²Œμž„ 개발 곡뢀 μ‹œμž‘!

0개의 λŒ“κΈ€