목록Java/객체지향 (41)
충분히 쌓여가는
인터페이스의 문제 인터페이스에 새로운 메서드(추상 메서드)를 추가하기 어렵다 이에 대한 해결책이 default method이다 default 메서드는 instance 메서드(인터페이스 원칙 위반) 인터페이스에 새로운 메서드를 추가했을 때, 인터페이스를 구현한 클래스들이 추상메서드를 구현하는 것에 대한 부담을 없애줌 default 메서드가 기존의 메서드와 충돌할 때의 해결책 1. 여러 인터페이스의 디폴트 메서드 간의 충돌 - 인터페이스를 구현한 클래스에서 default 메서드를 오버라이딩 해야한다 (직접 오버라이딩하면 해결됨) 2. default 메서드와 조상 클래스의 메서드 간의 충돌 - 조상 클래스의 메서드가 상속되고, 디폴트 메서드는 무시된다 (직접 오버라이딩하면 해결됨)
인터페이스의 장점 두 대상(객체) 간의 연결, 대화, 소통을 돕는 중간 역할을 한다 선언(설계)와 구현을 분리시킬 수 있게 한다 개발 시간을 단축할 수 있다 표준화가 가능하다(JDBC) 서로 관계없는 클래스들의 관계를 맺어줄 수 있다 인터페이스 덕분에 B가 변경되어도 A는 안바꿀 수 있게 된다(느슨한 결합) A클래스의 변경 불필요, 인터페이스만 변경해주면됨 -> 변경에 유리 B의 method()를 추상메서드로 갖는 인터페이스 작성 (점선은 B를 C로 변경) 강한 결합 class A { public void method(B b) { b.method(); } } class B { public void method() { System.out.println("B클래스의 메서드"); } } public class..
다형성: 조상 타입 참조 변수로 자손 타입 객체를 다루는 것 인터페이스도 구현 클래스의 부모인가? 엄밀히 말하면 아니지만 부모랑 다름없는 정도(부모는 클래스만 되기 때문) 인터페이스는 몸통이 없기 때문에 다중상속의 충돌문제를 해결하면서 다중상속과 같은 효과를 낼 수 있다 class Fighter extends Unit implements Fightable { public void move(int x, int y) { /* 내용 생략 */} public void attack(Fightable f) { /* 내용 생략 */} } 따라서 인터페이스를 이용한 다형성이 성립된다 [조상 타입 참조 변수(Unit, Fightable)로 자손 타입 객체(Fighter)를 다루는 것] Unit u = new Fighte..