컴퓨터 구조

객체지향 프로그래밍의 3요소 - 상속성

monstro 2024. 3. 29. 21:17
728x90
반응형

객체지향 프로그래밍(Object Oriented Programming) 줄여서 OOP의 3가지 요소에 대해 알아보고자 합니다.

첫 번째 시작으로, 상속성에 대해 알아보겠습니다.

문제없어보이지만...

 

위의 코드에서 Knight 클래스는 아주 간단하게 체력과 공격력, 그리고 움직이고 공격하는 동작을 갖는 클래스입니다.

그리고 Paladin 클래스는 Knight 클래스와 비슷하지만, 신성력을 갖고있다는 것이 차이입니다.

문제없어 보이지만, 조금만 더 깊게 보면 문제가 있는 부분이 있습니다.

 

1)  코드를 재사용할 수 없다

Knight 클래스와 Paladin 클래스는 하나를 제외하고 같은 특성을 갖고 있습니다.

비슷한 특성들을 갖고 있음에도,  

단 하나의 차이점으로 인해 클래스를 새로 만들고 멤버들을 다시 작성해주는 문제가 생깁니다.

이건 매우 비효율적인 작업이 될 겁니다.

 

2) 클래스의 인스턴스와 관련된 함수를 일일이 만들어주어야 한다

새롭게 추가될 흑기사는 영혼을 수확하는 스킬을 가지고, 광전사는 데미지를 일부 무시하는 스킬을 가질 예정입니다.

새로운 직업이 추가되고 새로운 기능 즉, 함수를 가져야 할 때마다 다시 필요한 클래스들을 일일이 만들어주어야 합니다.

마찬가지로 이것 역시 매우 비효율적입니다.

각기 다른 기사 계열의 직업이 3000개라면 우리는 3000개 직업의 클래스와 스킬들을 일일이 만들어야 할까요?

 

위의 문제를 해결해주는 것이 바로 상속성입니다.

 

상속성 즉, 상속은 

아무렇게나 적어보았습니다

 

비슷한 결을 유지하되, 고유한 특징이나 동작을 가진 클래스의 인스턴스들의 관계를 정의하는데 매우 유용합니다.

우리는 모든 인스턴스들이 가지는 비슷한 동작은 위 단계로 보내고, 고유한 특징이나 동작은 아래 단계로 보냄으로써 상속관계를 만들 수 있습니다. 

 

위의 코드 예제를 상속을 통해 이렇게 만들 수 있습니다.

 

신성력을 제외한 나머지는 상속받음

 

마찬가지로 함수(기능)도 다음과 같이 상속을 통해 구현이 가능합니다.

 

영혼수확을 제외한 나머지를 상속받음

 

그렇다면 상속은 어떤 상황에서 사용해야 할까요?

상속을 사용하기 위한 관계는 Is-A VS Has-A 관계로 설명가능합니다.

 

1) Is - A

성기사는 기사인가? -> 그렇다

성기사는 기사를 갖고 있는가? -> 그렇지 않다

 

따라서 성기사와 기사는 Is-A 관계이므로, 성기사 클래스와 기사 클래스는 상속을 통해 관계를 맺는 것이 바람직합니다.

 

2) Has - A

성기사는 인벤토리인가? -> 그렇지 않다

성기사는 인벤토리를 갖고 있는가> -> 그렇다

 

따라서 성기사와 인벤토리는 Has-A 관계이므로,

성기사 클래스와 인벤토리 클래스는 성기사 클래스가 인벤토리 클래스를 멤버로 들고 있는 것이 바람직합니다.

 

 

이번 포스팅에서는 객체지향의 원리인 상속성에 대해 알아보았습니다.

다음 포스팅에서는 은닉성에 대해 알아보겠습니다.

728x90
반응형

'컴퓨터 구조' 카테고리의 다른 글

싱글톤 패턴  (1) 2024.11.12
멀티쓰레드란?  (0) 2024.07.27
객체지향의 프로그래밍의 3요소 - 다형성  (0) 2024.03.30
객체지향의 프로그래밍의 3요소 - 은닉성  (0) 2024.03.30
프로그래밍 개론  (0) 2024.02.18