peewoong 2024. 4. 23. 15:22

๐ŸŸฉ ๊ธฐ์กด์— ์ •์˜ํ•ด ๋†“์€ ํด๋ž˜์Šค์˜ ์žฌํ™œ์šฉ์„ ๋ชฉ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ๋ฌธ๋ฒ•์  ์š”์†Œ

์ข‹์€ ์ฝ”๋“œ๋Š” ์š”๊ตฌ์‚ฌํ•ญ์˜ ๋ณ€๊ฒฝ ๋ฐ  ๊ธฐ๋Šฅ์˜ ์ถ”๊ฐ€์— ๋”ฐ๋ฅธ ๋ณ€๊ฒฝ์ด ์ตœ์†Œํ™”๋˜์–ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋ฅผ ์œ„ํ•œ ํ•ด๊ฒฐ์ฑ…์œผ๋กœ ์ƒ์†์ด ์‚ฌ์šฉ๋œ๋‹ค.

class Person {
private:
	int age;
    char name[50];
public:
	Person(int myAge, char * myName) : age(myAge){
    
    }
    
    void WhatYourName() const {
    
    }
    
    void HowOldAreYou() const {
    
    }
}

class Student : public Person { // Person ํด๋ž˜์Šค๋ฅผ public ์ƒ์†ํ•จ
private:
	char major[50];
public:
	Student(char *myName, int myAge, char * myMajor) : Person(myAge, myName){
    
    }
    
    void WhoAreYou() const {
    	WhatYourName(); // Person ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„
        HowOldAreYou();
    }
}

 

๐ŸŸฉ ์ƒ์†๋ฐ›์€ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž ์ •์˜

์ด๋‹ˆ์…œ๋ผ์ด์ €๋ฅผ ํ†ตํ•ด์„œ ํ•˜์œ„ ํด๋ž˜์Šค๋Š” ์ƒ์œ„ ํด๋ž˜์Šค์˜  ์ƒ์„ฑ์ž๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค.

ํ•˜์œ„ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋Š” ์ƒ์œ„ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„๋ฅผ ์ดˆ๊ธฐํ™”ํ•  ์˜๋ฌด๋ฅผ ๊ฐ–๋Š”๋‹ค.

๋‹จ, ์ƒ์œ„ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ํ˜ธ์ถœํ•ด์„œ ์ดˆ๊ธฐํ™”ํ•ด์•ผ ํ•œ๋‹ค.

Student(char *myName, int myAge, char * myMajor) : Person(myAge, myName) {
	...
}

 

๋•Œ๋ฌธ์— ํ•˜์œ„ ํด๋ž˜์Šค๋Š” ์ƒ์œ„ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž ํ˜ธ์ถœ์„ ์œ„ํ•œ ์ธ์ž๊นŒ์ง€ ํ•จ๊ป˜ ์ „๋‹ฌ๋ฐ›์•„์•ผ ํ•œ๋‹ค.

private ๋ฉค๋ฒ„๋Š” ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ๋„ ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ, ์ƒ์„ฑ์ž์˜ ํ˜ธ์ถœ์„ ํ†ตํ•ด์„œ ์ƒ์œ„ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„๋ฅผ ์ดˆ๊ธฐํ™”ํ•ด์•ผ ํ•œ๋‹ค.

 

๐ŸŸฉ ํ•˜์œ„ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด ์ƒ์„ฑ ๊ณผ์ •

๐ŸŒŸ case1. Student student1(23,24);

1. ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ํ• ๋‹น

2. ํ•˜์œ„ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž ํ˜ธ์ถœ

3. ์ƒ์œ„ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž ํ˜ธ์ถœ ๋ฐ ์‹คํ–‰

4. ํ•˜์œ„ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž ์‹คํ–‰

 

๐ŸŒŸ case2. Student student2;

1. ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ํ• ๋‹น

2. ํ•˜์œ„ ํด๋ž˜์Šค์˜ void ์ƒ์„ฑ์ž ํ˜ธ์ถœ

3. ์ด๋‹ˆ์…œ๋ผ์ด์ €๋ฅผ ํ†ตํ•œ ์ƒ์œ„ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž ํ˜ธ์ถœ์ด ๋ช…์‹œ์ ์œผ๋กœ ์ •์˜๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฏ€๋กœ, void ์ƒ์„ฑ์ž ํ˜ธ์ถœ

