본문 바로가기

인터페이스3

인터페이스에서 디폴트 메소드 최초에 A라는 인터페이스가 있었다고 가정을 하자. A 인터페이스를 구현하는 B 클래스에서 A 인터페이스의 추상 메소드를 구현해놨다. 나중에 A 인터페이스에 새로운 기능을 추가해야 해서 새로운 추상 메소드를 선언했다. 근데 B 클래스에서 추가된 추상메소드를 구현할 여건이 안된다면, 에러가 발생할 것이다. 이럴 때 디폴트 메소드를 선언한다. A 인터페이스에 있는 디폴트 메소드는 B 구현 클래스에서 반드시 구현할 필요가 없기 때문에 B 클래스를 문제 없이 사용이 가능하다. 물론 C라는 구현 클래스가 추가 된다면 추상메소드를 반드시 구현해야하지만, 새로운 기능인 디폴트 메소드를 A 인터페이스에 선언한대로 사용해도 되고, 재정의해서 사용해도 된다. 2020. 4. 2.
인터페이스 상속 인터페이스는 클래스와 달리 다중 상속을 허용한다. public interface 하위인터페이스 extends 상위인터페이스1, 상위인터페이스2 {...} 하위 인터페이스를 구현하는 클래스는 상위 인터페이스의 모든 추상 메소드에 대한 실체 메소드를 가지고 있어야 한다. 그렇기 때문에 구현 클래스로부터 객체를 생성하고 나서 다음과 같이 하위 및 상위 인터페이스 타입으로 변환이 가능하다. 하위인터페이스 변수 = new 구현클래스(...); 상위인터페이스1 변수 = new 구현클래스(...); 상위인터페이스2 변수 = new 구현클래스(...); 하위 인터페이스로 타입 변환되면 상위 인터페이스들과 하위 인터페이스의 모든 메소드를 사용할 수 있고, 상위 인터페이스로 타입이 변환되면 상위 인터페이스에 선언된 메소드.. 2020. 4. 2.
인터페이스 타입변환과 다형성 상속은 같은 종류의 하위 클래스를 만드는 기술이고, 인터페이스는 사용 방법이 동일한 클래스를 만드는 기술이다. 메소드 호출 시 어떤 구현 객체를 매개값으로 주느냐에 따라서 메소드의 실행 결과는 다르게 나온다. 예를 들면, 인터페이스 A의 구현 클래스 B와 C가 있을 때, B클래스를 통해서 원하는 결과가 나오지 않으면 간단하게 C클래스로 바꿔서 실행 할 수 있다. 그것을 유용하게 바꾸기 위해 인터페이스는 메소드의 매개 변수로 많이 사용된다. 매개 변수를 인터페이스 타입으로 선언하면 메소드 호출 시 매개 값으로 다양한 구현 객체를 주어서 다양한 실행 결과가 나오게 할 수 있다. public interface A { // .... } public class B implements A { // .... } pu.. 2020. 4. 2.