클래스(class)의 상속

😁 클래스(class)의 상속

👨‍👩‍👦 상속이란?

  1. 뒤를 이음.
  2. 법률 일정한 친족 관계가 있는 사람 사이에서, 한 사람이 사망한 후에 다른 사람에게 재산에 관한 권리와 의무의 일체를 이어 주거나, 다른 사람이 사망한 사람으로부터 그 권리와 의무의 일체를 이어받는 일.
    📢 [네이버 어학사전]

상속의 사전 의미는 이러합니다. 그렇다면 이 의미를 클래스에 적용을 해보겠습니다.
객체지향 프로그래밍에 클래스의 상속을 간단하게 얘기하자면

🚩 부모 클래스의 맴버 변수와 메소드를 자식 클래스가 재사용하는 개념

위의 개념으로 이해하시면 편할 것 같습니다. 이제 의미는 알았으니 간단한 작성법을 알아보겠습니다.

✍ 작성법

class 클래스이름 : 접근제한자 부모클래스이름{
	//내용 //
}

그런데 여기서 말씀안드린 내용이 있습니다. 바로 접근 제한자입니다.

❗ 접근제한자

접근제한자설명
private자신의 클래스 안에서만 접근 가능한 멤버 변수, 메소드
protected자신을 상속하는 클래스만 접근 가능
public모든 클래스에서 접근 가능

🧿 접근 범위 👉 public > protected > private

접근제한자를 통해서 접근 범위에 제한을 둘 수 있습니다.


예시를 통해서 지금까지 나온 내용을 정리하고, 추가적인 내용을 알아보겠습니다.

📖 예시

#include <iostream>
using namespace std;

class A
{
	private:
		int a;
		int b;
	public:
		void setA(int _a) 
		{
			if (_a > 10)
				_a = 10;
			a = _a;
		}
		void setB(int _b) 
		{
			if (_b > 20)
				_b = 20;
			b = _b;
		}
	int getA()
	{
		return a;
	}
	int getB() 
	{
		return b;
	}
};

class B : A 
{
	public:
		void setAB(int a, int b) 
        {
			setA(a);
			setB(b);
		}
		void print() 
		{
			printf("%d + %d = %d\n", getA(), getB(), getA() + getB());
		}
};

int main() 
{
	B b;
	b.setAB(50, 60);
	b.print();
}

결과 : 10 + 20 = 30

클래스 B는 클래스 A의 상속을 받습니다. 그리고 int a와 b는 클래스 A에서 private으로 접근을 제한했습니다. main 함수에서는 setAB를 통해서 int a와 b의 값을 바꾸려고 하지만 클래스 A에서 그것을 허용하지 않습니다. 클래스 B에서 int a와 b를 변경할 수 있는 방법은 클래스 A의 setA와 setB를 호출하여 전달하는 방법뿐입니다.

이렇게 멤버 변수를 함부로 바꿀 수 없게 멤버 함수(메소드)로 껍질을 입히는 것을
'캡슐화'라고 하며, get, set 메소드를 getter, setter 메소드라고 합니다.

저번 글에서 언급했던 객체지향언어의 특징인 💊'캡슐화' 입니다.
클래스의 상속을 배우면서 캡슐화의 간단한 구현도 해보았습니다.


Reference

좋은 웹페이지 즐겨찾기