인터페이스란 무엇인가?
인터페이스는 클래스 간 느슨한 결합을 위해 사용된다.
인터페이스는 상속과 함께 사용되며, 크게 세가지 역할이 있다.
첫째로 다형성을 구현하기 위한 방법으로 사용된다.
두번째로 클래스는 불가능한 다중 상속이 가능하다는 장점이 있다.
세번째로 프로그램 내부의 각각의 기능별로 파트를 나누는 분류의 역할을 한다.
또한 인터페이스는 new를 사용하여 객체를 생성할 수 없다.
인터페이스 명은 앞에 대문자 I를 붙여 ISendable과 같이 선언한다. 접근제한자는 public으로 한다.
(public interface ISendable)
인터페이스 정의시에는 내부 멤버들 (클래스가 구현해야할 멤버들) 에 대해
public 접근제한자를 사용하지 않는다.
만약에 어떤 메서드에 여러가지 클래스 타입을 넣어야한다면? 매개변수로 넣을 클래스들이 계속 추가된다면?
클래스를 추가할 때마다, 메서드는 매개변수로 받을 클래스를 계속 추가해줘야하고 // Method(class1 e, class2 e, class3 e) ....
또한 추가되는 클래스들에서도 동일한 메서드를 계속 구현해야한다. // snail.Send / email.Send / sms.Send ..
결론적으로 문제는 클래스가 각각 다른 형태이기 때문에 매개변수나 메서드의 차이에 따라 각각 구현해야한다는 것
이러한 문제를 해결하기 위해 클래스를 같은 형태로 만들어 주는 방법이 있다.
아래와 같이 인터페이스를 상속하여 다형성을 구현한다.
인터페이스를 상속하기 위해 인터페이스에서 정의한 필드나 메서드를 동일하게 구현해야하며,
인터페이스를 상속하면 각각의 클래스는 공통적으로 상속한 인터페이스 형태를 가진다.
그 후에는 그냥 해당 인터페이스형 리스트를 만들어, 반복하여 메서드를 실행시키면 된다.
다른 클래스가 추가 되어도 그냥 인터페이스만 상속하면 된다.
아래는 모든 클래스가 인터페이스를 상속 받고,
인터페이스형 리스트에 넣어 다형성을 구현한 예제이다.
인터페이스의 다중 상속
인터페이스는 내용이 아닌 외형을 물려주기 때문에 다중 상속이 가능하다
클래스는 어떤 클래스를 물려받아야할지 모호한 상황이 발생될 수 있기 때문에 다중 상속이 불가능하다