티스토리 뷰

ETC

C#에서 추상클래스

NicSub 2026. 1. 22. 10:24
728x90
반응형
C#에서 추상클래스(
abstract class)는 '미완성 설계도'로, 공통된 틀을 제공하지만 자식 클래스(파생 클래스)가 반드시 채워야 할 부분이 있을 때 사용하며, abstract는 구현부가 없는 메서드를, virtual은 구현부가 있는 메서드를 파생 클래스에서 재정의(Override)할 수 있도록 허용할 때 쓰는 키워드예요. abstract는 '반드시 구현해야 함'을 강제하고, virtual은 '선택적 재정의'를 허용하는 차이가 있습니다. 

추상클래스(abstract class)는 왜 사용할까?
  • 공통된 기반 제공: 여러 클래스가 공유하는 기본적인 속성과 메서드(구현된 메서드도 포함)를 정의하여 코드 중복을 줄여줘요. (예: '동물'이라는 추상 클래스에 이름 속성과 나이 필드, 먹기() 메서드를 구현)
  • 강력한 계약: abstract 메서드를 포함시켜, 이 추상클래스를 상속받는 모든 클래스가 특정 기능을 반드시 구현하도록 강제해요. (예: '동물'에 소리내기()라는 abstract 메서드를 만들어, '개'는 멍멍, '고양이'는 야옹 하고 반드시 구현하게 함).
  • 객체 생성 불가: 추상클래스 자체로는 인스턴스(객체)를 만들 수 없고, 반드시 상속을 통해 구체화해야 해요. 
abstract와 virtual의 차이
구분 abstract (추상)virtual (가상)
메서드 구현 구현부가 없음 (빈껍데기). 구현부가 있음 (기본 로직 포함).
재정의(Override) 파생 클래스에서 반드시 구현해야 함. 파생 클래스에서 선택적으로 재정의할 수 있음.
사용 대상 추상 클래스에서만 사용 가능 (클래스 자체도 abstract여야 함). 일반 클래스나 추상 클래스 모두 사용 가능.
목적 하위 클래스에 특정 기능 구현을 강제하여 공통된 동작을 보장. 하위 클래스에서 기본 동작을 변경할 수 있도록 유연성 제공.
쉽게 비유하자면?
  • 추상클래스: '건축 도면' (기본 구조는 있지만, 방의 종류나 내부 마감은 정해지지 않음).
  • abstract 메서드: '필수 설비' (도면에 반드시 넣어야 하는 수도, 전기 배관 위치).
  • virtual 메서드: '선택 인테리어' (기본 벽지 제공이지만, 원하는 색으로 칠할 수 있음).
  • override된 메서드: '도면을 따라 직접 만든 벽지 색' (기본을 바꾸는 행위).
언제 뭘 쓸까?
  • abstract (추상)'~는 ~을 할 수 있다'가 아니라, '~는 반드시 ~를 해야 한다'는 강력한 '규칙'을 만들고 싶을 때.
  • virtual (가상)'~는 기본적으로 ~를 하지만, 필요하면 바꿀 수 있다'는 유연한 '옵션'을 제공하고 싶을 때. 
반응형
댓글