자바의 정석 - 인터페이스 장점1

Yohan·2024년 1월 29일
0

인터페이스의 장점

  • 두 대상(객체) 간의 '연결, 대화, 소통'을 돕는 '중간 역할'을 한다.
  • 선언(설계)와 구현을 분리시킬 수 있게 한다.
  • 껍데기 역할

  • 껍데기 + 알맹이
    • 유연X, 변경에 유리X
class B {
	public void method() {
    	System.out.println("methodInB");
    }
}
  • 껍데기 (인터페이스, 선언부)
interface I {
	public void method() {
    	System.out.println("methodInB");
    }
}
  • 알맹이 (구현부)
    • 껍데기와 알맹이를 분리함으로써 유연O, 변경에 유리 (다른 class가 들어올 수 있거나 다른 내용이 들어올 수 있거나 등..)
class B implements I {
	public void method() {
    	System.out.println("methodInB");
    }
}

직접적인 관계의 클래스, 간접적인 관계의 클래스 비교

  • 직접적인 관계의 클래스(A-B)
class A {
	public void methodA(B b) {
    	b.methodB(); // B 클래스의 메서드 호출
    }
}
class B {
	public void methodB() {
    	System.out.println("methodInB()");
    }
}
class interfaceTest {
	public static void main(String args[]) {
    	A a = new A();
        a.methodA(new B());
    }
}
  • 간접적인 관계의 클래스(A-I-B)
class A {
	public void methodA(I i) {
    	i.methodB(); // B와 관계없음, I를 사용하여 변경 유리
    }
}
interface I { void methodB(); } // 껍데기

class B implements I { // 알맹이
	public void methodB() {
    	System.out.println("methodInB()");
    }
}
class C implements I {
	public void methodB() {
    	System.out.println("methodInB() in C");
    }
}

실습

class A {
    public void method(I i) {
        i.method();
    }
}

interface I {
    public void method();
}

class B implements I {
    public void method() {
        System.out.println("B클래스의 메서드");
    }
}

class C implements I {
    public void method() {
        System.out.println("C클래스의 메서드");
    }
}

public class InterfaceTest {
    public static void main(String[] args) {
        A a = new A();
        a.method(new B());
        a.method(new C());
    }
}
profile
백엔드 개발자

0개의 댓글