Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- 반복문
- 리스트
- 인프런
- 벡터
- 트리
- 해쉬맵
- map
- std::map
- 객체지향
- 알고리즘
- thread
- 힙영역
- 배열
- c#
- 기술면접
- list
- MonoBehaviour
- 스택영역
- rookiss
- std::unordered_map
- vector
- 공부
- 스택
- static_cast
- 차이점
- 자료구조
- 큐
- Queue
- 프래그멘테이션
- 멀티쓰레드
Archives
- Today
- Total
호빵의 IT 개발소
[C/C#] 추상, 가상함수 본문
추상 함수(abstract)
- 함수, 속성, 인덱서, 이벤트, 클래스에 사용이 가능
- abstract로 선언된 것이 있을 경우 해다 위치에서 명시적으로 구현된 것이 아니라 상속받은 위치에서 구현하도록 맡기는 것이다. 그리고 상속받은 클래스에서 abstract를 구현하지 않으면 에러가 나기 때문에 클래스를 구조화할 경우 해당 클래스를 상속받아서 필수적으로 구현해야 하는 것과 아닌 것을 나눌 수 있다. 해당 클래스를 상속 받아서 사용하는 프로그래머 입장에서 따로 설명을 하지 않아도 인지 가능
가상 함수(virtual)
- 속성, 인덱서, 이벤트에서 사용
- 추상 함수와 반대로 virtual 함수는 상속 받은 클래스에서 따로 구현 할 필요가 없다. 필요한 경우에만 구현
동물 예제로 설명하겠습니다. 공통 적인 행동 패턴은 virtual로 구현합니다. 하지만 행동 같은 경우는 동물에 따라 다르므로 abstract으로 구현합니다.
public class Animal : MonoBehaviour
{
public virual void Damage()
{
// 데미지를 입음
}
public virual void Move()
{
// 움직임
}
public virual void Dead()
{
// 죽음
}
public abstract Random_Action1();
public abstract Random_Action2();
public abstract Random_Action3();
}
WeakAnimal에 Animal을 클래스를 상속받아 구현하게 됩니다. override된 함수로 약한 동물과 강한 동물에 다른 랜덤 행동을 구현하게 됩니다.
public class WeakAnimal : Animal
{
public override void Random_Action1()
{
// 랜덤 행동1
}
public override void Random_Action2()
{
// 랜덤 행동2(
}
public override void Random_Action3()
{
// 랜덤 행동3
}
}
public class StrongAnimal : Animal
{
public override void Random_Action1()
{
// 랜덤 행동1
}
public override void Random_Action2()
{
// 랜덤 행동2(
}
public override void Random_Action3()
{
// 랜덤 행동3
}
}
virtual 함수를 override하여 기능을 추가할 수 있습니다. Damage()와 Move()함수를 override하여 기능 추가. base. 를 사용하여 기존 Animal 스크립트에 있는 Damage(), Move()에 구현 되어있는 기능을 그대로 수행
public class WeakAnimal : Animal
{
public override void Damage()
{
// 공격 받으면 도망
base.Damage();
}
public override void Move()
{
// 추가적인 Move 관련 기능 추가
base.Move();
}
}
public class StrongAnimal : Animal
{
public override void Damage()
{
// 공격 받으면 플레이어를 공격
base.Damage();
}
public override void Move()
{
// 추가적인 Move 관련 기능 추가
base.Move();
}
}
순수 가상 함수(Pure Virtual Function)
- 추상 함수라고 불리우며 추상함수를 포함하는 클래스에는 abstract키워드를 사용하여 추상클래스라고 명시해야 한다.
public abstract class Parent // 추상 클래스 명시
{
public abstract void Damage(); // 자식 클래스에서 반드시 구현부를 정의
}
public class Child : Parent
{
public override void Damage(); // 자식 클래스에서 구현부 오버라이드
{
Console.WriteLine("데미지를 입었습니다.");
}
}
'CS(전공지식) > 프로그래밍언어' 카테고리의 다른 글
| [C/C#] 지역 변수, 전역 변수 (0) | 2022.06.20 |
|---|---|
| [C/C#] 객체 지향 언어, 절차 지향 언어 (0) | 2022.06.20 |
| [C/C#] namespace, partial (0) | 2022.06.20 |
| [C/C#] 상속, 다형성 (0) | 2022.06.19 |
| [C/C#] 구조체와 클래스 (0) | 2022.06.19 |
Comments