[Java] 인터페이스의 장점 - 느슨한 결합

KKS·2024년 1월 9일
1

Java

목록 보기
3/6
post-thumbnail

본 포스팅의 목적

  • 인터페이스를 활용하면 표준화를 통해 일관성 있는 프로그래밍을 할 수 있다는 장점이 있다.
  • 본 포스팅에서는 인터페이스의 여러 장점 중, 클래스와 클래스간의 느슨한 결합에 기여하는 인터페이스의 활용을 간단한 예시코드를 통해 알아보고자 한다.
  • 인터페이스를 사용했을 때와 사용하지 않았을 때 드러나는 차이점을 중점으로 기록하겠다.

인터페이스를 사용하지 않았을 때

//1. 클래스 A는 methodA의 매개변수로 인스턴스B를 받아들여, 직접 사용하고있다.
//	 (A는 B에 의존한다.)
class A {
	void methodA(B b) {
		b.methodB();
	}
}

class B { 
	public void methodB() {
		System.out.println("methodB");
	}
}

A a = new A();
a.methodA(new B());

이를 그림으로 표현하면 아래와 같다.

//2. 어느 날, 클래스 A는 더이상 인스턴스B를 사용하지 않고, 인스턴스C를 사용한다고 가정해보자.

//클래스 C의 등장
class C { 
	public void methodC() {
		System.out.println("methodC");
	}
}

//3. 클래스 A는 methodA의 매개변수로 인스턴스C를 받아들여, 직접 사용하고있다.
//	 (A는 C에 의존한다.)

//4. 그렇다면, 클래스 A에서는 무슨 일이 일어날까?
// 아래와 같이 반드시 메서드를 수정해주어야만 할 것이다.


class A {
	/* 
    더이상 사용하지 않는 메서드
	void methodA(B b) {
		b.methodB();
	}
    */
    
    //새롭게 사용할 메서드 정의 : 매개변수를 수정해야만 한다 !!
	void methodA(C c) {
		c.methodC();
	}
}

A a = new A();
a.methodA(new C());

이를 그림으로 표현하면 아래와 같다.

인터페이스를 사용하였을 때

//인터페이스 I
interface I {
	void methodI();
}

//인터페이스 I를 구현한 B 클래스
class B implements I{
	public void methodI() {
		System.out.println("methodB");
	} 
}

//1. 클래스 A는 methodA의 매개변수로 인터페이스 I를 구현한 인스턴스를 받아들여 사용한다.
class A {
	void methodA(I i) {
		i.methodI();
	}
}

A a = new A();
a.methodA(new B());

이를 그림으로 표현하면 아래와 같다.

//2. 어느 날, 클래스 A는 더이상 인스턴스B를 사용하지 않고, 인스턴스C를 사용한다고 가정해보자.

//인터페이스 I를 구현한 C 클래스의 등장
class C implements I{
	public void methodI() {
		System.out.println("methodC");
	} 
}

//3. 앞서 그랬던 것처럼, 클래스 A의 메서드를 수정해주어야 할까??
class A {
	void methodA(I i) {
		i.methodI();
	}
}

A a = new A();
a.methodA(new C());

이를 그림으로 표현하면 아래와 같다.

앞서 그랬던 것처럼, 클래스 A의 메서드를 수정해주어야 할까?

  • 전혀 수정할 필요가 없다 !
  • 클래스 A는 클래스 B, C와 직접적인 관계가 아닌 인터페이스를 통해 느슨한 결합을 맺고 있기 때문에, 인터페이스 I를 구현한 클래스라면, 클래스 A 메서드의 매개변수로 얼마든지 받아들일 수 있는 것이다.
  • 심지어, 클래스 A는 클래스 B가 C로 변경되었는지 조차 인식하지 못한다.
  • 즉, 인터페이스는 특정 객체를 사용하는 클래스가 그 객체에 의존하는 정도를 낮춰준다.
  • 이것이 클래스와 클래스간의 느슨한 결합에 기여하는 인터페이스의 장점이다.

참고문헌

  • 자바의 정석(남궁성 저)
profile
공부하고 이해한 내용들을 직접 그림과 표를 그리면서 정리해보는 공간입니다.🤗

0개의 댓글