첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
본 블로그는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 블로그 콘텐츠 향상을 위해 쓰여집니다.

728x90
반응형
728x170
using System;

/// <summary>
/// 메시지 인터페이스
/// </summary>
public interface IMessage
{
    //////////////////////////////////////////////////////////////////////////////////////////////////// Method

    #region 메시지 구하기 - GetMessage()

    /// <summary>
    /// 메시지 구하기
    /// </summary>
    /// <returns>메시지</returns>
    string GetMessage();

    #endregion
}

/// <summary>
/// 자동차 클래스
/// </summary>
public class CarClass : IMessage
{
    //////////////////////////////////////////////////////////////////////////////////////////////////// Method
    ////////////////////////////////////////////////////////////////////////////////////////// Public

    #region 메시지 구하기 - GetMessage()

    /// <summary>
    /// 메시지 구하기
    /// </summary>
    /// <returns>메시지</returns>
    public string GetMessage()
    {
        return "자동차";
    }

    #endregion
}

/// <summary>
/// 비행기 클래스
/// </summary>
public class AirplaneClass : IMessage
{
    //////////////////////////////////////////////////////////////////////////////////////////////////// Method
    ////////////////////////////////////////////////////////////////////////////////////////// Public

    #region 메시지 구하기 - GetMessage()

    /// <summary>
    /// 메시지 구하기
    /// </summary>
    /// <returns>메시지</returns>
    public string GetMessage()
    {
        return "비행기";
    }

    #endregion
}

/// <summary>
/// 제네릭 클래스
/// </summary>
/// <typeparam name="T">타입</typeparam>
public class GenericClass<T> where T : IMessage // IMessage 인터페이스로 타입 T를 제한한다.
{
    //////////////////////////////////////////////////////////////////////////////////////////////////// Field
    ////////////////////////////////////////////////////////////////////////////////////////// Private

    #region Field

    /// <summary>
    /// 객체
    /// </summary>
    private T instance;

    #endregion

    //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
    ////////////////////////////////////////////////////////////////////////////////////////// Public

    #region 생성자 - GenericClass(instance)

    /// <summary>
    /// 생성자
    /// </summary>
    /// <param name="instance">객체</param>
    public GenericClass(T instance)
    {
        this.instance = instance;
    }

    #endregion

    //////////////////////////////////////////////////////////////////////////////////////////////////// Method
    ////////////////////////////////////////////////////////////////////////////////////////// Public

    #region 메시지 쓰기 - WriteMessage()

    /// <summary>
    /// 메시지 쓰기
    /// </summary>
    public void WriteMessage()
    {
        string message = this.instance.GetMessage();

        Console.WriteLine(message);
    }

    #endregion
}

...

CarClass carClass = new CarClass();

GenericClass<CarClass> carGenericClass = new GenericClass<CarClass>(carClass);

carGenericClass.WriteMessage();

AirplaneClass airplaneClass = new AirplaneClass();

GenericClass<AirplaneClass> airplaneGenericClass = new GenericClass<AirplaneClass>(airplaneClass);

airplaneGenericClass.WriteMessage();
728x90
반응형
그리드형
Posted by 사용자 icodebroker
TAG , ,

댓글을 달아 주세요