4. ํ•˜์œ„ ํด๋ž˜์Šค ์‹คํ–‰

 

๐ŸŸฉ ํ•˜์œ„ ํด๋ž˜์Šค ๊ฐ์ฒด ์†Œ๋ฉธ๊ณผ์ •

ํ•˜์œ„ ํด๋ž˜์Šค์˜ ์†Œ๋ฉธ์ž๊ฐ€ ์‹คํ–‰๋œ ์ดํ›„์— ์ƒ์œ„ ํด๋ž˜์Šค์˜ ์†Œ๋ฉธ์ž๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

์Šคํƒ์— ์ƒ์„ฑ๋œ ๊ฐ์ฒด์˜ ์†Œ๋ฉธ์ˆœ์„œ๋Š” ์ƒ์„ฑ์ˆœ์„œ์™€ ๋ฐ˜๋Œ€์ด๋‹ค.

 

์ƒ์œ„ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„ ๋Œ€์ƒ์˜ ๋™์  ํ• ๋‹น์€ ์ƒ์œ„ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด์„œ, ์†Œ๋ฉธ ์—ญ์‹œ ์ƒ์œ„ ํด๋ž˜์Šค์˜ ์†Œ๋ฉธ์ž๋ฅผ ํ†ตํ•ด์„œ ์ด๋ฃจ์–ด์ง„๋‹ค.

class Person {
private:
	char * name;

public:
	Person(char * myName) {
    	name = new char[strlen(myName) + 1];
    }
    
    ~Person(){
    	delete []name;
    }
}

class Student : public Person {
private:
	char * major;

public:
	Student(char * myName, char *myMajor) : Person(myName) {
    	major = new char[strlen(myMajor) + 1];
    }
    
    ~Student() {
    	delete []major;
    }
}

 

๐ŸŸฉ ์„ธ ๊ฐ€์ง€ ํ˜•ํƒœ์˜ ์ƒ์†

1. public ์ƒ์†

์ ‘๊ทผ ์ œ์–ด ๊ถŒํ•œ์„ ๊ทธ๋Œ€๋กœ ์ƒ์†ํ•œ๋‹ค. ๋‹จ, private์€ ์ ‘๊ทผ๋ถˆ๊ฐ€๋กœ ์ƒ์†ํ•œ๋‹ค.

 

2. protected ์ƒ์†

private๋ณด๋‹ค ์ ‘๊ทผ์˜ ๋ฒ”์œ„๊ฐ€ ๋„“์€ ๋ฉค๋ฒ„๋Š” protected๋กœ ์ƒ์†ํ•œ๋‹ค. ๋‹จ, private์€ ์ ‘๊ทผ๋ถˆ๊ฐ€๋กœ ์ƒ์†ํ•œ๋‹ค.

๐Ÿ‘‰ ์ƒ์œ„์—์„œ public, protected ์˜€๋˜ ์ ‘๊ทผ์ œ์–ด์ž๊ฐ€ protected๊ฐ€ ๋œ๋‹ค.

 

3. private ์ƒ์†

private๋ณด๋‹ค ์ ‘๊ทผ์˜ ๋ฒ”์œ„๊ฐ€ ๋„“์€ ๋ฉค๋ฒ„๋Š” protected๋กœ ์ƒ์†ํ•œ๋‹ค. ๋‹จ, private์€ ์ ‘๊ทผ๋ถˆ๊ฐ€๋กœ ์ƒ์†ํ•œ๋‹ค.

๐Ÿ‘‰ ์ƒ์œ„์—์„œ public, protected ์˜€๋˜ ์ ‘๊ทผ์ œ์–ด์ž๊ฐ€ private๊ฐ€ ๋œ๋‹ค.

 

 

๐ŸŸฉ ์ƒ์† ์กฐ๊ฑด

๐ŸŒŸ is-a ๊ด€๊ณ„์˜ ์„ฑ๋ฆฝ

