class B {
public void method(){
System.out.println("methodInB");
}
}
위 코드는 인터페이스를 사용하여
interface I{
public void method();
}
class B implements I{
public void method(){
System.out.println("methodInB");
}
}
위와 같이 변경할 수 있다. 이렇게 변경하면 class B가 변경되어도 다른 클래스는 영향을 받지 않는다.
1)직접적인 관과의 두 클래스 A-B 강결합(인터페이스 사용 x)
코드 예시)
class A{
public void method(B b){
b.methodB();
}
}
class B{
public void methodB(){
System.out.println("methodB()");
}
}
public class Main {
public static void main(String[] args) {
A a = new A();
a.method(new B());
}
}
출력
클래스 B를 다른 클래스 C로 바꾼다면 클래스 A도 변경해야만 한다.
class A{
public void method(C b){
b.methodB();
}
}
class C{
public void methodB(){
System.out.println("methodC()");
}
}
public class ChangeC {
public static void main(String[] args) {
A a = new A();
a.method(new C());
}
}
출력
2)간접적인 관계의 두 클래스 A-I-B 느슨한 결합 (인터페이스 I 사용)
코드 예시)
interface I {void methodB();}
class B implements I{
public void methodB(){
System.out.println("methodInB()");
}
}
class A {
public void methodB(I i){
i.methodB();
}
}
public class Main {
public static void main(String[] args) {
A a = new A();
a.methodB(new B());
}
}
출력
클래스 B를 다른 클래스 C로 바꿔도 클래스 A는 변경할 필요 없다.
interface I {void methodB();}
class C implements I{
public void methodB(){
System.out.println("methodInB()in C");
}
}
class A {
public void methodB(I i){
i.methodB();
}
}
public class ChangeC {
public static void main(String[] args) {
A a = new A();
a.methodB(new C());
}
}