반응형
객체지향 - 추상 클래스 (Abstract Class)
동물원 게임을 만들고 싶다고 하자.
동물원에는 포유류, 파충류, 어류 등 다양한 종류의 생명체들이 살고 있다.
이 생명체들을 구현하려면 단순히 포유류, 파충류, 어류 클래스를 각각 만들어버릴 수도 있다.
하지만 추상 클래스를 이용하면 더 명확하게 구현이 가능하다.
추상 클래스는 추상 메서드를 갖는 클래스다. 다만 반드시 추상 메서드를 가질 필요는 없다.
(그러나 추상 메서드가 없는 클래스를 굳이 추상 클래스로 만들 필요가 있을까? 게다가 추상 메서드는 추상 클래스만 가질 수 있다.)
추상 클래스를 통해 생명체의 움직임을 구현해보자.
포유류는 걷고, 파충류는 기어다니고, 어류는 헤엄친다고 치자.
세 종류는 모두 생명체이다.
따라서 Life 클래스를 부모 클래스로 만든다.
abstract 키워드를 붙이면 추상 클래스가 된다.
추상 클래스가 일반 클래스와 다른 점은
1. 추상 클래스는 new 키워드를 사용해 인스턴스를 생성하는 것이 불가능하다.
2. 추상 메서드를 가질 수 있다.
추상 메서드는 아래처럼 정의할 수 있다.
추상 메서드는 가상 메서드와 달리 자식 클래스에서 반드시 오버라이드 해야 하고, 코드를 가지지 않는다.
이제 Mammal, Reptile, Fish 클래스를 만들고 Life 에 상속시키자.
그 후 각 클래스마다 Move 메서드를 오버라이드
전체 코드 :
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
using System;
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
Life lion = new Mammal();
Life goldfish = new Fish();
Life lizard = new Reptile();
}
}
abstract class Life
{
abstract public void Move();
}
class Mammal : Life
{
public override void Move()
{
Console.WriteLine("걷는다.");
}
}
class Fish : Life
{
public override void Move()
{
Console.WriteLine("헤엄친다.");
}
}
class Reptile : Life
{
public override void Move()
{
Console.WriteLine("기어다닌다.");
}
}
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
|
실행하면
걷는다.
헤엄친다.
기어다닌다.
계속하려면 아무 키나 누르십시오 . . .
이렇게 뜬다.
abstract 키워드는 virtual 과 얼추 비슷해 보이지만 후자와 달리 전자가 붙은 메서드는 반드시 재정의되어야 한다는 차이점이 있다.
반응형
'C#' 카테고리의 다른 글
[C# / 객체지향] 델리게이트 (Delegate) (0) | 2020.03.11 |
---|---|
[C#] 은행 게임 코드 (수정본) (0) | 2020.01.17 |
[C# / 게임] 은행 게임 만들어보기 (객체지향 정리) (0) | 2020.01.16 |
[C# / 객체지향] 8. 다형성 - 오버로드 (Method Overload) (0) | 2020.01.08 |
[C# / 객체지향] 8. 다형성 - 메서드 오버라이드 (Method Override) (0) | 2019.12.19 |