👻 상속이란 무엇인가?

상속은 객체 지향 프로그래밍(OOP)에서 상위(부모) 클래스의 속성과 기능을 하위(자식) 클래스가 물려받아 재사용하는 것을 의미합니다. 상속을 통해 코드 중복을 줄이고, 기능 확장과 유지보수를 쉽게 할 수 있습니다.


🌱 1. 상속의 필요성

  1. 중복 방지

    • 상속을 사용하면 공통적인 기능을 상위 클래스에 정의하여, 중복된 코드를 반복 작성하지 않아도 됩니다.
    • 예: "사자는 동물이다. 판다는 동물이다." → "사자와 판다는 동물이라는 공통점을 가진다."
  2. 코드 관리의 편의성

    • 부모 클래스에 변경 사항이 생기면, 해당 변경 사항은 모든 자식 클래스에 적용됩니다.
    • 예: "게임 캐릭터(플레이어)의 기본 속성을 부모 클래스에 정의하면, 모든 캐릭터는 이를 자동으로 물려받습니다."
  3. 구조화된 코드

    • 상속을 사용하면 클래스 간의 관계를 명확히 정의할 수 있습니다.
    • 예: "플레이어 → 궁수, 전사, 마법사"처럼 상속 계층을 구성합니다.

🌱 2. 상속의 특징

  1. "Is-A" 관계

    • 상속은 "Is-A" 관계를 나타냅니다.
    • 예: "고양이는 동물이다." → 고양이 클래스는 동물 클래스를 상속받아 동물의 특성을 공유합니다.
  2. 확장 가능성

    • 자식 클래스는 부모 클래스의 모든 변수와 함수를 물려받지만, 필요에 따라 새로운 기능을 추가하거나, 부모 클래스의 기능을 재정의(오버라이딩)할 수 있습니다.

🌱 3. 블루프린트에서 상속 구현 방법

방법 1: 기존 클래스에서 부모 클래스로 설정

  1. 부모 클래스(BP_Player)자식 클래스(BP_Knight) 생성.
  2. 자식 클래스의 블루프린트에 들어가 Class Settings 클릭.
  3. Details 패널에서 Parent Class를 BP_Player로 변경.
  4. 저장 후 컴파일하면 BP_Knight는 BP_Player의 모든 변수와 함수를 상속받게 됩니다.

방법 2: 생성 시 부모 클래스 선택

  1. 블루프린트 생성 창에서 상위 클래스를 검색하여 선택.
    • 예: BP_Player를 검색하여 선택 후 자식 클래스를 생성.
  2. 이렇게 하면 초기 설정부터 부모 클래스를 지정할 수 있어 편리합니다.

🌱 4. 상속받은 변수 확인

  • 자식 클래스에서 상속받은 변수를 확인하려면 검색창 옆의 눈 아이콘을 클릭합니다.
  • 눈 아이콘을 활성화하면 부모 클래스로부터 상속받은 변수와 함수가 표시됩니다.
  • 상속된 변수는 수정 가능하며, 자식 클래스에 맞게 확장하거나 오버라이딩할 수 있습니다.

🌱 5. 상속 활용

부모 클래스의 변수 및 함수 사용

  • 자식 클래스는 부모 클래스의 변수를 직접 사용할 수 있습니다.
  • 예: BP_Player 클래스의 Hp, Damage 변수를 BP_Knight에서 그대로 사용 가능.

자식 클래스의 부모 타입 사용

  • 자식 클래스는 부모 클래스로 다룰 수 있습니다.
    • 예: 부모 클래스 타입 변수에 자식 클래스 객체를 할당.
    • "BP_Player 타입 변수에 BP_Knight 객체를 할당" 가능.

함수 확장

  • 부모 클래스의 함수를 자식 클래스에서 재정의(오버라이딩)하여 자식 클래스만의 동작을 정의 가능.

🌱 6. 상속성의 예시

플레이어와 캐릭터 클래스

  1. 부모 클래스 BP_Player

    • 공통 변수: Hp, Damage
    • 공통 함수: Attack, TakeDamage
  2. 자식 클래스

    • BP_Knight: 근접 공격에 특화된 클래스.
    • BP_Archer: 원거리 공격에 특화된 클래스.
    • BP_Mage: 마법 공격에 특화된 클래스.

🌱 7. 코드 중복 방지와 유지보수

  • 상속을 통해 공통 코드는 부모 클래스에서 한 번만 정의하면 됩니다.
  • 예: 모든 캐릭터가 "공격"과 "피격" 기능을 가진다면, 부모 클래스에 AttackTakeDamage 함수를 정의하여 자식 클래스에서 그대로 사용.
  • 이후 공격 방식 변경이 필요하면, 부모 클래스만 수정하면 전체 캐릭터에 반영됩니다.

profile
李家네_공부방

0개의 댓글