추상 클래스 ( Abstract Class )

2025. 9. 28. 09:54·⭐C Sharp/11. 객체 지향

추상 클래스 ( Abstract Class )

여러 클래스가 비슷한 구조를 가질 때, 그 공통된 틀과 동작을 정의.

구체적인 구현은 각각의 클래스에 맡기고 싶을 때 추상 클래스를 사용한다.

추상 클래스는 완전한 구현을 갖지 않고, 파생 클래스가 반드시 재정의해야 하는 멤버 ( 추상 메서드 )를 포함할 수 있는 클래스이다.

단독으로 객체를 생성할 수 없으며, 상속 전용 목적으로 사용된다.

 

 

문법

▼추상 클래스 선언

abstract class Animal
{
    public abstract void MakeSound();  // 추상 메서드
    public void Sleep()                // 일반 메서드도 가능
    {
        Console.WriteLine("Zzz...");
    }
}

 

▼파생 클래스에서 반드시 구현

class Dog : Animal
{
    public override void MakeSound()
    {
        Console.WriteLine("Woof!");
    }
}

 

abstract 메서드는 구현이 없으며, 자식 클래스에서 반드시 override 해야 한다.

일반 메서드도 함께 선언할 수 있다.

추상 클래스는 완전한 클래스와 불완전한 클래스의 중간 형태라고 볼수 있다.

 

 

▼추상 클래스는 인스턴스화 할수 없다

Animal animal = new Animal();
// 추상클래스로 선언된 클래스는 인스턴스 생성 불가

추상 클래스는 객체로 직접 만들 수 없다. 

의도된 제한으로, 반드시 상속을 통해 사용해야 한다.

 

 

주의 사항

  • 추상 클래스 선언 : abstract 키워드를 사용
  • 객체 생성 불가 : 인스턴스를 직접 만들 수 없다
  • 필수 구현 : 추상 메서드가 하나라도 있으면 추상 클래스가 되어야 한다
  • 필수 구현 : 자식 클래스는 추상 메서드를 반드시 override 해야 한다
  • 인터페이스와 차이 : 추상 클래스는 "상태 ( 필드 , 생성자 )" 를 가질 수 있지만, 인터페이스는 그렇지 않다. ( Signature )

 

 

 

추상 클래스 사용 이유

  • 여러 클래스가 공통된 동작을 가짐과 동시에 각각 다른 방식으로 특정 동작을 구현해야 할 때
  • 공통 로직은 부모 클래스 , 변해야 하는 부분만 자식 클래스에 위임하고 싶을 때
  • 일관된 상속 구조를 강제하여 확장성과 유지보수성을 높일때 사용 

 

 

일반 클래스 상속 vs 추상 클래스 상속

 

일반 클래스 상속

  • 부모 클래스가 완전히 구현되어 있다
  • 자식 클래스는 부모의 기능을 그대로 사용하거나 override 로 일부 수정 가능
  • 객체 생성 가능 ( 부모 클래스도 new 해서 직접 사용 가능 )

 

 

추상 클래스 상속

  • 부모 클래스가 불완전 → 추상 메서드를 가지고 있다
  • 자식 클래스는 추상 메서드를 반드시 구현해야 한다 ( 강제성 있음 )
  • 객체 생성 불가 ( new 추상클래스() ) 

 

 

인터페이스 ( Interface ) 와 추상 클래스의 공통점과 차이점

공통점

  • 둘 다 객체 생성 불가 ( new )
  • 상속 / 구현 전용으로만 사용
  • 파생 클래스 ( 자식 )는 정의된 메서드를 반드시 구현해야 한다

 

 

차이점

구분 추상 클래스 인터페이스
상속 / 구현 class Dog : Animal 처럼 단일 상속만 가능 다중 구현 가능
멤버 추상 메서드 , 메서드 , 필드 , 속성 , 생성자 메서드 시그니처 ( 정의 )
생성자 생성자 정의 가능 ( 직접 new 불가 ) 생성자 불가
상태 ( 필드 ) 가질 수 있다 → 공통된 상태 / 값 저장 가능 가질 수 없다 → 기능만 정의
목적 틀 ( 템플릿 ) 제공 + 일부 공통 기능 구현 규칙만 정의 → 구현은 자식 클래스에 위임

▲인터페이스 멤버는 C# 8.0 이후 default 구현 가능하지만 기본적으로는 없다

▲인터페이스는 규칙만 강제, 나머지는 전적으로 자식 클래스에 맡긴다

 

 

 

정리

