추상클래스

강성현
∙∙조회 6

1. 추상클래스란?

추상클래스(abstract class)는 그 자체로는 인스턴스를 만들 수 없고, 물려받는 용도로만 쓰이는 클래스입니다.

 

문법형식 :

public abstract class <클래스이름> { // 멤버 }

csharp
public abstract class Monster {}
public class Slime : Monster {}

Monster m = new Monster() // 안됨.

Monster m = new Slime() // 됨.
  • 추상 멤버가 하나라도 있으면 그 클래스는 반드시 추상클래스여야 합니다.

 


1-1) 추상 메서드

본문 없이 선언만 두고, 파생 클래스가 반드시 구현하게 만드는 메서드 입니다.

csharp
public abstract class Monster
{ 
     public abstract void Attack(); // 내용을 정할 수 없습니다.
}

public abstract class Slime : Monster
{
     public override void Attack()
     {
         Console.WriteLine($"{name} 이(가) 몸을 부딪칩니다."}; // 구현하지 않으면 컴파일 오류 발생.
     }
}
항목일반 메서드virtualabstract
본문있음있음없음
파생이 재정의불가능선택필수
어디에 둘 수 있는가모든 클래스모든 클래스추상 클래스만
재정의를 잊으면해당 없음기본 동작이 실행됨컴파일 오류

 

2. Sealed

abstract와 반대로 더이상 상속하거나 재정의하지 못하게 막는 한정자 입니다.

  • 더 나눌 이유가 없거나
  • 동작이 바뀌면 곤란할 때
csharp
public sealed class Slime : Monster
{
     public override void Attack();
}

public class KingSlime : Slime  // 오류 발생 : 봉인된 클래스는 상속할 수 없습니다.
{
}

 

  • 프로퍼티는 함수라고 볼 수 있다.

public int Id { get; private set; }

public abstract int Id { get; protected set; } // 가능