인터페이스 사용을 통해 독립적인 프로그래밍이 가능하다.
클래스 간 직접적인 관계에서 인터페이스 사용을 통해 간접적인 관계로 전환할 수 있고,
이로 인해 클래스 변경으로 인한 영향을 받지 않을 수 있다.
public class Main {
public static void main(String[] args) {
A a = new A();
a.method(new B());
}
}
class A {
public void method(B b) {
b.method();
}
}
class B {
public void method() {
System.out.println("methodInB");
}
}
[출력]
methodInB
클래스 A, B가 있다.
A와 B는 직접적인 관계를 맺고 있다.
class A {
// B -> C를 사용하기 때문에 변경이 필요
//public void method(B b) {
// b.method();
//}
public void method(C c) {
c.method()
}
}
class B {
public void method() {
System.out.println("methodInB");
}
}
class C {
public void method() {
System.out.println("methodInC");
}
}
인터페이스 사용으로 강한 결합을 약한 결합으로 결합도를 낮출 수 있다.
interface I {
void method();
}
class B implements I {
@Override
public void method() {
System.out.println("methodInB");
}
}
선언부(인터페이스)와 구현부(구현 클래스)를 분리 -> 결합이 느슨해지며, 변경에 용이해진다
public class Main {
public static void main(String[] args) {
A a = new A();
a.method(new B());
}
}
class A {
// Class B -> Interface I
public void method(I i) {
i.method();
}
}
[출력]
methodInB
인터페이스 사용 전 : A -> B
인터페이스 사용 후 : A -> I -> B
-> A는 인터페이스와 관계가 있기 때문에, B가 변경되어도 A와는 상관이 없다. (I를 구현한 클래스면 상관없음)
class C implements I {
public void method() {
System.out.println("methodInC");
}
}
public class Main {
public static void main(String[] args) {
A a = new A();
a.method(new C());
}
}
class A {
public void method(I i) {
i.method();
}
}
[출력]
methodInC
인터페이스를 사용함으로써, 선언부와 구현부를 분리해 한 클래스의 변경이 관련된 다른 클래스에 영향을 미치지 않는 독립적인 프로그래밍이 가능하도록 할 수 있습니다.
'강한 결합 -> 약한 결합'