추상 클래스는 "탬플릿 역할"을 하는 클래스 → 객체 생성 불가, 반드시 상속받아 구현

  • 추상 클래스 : "기본 틀 + 일부 구현" 제공
  • 인터페이스 : "순수 규칙" 제공
  • 일반 상속 : "필요하면 덮어써도 되고 안해도 됨"

 

 

참고 자료

https://learn.microsoft.com/ko-kr/dotnet/csharp/programming-guide/classes-and-structs/abstract-and-sealed-classes-and-class-members

 

'⭐C Sharp > 11. 객체 지향' 카테고리의 다른 글

readonly  (0) 2025.10.02
상속 ( OOP )  (0) 2025.09.28
인터페이스 ( Interface )  (0) 2025.09.28
this ( 매개변수 키워드 )  (0) 2025.09.28
클래스 ( Class )  (0) 2025.09.22
'⭐C Sharp/11. 객체 지향' 카테고리의 다른 글
  • readonly
  • 상속 ( OOP )
  • 인터페이스 ( Interface )
  • this ( 매개변수 키워드 )
DevHoChan
DevHoChan
맨땅에서 시작하는 코딩 도전
  • DevHoChan
    Debugging Life
    DevHoChan
  • 전체
    오늘
    어제
    • 분류 전체보기 (374)
      • 🕹️Game Life (1)
      • 🖥️Computer Science (5)
      • 📖TIL (141)
        • 🔥Projects (16)
        • 💡DevTips (5)
        • 🤔발생한 문제와 해결 (5)
        • 🔮Unity Graphics (5)
        • 🎤Interview (3)
        • ✅CodingTest (9)
      • 🚀Game Release (4)
      • 🧊Unity Basic (58)
        • 📌용어 사전 (1)
        • 에디터&인터페이스 (3)
        • 디버그 (1)
        • 라이프사이클 (4)
        • 게임오브젝트 (4)
        • 프리팹 (1)
        • 오브젝트풀링 (4)
        • 애트리뷰트 (2)
        • 트랜스폼 (4)
        • 물리&충돌 (1)
        • 프레임&델타타임 (4)
        • 코루틴&이벤트 (7)
        • 수학&보정함수 (3)
        • 디자인패턴 (9)
        • UGUI (3)
        • 벡터 ( Vector ) (3)
        • 씬 ( Scene ) (2)
        • 데이터 관리 (2)
      • ⭐C Sharp (99)
        • 📌용어 사전 (1)
        • 📌문법 사전 (6)
        • 메모리 관리 (3)
        • 00. 문법 (17)
        • 01. 변수 (3)
        • 02. 자료형 (2)
        • 03. 연산자 (6)
        • 04. 조건문 (2)
        • 05. 반복문 (2)
        • 06. 배열 (3)
        • 07. 메서드(함수) (7)
        • 08. 열거형 (3)
        • 09. 구조체 (2)
        • 10. 참조 (2)
        • 11. 객체 지향 (11)
        • 12. 델리게이트 (3)
        • 13. 디자인 패턴 (7)
        • 14. LINQ (1)
        • 📂▼자료구조 (2)
        • 15-1. 제네릭 (3)
        • 15-2. 배열 (4)
        • 15-3. 리스트 (2)
        • 15-4. 스택과 큐 (2)
        • 15-5. 딕셔너리 해시테이블 (2)
        • 15-6. 트리와 그래프 (3)
      • 📊Algorithm (16)
        • BigO (2)
        • 정렬 (4)
        • 셔플 (2)
        • 탐색 (6)
        • 최적화 (1)
      • 📝Game Design (16)
      • 🤖​AI Tools (12)
        • AI 리뷰 분석 (6)
        • Player2 (0)
        • 3D 모델링 (1)
        • 2D 스프라이트 (0)
        • 이미지 (2)
        • 사운드 (1)
        • 동영상 (1)
        • 문서 (1)
      • 🌍Network (6)
      • 🌱Github (11)
        • 기본 개념 (7)
        • 명령어 (1)
        • 도구 활용 (1)
      • ⚙️Visual Studio (5)
        • 🔧설치 및 환경설정 (2)
        • ⌨️HotKey (1)
        • 🚨디버깅 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    CodingTest
    문법
    OOP
    gamedesign
    csharp
    기획
    유니티
    게임디자인
    c#
    자료구조
    자료형
    unity
    부트캠프
    디자인패턴
    메모리관리
    객체지향
    GitHub
    til
    algorithm
    게임기획
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
DevHoChan
추상 클래스 ( Abstract Class )
상단으로

티스토리툴바