( •̀ ω •́ )✧
[Java] 인터페이스의 구현 - 기본 본문
※ 본 내용은 강의를 수강하며 정리한 글입니다 👉 강의 링크
초기 상태
초기 상태는 위와 같다.
main class인 Program
과 A
, B
가 결합력이 강한 상태로 결합되어 있다.
위 코드를 도식화하면 이 그림과 같다.
지금은 A와 B가 결합되어 있고, B가 있으므로 문제가 없다.
하지만 만약 B가 없는 상황이라면, A는 구현될 수 없다.
따라서, B가 없는 상황을 상정하고 A에 인터페이스(X)를 구현하여 추후 B를 사용할 수 있도록 바꿀 것이다.
인터페이스 구현
전체 코드는 위와 같다.
클래스별로 자세히 살펴보자.
📁 class A
package ex6;
public class A {
// private B b;
// B객체를 대체할 수 있는 인터페이스 X
private X 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);
}
}
private X x;
: 당초 B 객체를 불러오던 것을 대체할 수 있게 인터페이스 X를 불러오는 것으로 바꾼다.- 생성자
b = new B();
를 대신하여, 추후 X를 참조할 수 있게 하는 setter 메서드를 정의한다.
A 클래스에서 B 개체를 대신하여 X 인터페이스 사용하도록 설정했다.
그렇다면 X 인터페이스를 만들어보자.
📁 interface X
package ex6;
public interface X {
// .total() 이라는 기능이 있어야 한다.(규약)
// interface는 약속만 정하는 것. 구현은 필요없다
// 기능의 목록만 정의하므로, 보호모드(public..)도 x
int total();
}
- 인터페이스는
public interface (이름) {}
으로 정의한다. - 인터페이스는 약속된 기능의 리스트를 명시할 뿐이다. 그러므로 어떠한 속성도, 기능의 구현도 필요없다.
public interface X { int x; // 속성의 정의 X pubic int total() {}; // 기능의 구현 X int total(); // 기능 목록 O }
X 인터페이스까지 정의되었다.
인터페이스를 구현한 클래스 B는 이렇게 작성되어야 한다.
📁 class B
package ex6;
public class B implements X {
// implements X : X의 약속을 구현하고 있음을 명시
public int total() {
return 30;
}
}
코드 상 큰 차이는 없으나, implements X
를 붙여서 인터페이스 X의 기능을 구현하고 있음을 명시해야 한다.
이렇게 하면 인터페이스 X와 결합할 객체 A, B의 구성은 끝났다.
이제 Program Class에서 A와 B를 자유롭게 결합할 수 있다.
📁 class Program (main class)
public class Program {
public static void main(String[] args) {
A a = new A();
B b = new B();
a.setX(b);
a.print();
}
setter 메서드에 B 객체의 인스턴스 b를 넣음으로써, A에서 사용되고 있는 X 자리에 B 가 결합된다.
B 객체가 X 인터페이스의 자리를 대체한다고 볼 수 있다.
C c = new C();
a.setX(c);
만약 코드를 이렇게 바꾼다면, B 객체 대신 추후 업그레이드된 C 객체로도 대체하여 사용할 수 있는 것이다.
그림으로 표현한다면 위와 같다.
그리고 이는 곧 약한 결합을 의미한다.
'✏️ 노트 > java' 카테고리의 다른 글
[Java] 인터페이스의 구현 - 코드 수정을 없애기 위한 설정 (0) | 2023.11.02 |
---|---|
인터페이스의 이해 (0) | 2023.11.01 |
05. 문자와 문자열 (0) | 2023.08.17 |
04. 상수와 리터럴 (0) | 2023.08.17 |
03. 변수의 타입 - 기본형 (0) | 2023.08.17 |
Comments