일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 회전
- 웹스크래핑
- getItem
- topdown
- 자주 사용하는 Quaternion 함수
- 연습
- 코딩
- classList
- intervals
- PYTHON
- Event
- wsl
- 종속변수
- Lerp
- 2D
- 도린이
- click
- jQuery
- 독립변수
- addEventListener
- 도트
- 탑다운
- 픽셀
- Unity
- vsCode
- javascript
- setItem
- className
- Quaternion
- euler
- Today
- Total
쫑가 과정
객체 지향 프로그래밍의 상속과 다형성 본문
Inheritance and polymorphism in object-oriented programming
상속과 다형성은 깊이 얽혀 있다.
상속은 서로 다른 개체 간의 부모(Parent) - 자식(Child) 관계에 중점을 둔다.
다형성은 상속의 결과이며 부모 클래스에서 상속한 것을 자식 클래스가 수정하는 프로세스
상속과 다형성을 함께 사용하면 응용 프로그램에서 작성해야 하는 코드의 양을 줄일 수 있다.
상속
상속은 다른 클래스(자식 클래스)를 만들 수 있는 기본 클래스(부모 클래스)를 만드는 프로세스이다.
자식 클래스 : 자동으로 부모 클래스의 모든 기능을 사용하거나 상속.
예) 적 클래스를 상속받는 개별 클래스
상속을 사용하면 개별 적 클래스에 대한 체력 및 피해 기능을 작성할 필요가 없으므로
각 클래스에 고유한 기능을 작성하는 데 집중할 수 있다.
예) 모든 핵심 Unity 스크립팅 기능이 상속되는 MonoBehaviour 기본 클래스
public class SomeClass : MonoBehaviour { }
MonoBehaviour가 없으면 OnTriggerEnter나 Start, Update를 사용할 수 없다.
다형성
부모 클래스에서 핵심 기능을 상속하는 것이 도움이 될 수 있지만
예) MonoBehaviour을 상속하는 Enemy 클래스를 상속하는 Thief 클래스.
public class Enemy : MonoBehaviour
{
public void DealDamage ()
{
Player.Health -= 10;
}
}
public class Thief : Enemy
{
private void Update()
{
if (Player.isSeen)
{
DealDamage(); // method from parent class can be called
}
}
}
다형성은 자식 클래스가 부모 클래스와 정확히 동일한 작업을 수행하는 것을 원하지 않는 상황에 쓰인다.
다형성은 부모 클래스에서 상속하는 기능을 변경할 수 있다.
상위 클래스에서 재정의하려는 메서드는 우선 재정의 대상(overriding)으로 표시되어야 한다.
이것은 가상 메서드(virtual method)로 만들어 수행된다.
예) 기본 클래스(Enemy) 상속하는 메서드를 virtual method로 만든다.
public class Enemy : MonoBehaviour {
public virtual void DealDamage () { // virtual keyword allows overriding
Player.Health -= 10;
}
}
이러한 변경은 메서드 재정의(method overriding)라고 하는 프로세스를 통해 수행된다.
예) virtual method인 DealDamage를 상속해 override method로 재정의한다.
public class Thief : Enemy
{
public override void DealDamage() // can override virtual methods from parent class
{
Player.Health -= 2;
CommitPettyTheft();
}
private void Update()
{
if (Player.isSeen)
{
DealDamage();
}
}
}
이제 Update에서 Thief 개체에 의해 DealDamage가 호출되면
상위 메서드 대신 사용자 정의된 DealDamage 메서드가 호출된다.
메서드를 가상으로 식별하는 것은 재정의할 수 있지만 재정의할 필요는 없음을 나타낸다.
Thief 자식 클래스에서만 DealDamage 메서드를 수정하고 다른 자식 클래스는 변경되지 않아야 하기에 이상적이다.
상속과 다형성은 궁극적으로 작성해야 하는 코드의 총량을 줄이는 데 도움이 되는 클래스 간의 상호 관계를 생성하는 데 도움이 됩니다.
'Unity > 이론' 카테고리의 다른 글
(Euler) 각을 (Quaternion) 값으로 바꾸기 / Quaternion.Euler (0) | 2022.01.13 |
---|---|
두 회전 사이의 각 구하기 / Quaternion.Angle (0) | 2022.01.12 |
타겟 방향 바라보기 함수 / Quaternion.LookRotation (0) | 2022.01.12 |
벡터 연산 이해하기 (0) | 2022.01.07 |
유니티3D 회전 이해 (0) | 2022.01.06 |
객체 지향 프로그래밍의 캡슐화 (0) | 2021.12.28 |
객체 지향 프로그래밍의 추상화 (0) | 2021.12.27 |
객체 지향 프로그래밍의 원리 (0) | 2021.12.21 |