[C# 문법] 추상 클래스, 추상 메서드 (abstract)

안녕하세요.

 

오늘은 C#에서 추상화에 대해서 알아보려고 합니다.

 

앞서, 상속과 다형성에 대해서 공부를 했었는데요.

 

오늘은 추상화에 대해서 공부하려고 하고, C# 에서는 어떻게 추상화를 표현하는지 예제 코드도 작성해서 보여 드리려고 합니다.

 

먼저, 추상화에는 크게 추상 클래스와 추상 메서드가 있습니다.

 

추상화란

 

프로그램을 구성하는 모듈의 중요한 특성이 무엇인지, 무엇을 하는지를 파악하는 것. 프로그램은 여러 가지 또는 그 이상의 모듈들로 구성됩니다. 규모가 클 수록 그 개수도 늘어나지요. 커다란 소프트웨어를 완성하기 위해서는 어떤 모듈들을 만들어야 하는지를 결정해야 합니다. 그 다음에 각 모듈은 어떤 특징을 갖는지를 또한 정해야 합니다. 이러한 행동을 우리는 '추상화한다'라고 말합니다.

 

추상화는 실제 코딩을 하기 전에 수행되어야 합니다. 물론 코딩을 하면서 추상화가 진행될 수도 있습니다. 하지만 체계적인 소프트웨어를 만들기 위해서는 코딩하면서 추상화를 하는 것보다는 코딩하기 전에 추상화를 진행하는 것이 좋습니다. 만들려는 프로그램 P가 있고, 이는 모듈 M1, M2, M3로 구성된다고 가정해 봅시다. 즉흥적인 프로그래머는 당장 코딩을 할 수 있습니다. 코딩하면서 M1, M2, M3가 결정되겠지요이렇게 하는 것보다는 코딩 전에 이 프로그램의 모듈은 M1, M2, M3로 구별을 하는 것이 보다 체계적인 코드를 만드는데 도움이 됩니다. 모듈의 종류를 결정한 후 이들의 알고리즘을 설계하고, 마지막에 코딩하는 것이 가장 이상적입니다. (물론 이렇게 프로그램을 만드는 조직을 찾기는 어렵지요.)

 

[출처] [OOP] 추상화(abstraction)란? [C#][C++][Java]|작성자 도리안

 

위와 같이 어느 훌륭한 개발자 분께서 추상화의 정의를 이해하기 쉽게 설명을 해드렸습니다!

 

그럼, 위의 내용을 토대로 C#에서는 어떻게 추상화 작업을 하는지 예제 코드를 통해서 보여 드리겠습니다.

예제 코드
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
47
48
using System;
using System.Collections.Generic;
 
namespace polyTest
{
    class Program
    {
        /// <summary>
        /// 추상 클래스 선언
        /// </summary>
        public abstract class AbstractAnimal
        {
            //추상 메서드 선언
            public abstract void Sound(); //추상 메서드에는 {} 생략
        }
 
        public class Dog : AbstractAnimal
        {
            //추상 클래스를 파생클래스에서 상속 받으면
            //해당 부모 클래스의 추상 메서드 반드시 선언해야 함
            public override void Sound()
            {
                Console.WriteLine("멍멍");
            }
        }
 
        public class Cat : AbstractAnimal
        {
            //추상 클래스를 파생 클래스에서 상속 받으면
            //해당 부모 클래스의 추상 메서드 반드시 선언해야 함
            public override void Sound()
            {
                Console.WriteLine("야오야옹");
            }
        }
 
 
        static void Main(string[] args)
        {
            Dog dog = new Dog();
            Cat cat = new Cat();
 
            dog.Sound();
            cat.Sound();
        }
    }
}
 
cs

 

실행 결과

 

위와 같이 abstract 키워드를 통해서 추상 클래스와 추상 메서드를 작성해 보았습니다.

 

여기서 특징은, 여러 개의 파생 클래스에서 공유할 기본 클래스의 공통적인 정의만 하고, 파생 클래스에서 abstract 한정자가 달린 메서드들만 필수적으로 무조건 재정의 해 주어야 하는 특징이 있습니다.

 

이로써, 프로그램을 설계 하면서 추상 클래스, 추상 메서드를 선언만 잘 해놓으면 상속받아서 사용할 파생 클래스에서 개발자 실수로 추상 메서드를 선언하지 않고 가더라도 프로그램 자체적으로 에러를 발생시켜서 미연에 이런 실수도 방지 할 수 있습니다~~

 

감사합니다.

728x90

이 글을 공유하기

댓글

Designed by JB FACTORY