일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- c#
- as
- 일반화 클래스
- this 키워드
- 인터페이스 예제
- 클래스 연습문제
- 클래스
- base()
- 중첩클래스
- 분할 클래스
- System.Array
- 가변배열
- is
- 튜플
- 메소드숨기기
- 배열초기화
- 배열
- 프로퍼티와 생성자
- 추상 프로퍼티
- 컬렉션 초기화
- 무명형식
- 접근 한정자
- 인터페이스의 프로퍼티
- 형식변환
- 인덱서
- 인터페이스 상속
- 오버라이딩
- 자동구현프로퍼티
- 이것이C#이다
- 프로퍼티
- Today
- Total
제로의영역
8.5 추상 클래스 본문
* 본 블로그 글은 머리가 아~~~주 나쁜 왕X100초보가 프로그래밍을 공부하면서 정리를 위해 작성하는 글입니다. 잘못 정리되거나 제가 잘못 이해한 글은 이해 및 조언 부탁드립니다.
* 공부는 '이것이 C#이다' 책을 보고 하고 있습니다. 참고로 저같은 왕초보가 보기 어렵게 써져 있어서 별도의 정리 문서를 만들게 되었습니다.
1. 정의: 구현을 가질 수 있지만 인스턴스(객체)를 가질 수 없는 미완성 클래스로 상속받는 클래스들이 지켜야 하는 규칙을 정해주는 클래스
2. 용도: 추상 클래스를 사용하는 다른 제작자가 그 기능을 정의하도록 강제하여 파생클래스나 오버라이딩을 사용할 수 있도록 하게 하기 위해 사용.(팀 프로젝트나 다른 코드를 가져와 사용할 경우 혼선을 줄이는데 중요함)
3. 특징
(1) 구현을 가질 수 있음
(2) 인스턴스를 가질 수 없음
(3) 한정자를 명시하지 않으면 모든 메소드가 private으로 선언
(4) 추상 메소드를 가짐
1) 추상 메소드의 정의: 추상 클래스가 인터페이스의 역할도 할 수 있게 해주는 장치
2) 추상 메소드의 용도: 파생 클래스에서 반드시 구현하도록 강제함.(추상 클래스를 상속하는 클래스들이 반드시 이 메소드를 갖고 있을 거라는 "약속")
3) 추상 메소드의 특징: C# 컴파일러에 의해 반드시 public, protected, internal, protected internal 한정자 중 하나로 수식 될 것을 강요.
4) 사용법
A. 선언(생성): 한정자+abstract+반환형식+메소드이름( )
B. 구현
(A) 추상 클래스의 파생 클래스(자식 클래스)에서 사용
(B) 구현: 한정자+override+반환형식+메소드 이름( )
(5) 다른 추상 클래스를 상속하여 사용 가능: 자식 추상 클래스는 부모 추상 클래스의 추상 메소드를 구현하지 않아도 됨. 추상 메소드는 인스턴스를 생성할 클래스에서 구현.
4. 사용법
(1) abstract 한정자 + class + 클래스 이름
(2) 파생클래스(자식클래스)에서 상속받아 사용함.
예제)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ex8._4
{
abstract class AbstractBase //추상 클래스
{
protected void PivateMethodA() //구현(메소드)
{
Console.WriteLine("AbstractBase.PrivateMethodA()");
}
public void PublicMethodA() //구현(메소드)
{
Console.WriteLine("AbstractBase.PublicMethodA()");
}
public abstract void AbstractMethodA(); //추상 메소드(abstract 확인):파생클래스에서는 무조건 구현해야함
}
class Derived:AbstractBase //추상 클래스를 상속받은 파생클래스
{
public override void AbstractMethodA() //추상 메소드 구현(override 확인)
{
Console.WriteLine("Derived.AbstractMethodA()");
PivateMethodA();
}
}
class MainProgram
{
static void Main(string[] args)
{
AbstractBase obj = new Derived(); //파생클래스를 가리키는 객체 obj 생성
obj.AbstractMethodA(); //추상메소드 구현
obj.PublicMethodA(); //상속받은 추상클래스의 메소드 구현
}
}
}
실행결과
Derived.AbstractMethodA()
AbstractBase.PrivateMethodA()
AbstractBase.PublicMethodA()
'C#' 카테고리의 다른 글
9장 프로퍼티 -1 public 필드의 유혹 (0) | 2019.06.28 |
---|---|
8장 인터페이스 연습문제 (0) | 2019.06.26 |
8.4 여러 개의 인터페이스, 한꺼번에 상속하기 (0) | 2019.06.26 |
8.3 인터페이스를 상속하는 인터페이스 (0) | 2019.06.25 |
8.2 인터페이스는 약속이다 (0) | 2019.06.25 |