( •̀ ω •́ )✧

[Java] 인터페이스의 구현 - 기본 본문

✏️ 노트/java

[Java] 인터페이스의 구현 - 기본

키루루 2023. 11. 2. 02:01

※ 본 내용은 강의를 수강하며 정리한 글입니다 👉 강의 링크


초기 상태

초기 상태는 위와 같다.

main class인 ProgramA, 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);
    }
}
  1. private X x; : 당초 B 객체를 불러오던 것을 대체할 수 있게 인터페이스 X를 불러오는 것으로 바꾼다.
  2. 생성자 b = new B();를 대신하여, 추후 X를 참조할 수 있게 하는 setter 메서드를 정의한다.

A 클래스에서 B 개체를 대신하여 X 인터페이스 사용하도록 설정했다.
그렇다면 X 인터페이스를 만들어보자.

 

📁 interface X

package ex6;

public interface X {
    // .total() 이라는 기능이 있어야 한다.(규약)
    // interface는 약속만 정하는 것. 구현은 필요없다
    // 기능의 목록만 정의하므로, 보호모드(public..)도 x
    int total();
}
  1. 인터페이스는 public interface (이름) {}으로 정의한다.
  2. 인터페이스는 약속된 기능의 리스트를 명시할 뿐이다. 그러므로 어떠한 속성도, 기능의 구현도 필요없다.
    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 객체로도 대체하여 사용할 수 있는 것이다.

 

그림으로 표현한다면 위와 같다.

그리고 이는 곧 약한 결합을 의미한다.

Comments