산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> C 언어

C# 추상 클래스와 추상 메서드: 실전 가이드

C# 추상 클래스와 추상 메서드 마스터하기

명확한 예제, 상속 패턴, 생성자, 실전 유스케이스로 C# 추상 클래스와 메서드 탐구.

추상 클래스 (Abstract Class)

C#에서 추상 클래스는 직접 인스턴스화 불가한 템플릿 역할. abstract 키워드로 서브클래싱 목적 명시. 예:

// 추상 클래스 정의
abstract class Language {
    // 필드와 메서드
}
// 인스턴스 생성 시도 시 에러
// Language obj = new Language();

추상 클래스는 추상 메서드(본문 없는 선언)와 구상 메서드(완전 구현) 모두 포함 가능. 예:

abstract class Language {
    // 추상 메서드 – 본문 없음
    public abstract void Display();
    // 구상 메서드 – 구현 있음
    public void DisplayInfo() {
        Console.WriteLine("Concrete method in abstract class");
    }
}

진행 전 C# 상속 개념 숙지 권장.


추상 클래스 상속

추상 클래스 직접 인스턴스화 불가하므로 구체적 서브클래스 생성해 파생. 서브클래스 추상 클래스 멤버 상속, 파생 객체 통해 사용. 예:

using System;
namespace AbstractClassDemo {
    abstract class Language {
        public void Display() {
            Console.WriteLine("Concrete method in abstract class");
        }
    }
    // 구상 서브클래스
    class Program : Language {
        static void Main(string[] args) {
            Program prog = new Program();
            prog.Display();
            Console.ReadLine();
        }
    }
}

출력

Concrete method in abstract class

Language 추상, Program 상속받아 Display() 호출. 추상 클래스는 sealed 불가, 항상 기반 타입 역할.

참고: 여러 파생 타입이 구현할 공통 계약 필요 시 이 패턴 사용.


C# 추상 메서드 (Abstract Methods)

추상 메서드는 본문 없는 시그니처만 선언. 구상(비추상) 파생 클래스에 구현 강제. 예:

public abstract void Display();

추상 클래스만 추상 메서드 가질 수 있음. 구상 서브클래스 상속 시 모든 추상 멤버 오버라이드 필수(자신도 추상 선언 안 하면).

예제: 추상 메서드 구현

using System;
namespace AbstractClassDemo {
    abstract class Animal {
        public abstract void MakeSound();
    }
    class Dog : Animal {
        public override void MakeSound() {
            Console.WriteLine("Bark Bark");
        }
    }
    class Program {
        static void Main(string[] args) {
            Dog dog = new Dog();
            dog.MakeSound();
            Console.ReadLine();
        }
    }
}

출력

Bark Bark

Animal이 추상 메서드 MakeSound() 선언. 구상 서브클래스 Dog가 오버라이드로 계약 이행.

참고: 추상 메서드는 암시적 virtual이므로 virtual 키워드 불필요/불가.


Getter/Setter 있는 추상 속성 (Abstract Properties)

추상 접근자로 파생 클래스에서 속성 get/set 로직 커스터마이즈 가능. 예:

using System;
namespace AbstractClassDemo {
    abstract class Animal {
        protected string name;
        public abstract string Name { get; set; }
    }
    class Dog : Animal {
        public override string Name {
            get { return name; }
            set { name = value; }
        }
    }
    class Program {
        static void Main(string[] args) {
            Dog dog = new Dog();
            dog.Name = "Tom";
            Console.WriteLine("Name: " + dog.Name);
            Console.ReadLine();
        }
    }
}

출력

Name: Tom

파생 클래스 추상 속성 구현으로 캡슐화된 상태 관리 가능.


추상 클래스 생성자

추상 클래스 생성자 정의 가능, 모든 서브클래스 공유 상태 초기화. 서브클래스 인스턴스 생성 시 추상 클래스 생성자 먼저 실행. 예:

using System;
namespace AbstractClassDemo {
    abstract class Animal {
        public Animal() {
            Console.WriteLine("Animal Constructor");
        }
    }
    class Dog : Animal {
        public Dog() {
            Console.WriteLine("Dog Constructor");
        }
    }
    class Program {
        static void Main(string[] args) {
            Dog d1 = new Dog();
            Console.ReadLine();
        }
    }
}

출력

Animal Constructor
Dog Constructor

필요 시 서브클래스 소멸자(Destructor) 정의 가능.

참고: 생성자는 모든 파생 타입 필요 공통 리소스 설정 시 유용.


추상 클래스로 C# 추상화 (Abstraction)

추상 클래스는 구현 세부사항 숨기고 깔끔한 인터페이스 노출로 추상화 제공. "어떻게" 아닌 "무엇"에 집중해 복잡계 단순화.

실생활 비유: 오토바이 브레이크 시스템. 외부 동작(감속/정지) 일관되나 내부 메커니즘 모델별 상이. 추상 클래스로 각 모델 고유 제동 로직 구현하되 외부 계약 불변.

예제: 오토바이 브레이크

using System;
namespace AbstractClassDemo {
    abstract class MotorBike {
        public abstract void Brake();
    }
    class SportsBike : MotorBike {
        public override void Brake() {
            Console.WriteLine("Sports Bike Brake");
        }
    }
    class MountainBike : MotorBike {
        public override void Brake() {
            Console.WriteLine("Mountain Bike Brake");
        }
    }
    class Program {
        static void Main(string[] args) {
            SportsBike s1 = new SportsBike();
            s1.Brake();
            MountainBike m1 = new MountainBike();
            m1.Brake();
            Console.ReadLine();
        }
    }
}

출력

Sports Bike Brake
Mountain Bike Brake

MotorBike 추상 메서드 Brake() 선언. 각 구상 바이크 클래스 고유 구현 제공, 다형성 시연.

참고: 기반 구현 전혀 없는 완전 추상화 원하면 인터페이스 고려.

C 언어

  1. C# 클래스와 객체: 견고한 OOP를 위한 기초 다지기
  2. C# partial 클래스와 partial 메서드 이해하기
  3. C# sealed 클래스와 메서드: 상속/오버라이딩 제한으로 코드 안전성·성능 높이기
  4. C++ 클래스와 객체: 객체지향 프로그래밍 실전 가이드
  5. C++ 프렌드 함수와 프렌드 클래스: 접근 제어 마스터하기
  6. Java 클래스와 객체: 실전 가이드
  7. Java 추상 클래스와 메서드 완벽 가이드
  8. Java 중첩/내부 클래스 마스터: 종류, 예제, 모범 사례
  9. C# 추상 클래스(Abstract Class) 완벽 가이드: 실전 코드 예제
  10. Java 마스터하기: 객체, 클래스, 핵심 OOP 개념 이해