Favicon

Abstract modifier

Peponi11/27/20242m

C#
SyntaxKeywordModifier

1. Introduction

abstract 한정자는 추상화된 형식 또는 멤버를 의미한다. (여기서 추상이란, 불완전한 상태를 나타낸다) abstract 멤버는 abstract 형식에만 포함될 수 있고 파생 클래스에서 반드시 구현해야 한다. 또한 인스턴스화가 불가하고, 베이스 클래스로만 사용 가능하다. (static 사용이 불가능하다)

2. Example

public interface IMailService
{
    void Send(string message);
 
    string? Receive();
 
    IMailService CreateService(object userToken);
}
// IMailService를 구현하는 abstract class.
// interface를 구현하는 경우에도 추상화 할 수 있다.
 
public abstract class MailClient : IMailService
{
    protected IMailService? Service;
 
    public abstract void Send(string message);
 
    public abstract string? Receive();
 
    public abstract IMailService CreateService(object userToken);
}
 
 
// abstract를 구현하는 파생 class
 
public class ClientTypeA : MailClient
{
    public ClientTypeA(object userToken) => Service = CreateService(userToken);
 
    public override void Send(string message) => Service?.Send(message);
 
    public override string? Receive() => Service?.Receive();
 
    public override IMailService CreateService(object userToken)
    {
        var transport = new MailTransport(userToken);
        if (transport.Connect(userToken))
        {
            Service = transport;
            return transport;
        }
        else throw new HttpRequestException($"Invalid connection - {userToken}");
    }
}

3. 참조 자료