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
에 대해서 공부해보도록 하겠당~