์ „ํ™”๊ธฐ ๐Ÿ‘‰ ๋ฌด์„  ์ „ํ™”๊ธฐ ๐Ÿ‘‰ ๋ฌด์„  ์ „ํ™”๊ธฐ๋Š” ์ผ์ข…์˜ ์ „ํ™”๊ธฐ์ด๋‹ค. ๐Ÿ‘‰ ๋ฌด์„  ์ „ํ™”๊ธฐ is a ์ „ํ™”๊ธฐ

๋ฌด์„  ์ „ํ™”๊ธฐ๋Š” ์ „ํ™”๊ธฐ์˜ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์— ์ƒˆ๋กœ์šด ํŠน์„ฑ์ด ์ถ”๊ฐ€๋œ ๊ฒƒ

์ด๋ ‡๋“ฏ is-a ๊ด€๊ณ„๋Š” ๋…ผ๋ฆฌ์ ์œผ๋กœ ์ƒ์†์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ‘œํ˜„ํ•˜๊ธฐ์— ๋งค์šฐ ์ ์ ˆํ•˜๋‹ค.

 

๋…ธํŠธ๋ถ ์ปดํ“จํ„ฐ๋Š” ์ปดํ“จํ„ฐ์ด๋‹ค.

ํƒœ๋ธ”๋ฆฟ ์ปดํ“จํ„ฐ๋Š” ๋…ธํŠธ๋ถ ์ปดํ“จํ„ฐ์ด๋‹ค.

ํƒœํ”Œ๋ฆฟ ์ปดํ“จํ„ฐ๋Š” ์ปดํ“จํ„ฐ์ด๋‹ค.

 

๐ŸŒŸ has-a ๊ด€๊ณ„๋กœ ์ƒ์†์„ ๊ตฌ์„ฑํ•˜๋ฉด

๊ฒฝ์ฐฐ์€ ์ด์„ ์†Œ์œ ํ•œ๋‹ค.

๊ฒฝ์ฐฐ has a ์ด

 

has a ๊ด€๊ณ„๋„ ์ƒ์†์œผ๋กœ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ police์™€ gun์€ ๊ฐ•ํ•œ ์—ฐ๊ด€์„ฑ์„ ๋ ๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ, ์ด์„ ์†Œ์œ ํ•˜์ง€ ์•Š์€ ๊ฒฝ์ฐฐ์ด๋‚˜, ๋‹ค๋ฅธ ๋ฌด๊ธฐ๋ฅผ ์†Œ์œ ํ•˜๋Š” ๊ฒฝ์ฐฐ์„ ํ‘œํ˜„ํ•˜๊ธฐ๊ฐ€ ์‰ฝ์ง€ ์•Š์•„์ง„๋‹ค.

๐Ÿ‘‰ has-a ๊ด€๊ณ„๋Š” ํฌํ•จ์œผ๋กœ ํ‘œํ˜„ํ•œ๋‹ค.

class Gun {
private :
	int bullet;
public :
	...
}

class Police {
private:
	int handcuffs;
    Gun * pistol; // ์†Œ์œ ํ•˜๊ณ  ์žˆ๋Š” ๊ถŒ์ด
}

has-a ๊ด€๊ณ„๋ฅผ  ํฌํ•จ์˜ ํ˜•ํƒœ๋กœ ํ‘œํ˜„ํ•˜๋ฉด, ๋‘ ํด๋ž˜์Šค๊ฐ„ ์—ฐ๊ด€์„ฑ์€ ๋‚ฎ์•„์ง€๋ฉฐ, ๋ณ€๊ฒฝ ๋ฐ ํ™•์žฅ์ด ์šฉ์ดํ•ด์ง„๋‹ค.

์ฆ‰, ์ด์„ ์†Œ์œ ํ•˜์ง€ ์•Š์€ ๊ฒฝ์ฐฐ์˜ ํ‘œํ˜„์ด ์‰ฌ์›Œ์ง€๊ณ , ์ถ”๊ฐ€๋กœ ๋ฌด๊ธฐ๋ฅผ ์†Œ์œ ํ•˜๋Š” ํ˜•ํƒœ๋กœ์˜ ํ™•์žฅ๋„ ๊ฐ„๋‹จํ•ด์ง„๋‹ค.