Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# 추상화(Abstraction)란 무엇인가? 개념부터 예제까지 한눈에

추상화와 캡슐화의 관계

추상화(Abstraction)와 캡슐화(Encapsulation)는 객체 지향 프로그래밍(OOP)에서 밀접하게 연관된 핵심 개념입니다. 추상화는 불필요한 세부 사항을 숨기고 필요한 정보만 외부에 노출하는 역할을 하며, 캡슐화는 프로그래머가 원하는 수준의 추상화를 실제로 구현할 수 있도록 도와주는 장치입니다.

C#에서 추상화를 구현하는 방법

C#에서는 추상 클래스(abstract class)를 사용하여 추상화를 구현할 수 있습니다. 추상 클래스는 인터페이스의 일부 구현을 미리 제공하는 역할을 하며, 나머지 구현은 이를 상속받는 파생 클래스(derived class)가 완성합니다. 추상 클래스 내부에는 추상 메서드(abstract method)가 포함될 수 있는데, 이 메서드는 선언만 존재하고 본문이 없으며 반드시 파생 클래스에서 재정의(override)되어야 합니다. 그 결과 파생 클래스는 더욱 특수화된 기능을 갖게 됩니다.

추상 클래스 사용 시 핵심 규칙

  • 추상 클래스는 인스턴스를 직접 생성할 수 없습니다.

  • 추상 메서드는 추상 클래스 외부에 선언할 수 없습니다.

  • sealed로 선언된 클래스는 상속이 불가능하므로, 추상 클래스를 sealed로 선언할 수 없습니다.

예제 코드

using System;
namespace Demo {
    abstract class Shape {
        public abstract int area();
    }

    class Rectangle : Shape {
        private int length;
        private int width;

        public Rectangle(int a = 0, int b = 0) {
            length = a;
            width = b;
        }
        public override int area() {
            Console.WriteLine("Rectangle class area :");
            return (width * length);
        }
    }
    class RectangleTester {
        static void Main(string[] args) {
            Rectangle r = new Rectangle(20, 15);
            double a = r.area();
            Console.WriteLine("Area: {0}", a);
            Console.ReadKey();
        }
    }
}

실행 결과

Rectangle class area :
Area: 300

위 예제에서 Shape는 추상 클래스이며, 넓이를 계산하는 area() 메서드의 선언만 포함되어 있습니다. 이를 상속한 Rectangle 클래스가 area() 메서드를 재정의하여 가로와 세로를 곱한 실제 넓이를 반환합니다. 실행 결과 가로 20, 세로 15인 사각형의 넓이인 300이 출력되는 것을 확인할 수 있습니다.