예전부터 님의 질문을 살펴본 사람으로써
최대한 쉽게 답변해 드리겠습니다.
abstract class A {
public void doSomething();
}
interface IA {
public void doNothing();
}
class B extends A implements IA {
public void doSomething() { 동작1 }
public void doNothing() { 아무것도 안함 }
}
class C extends A implements IA { // 결국 B를 상속받는것과 같지만 이해를 돕기 위해 이렇게 적습니다.
public void doSomething() { 동작2 }
public void doNothing() { 아무것도 안함... 은 훼이크다! }
}
이렇게 해 놓으면 경우에 따라
A variable;
IA variable2;
if (true) {
variable = new B();
variable2 = new C();
} else {
variable = new C();
variable2 = new B();
}
variable.doSomething();
variable2.doNothing();
처럼 작성하여 같은 변수로 조건에 따라 코드수를 절약하여 얼마든지 다른 동작을 하게 할수 있습니다.
이렇게 유동성 있는 형태를 느슨한 결합이라고 합니다.
하지만 이렇게 하면 다형성이라는 이슈가 생기는데.. 그것에 대해서는 스스로 알아 보시기 바랍니다.