본문 바로가기
OOP

[OOP] 인터페이스로 다형성을 이끌어내기

by ifhead 2022. 8. 20.
반응형

참고 영상

 

두 클래스는 완벽하게 똑같은 데이터를 가지고 있습니다.

유일하게 다른 것은 서로의 이름입니다.

인스턴스화한 모습을 보면 데이터는 같은데 Type은 달라집니다.

 

 

위와 같은 메소드를 추가했다고 해봅시다.

GetPoint 메소드는 CharacterPoint만 사용 가능합니다.

 

 

자료가 같은데도 동시에 사용할 수 없습니다.

그렇다고 해서 BulletPoint 전용 함수를 오버로딩해서 만드는 해결방법은 구조적으로 좋지 않습니다.

우리는 이때 클래스들의 공통 속성을 뽑아서 인터페이스를 만들 수 있습니다.

 

public interface iPoint
{
    int X { get; set; }
    int Y { get; set; }
}

public class CharacterPoint : iPoint
{
    public int X {get; set;}
    public int Y { get; set; }
    public string Name {get; set;}
}

public class BulletPoint : iPoint
{
    public int X {get; set;}
    public int Y {get; set;}
    public string Color {get; set;}
}

 

이제 GetPoint 메소드의 매개변수를 iPoint 타입으로 만듭니다.

이 메소드는 BulletPoint, CharacterPoint 모두 사용할 수 있습니다.

 

public static string GetPoint(iPoint p)
{
    return $"{p.X}, {p.Y}";
}

 

또다른 FooPoint 클래스를 추가해야 한다고 해도, iPoint 인터페이스만 구현해준다면 GetPoint를 문제 없이 사용할 수 있습니다.

 

인터페이스를 잘 사용해 보세요

 

반응형

댓글