• 인터페이스는 일부 구간, 기능 또는 어떤 일부 캡슐들이 교체되거나 만들어지지않았을때 대한으로 삼을수있는것이다.

첫번째, 예시로 캡슐을 교체하는 방식을 들겠다.

Program

public class Program {

	public static void main(String[] args) {
		A a = new A();
		a.print();
	}
}

A

public class A {
	private B b;
	
	public A() {
		b = new B();
	}

	public void print() {
		int total= b.total();
		
		System.out.printf("total is %d\n", total);
	}
}

B

public class B {

	public int total() {
		return 30;
	}

}

A와 B의 사이가 부품관계로써 결합력이 강하게 만들어져있는 코드이다.

  • 나중에 B를 주입할수 있게 해보자. -> A 에는 부품을 결합하듯이 세팅할수있는 방법이있어야하고 B에는 B를 구현할수있는 표현식이있어야한다. A는 결합할수있도록하기위해서 자료형(인터페이스가) 준비되야한다.

Program

public class Program {

	public static void main(String[] args) {
		A a = new A();
		B b = new B();
		a.setX(b);
		
		a.print();
	}

}

A와 B는 결합하고있다. 위에 예시는 A 의 내부에서 직접 만들어서 밖에서 알수없는 일체형으로 만들었지만 여기서는 결합형으로 만들어진걸볼수있다. 결합이 인터페이스를 구현하고있는 객체라면 누구나다 결합할수있는 형태로 만들어졌다. -> 결합력이 낮아진걸 알수있다.

A

package part3.ex06.인터페이스;

public class A {
	private X x;
	
	public void setX(X x) {
		this.x = x;
	}

	public A() {
//		b = new B();
	}

	public void print() {
		int total= x.total();
		
		System.out.printf("total is %d\n", total);
	}
}

A가 B없이도 마감처리할수있는 형태로 바뀌었다.

B

public class B implements X {

	public int total() {
		return 30;
	}

}

X 인터페이스를 구현하고있다면 B가 아닌 어떤 객체과 와도 사용이 가능하다. (더 성능 개선된것으로 변경가능)

X

public interface X {

	int total();
		
}
  • 인터페이스는
    구현이란 자체를 하지않기때문에 보호모드도사용하지도않고, 함수 구현블럭도 만들지않고, 속성을 정의해선 절대안된다.

댓글남기기