interface(인터페이스)가 뭐야? 🧐

나는 인터페이스을 기능들의 묶음이라고 이해했다.

Can Do를 알려주는 역할을 한다.

interface(인터페이스)는 어떤 상황에서 사용해야할까? 🧐

💚 예시 만약 조류라는 클래스가 있다고 하자. 이 클래스를 상속 받는 참새앵무새 파생 클래스가 있다.

새는 날 수 있으니까 Fly()를 조류 클래스에 추가를 했다.

하지만 이후에 펭귄슈가글라이더를 만들어달라는 요청을 받았다. 하지만 생각해보니 펭귄은 날 수 없는데 슈가글라이더는 조류가 아닌데도 날 수 있지않은가?

이렇게 같은 부모 클래스를 가지고 있지않음에도 수행할 수 있는 기능은 같은 경우(슈가글라이더) 또는 같은 클래스를 상속을 받았지만 그 클래스의 기능이 필요하지 않는 경우가 있다(펭귄).

이런 경우에 사용해야 할 것이 interface이다. 즉, 인터페이스는 어떠한 기능을 수행할 수 있는지 알려주는 역할을 하는 것이다. Can Do!

🍑 위의 설명을 코드로 만들어 보자!

 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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
public interface IFly
{
    void Fly();
}

public abstract class Birds : Animal
{
    protected Birds(Beak beak)
    {
        this.beak = beak;
    }
    public Beak beak { get; private set; }
}

public class Sparrow : Birds, IFly
{
    public void Fly()
    {
        Console.WriteLine("포로록~ 참새 난다~");
    }
    public Sparrow(Beak beak) : base(beak)
    {
    }
}

public class Parrot : Birds, IFly
{
    public void Fly()
    {
       Console.WriteLine("푸드덕~ 앵무새 난다~");
    }
    public Parrot(Beak beak) : base(beak)
    {
    }
}

public class Penguin : Birds, ISwim
{
    public void Swim()
    {
        Console.WriteLine("슈슉~ 펭귄 수영한다~");
    }
    public Penguin(Beak beak) : base(beak)
    {
    }
}

public class SugarGlider : Mammalia, IFly
{
    public void Fly()
    {
        Console.WriteLine("슝~ 슈가 글라이더 난다~");
    }
}

interface(인터페이스)의 특징은? 🧐

  • 내부를 구체화 하지않은 메소드만으로 이루워져있다.
  • 인스턴스가 불가능하다.: 다른 일반 클래스처럼 new로 인스턴스화 할 수 없다. 반드시 상속을 통해 사용해야한다.
  • 다중 상속이 가능하다!
  • 인터페이스를 상속한 클래스는 반드시 인터페이스 안의 모든 메소드를 구체화 해야한다.
  • 접근 한정자가 항상 public이다.
  • 내부 메소드 또한 public으로 구현이된다.

** 다음 포스팅은 abstract class에 대해서 공부해보도록 하겠당~