Hello

Java 인터페이스의 장점

by 볼빵빵오춘기

인터페이스의 장점

  • 두 대상(객체)간의 ‘연결, 대화, 소통’을 돕는 ‘중간 역할’을 한다.
더보기

⇒ 변경에 유리. 만약 기계 부품이 바뀌더라도 인터페이스가 있으면 연결 소통 대화에 도움이 된다.

인터페이스의 장점1
인터페이스의 장점2
  • 선언(설계 - 껍데기)와 구현(-알맹이)을 분리시킬 수 있게 한다.
더보기

⇒ 껍데기와 알맹이가 붙어있으면 변경에 분리

⇒ 인터페이스를 사용하여 껍데기와 알맹이를 분리 시킴으로써 변경에 유리하도록 변경!!

인터페이스 장점3
  • 인터페이스 덕분에 연결되어있는 한 쪽 클래스가 변경되어도 나머지 연결되어 클래스는 안바꿀 수 있게 된다.(느슨한 결합) 
더보기

⇒ A변경 불필요

 

 

예제코드

더보기
class A{
	public void method(B b) {
		b.method();
	}
}

class B{
	public void method() {
		System.out.println("B클래스의 메서드 ");
	}
}

public class InterfaceTest {

	public static void main(String[] args) {
		A a = new A();
		a.method(new B()); // A가 B를 사용(의존) 

	}

}

→ 클래스 C 추가. 이제 B를 안쓰고 C를 쓸려고 한다.

class A{
	public void method(B b) {
		b.method();
	}
}

class B{
	public void method() {
		System.out.println("B클래스의 메서드 ");
	}
}

public class InterfaceTest {

	public static void main(String[] args) {
		A a = new A();
		a.method(new C()); // A가 C를 사용(의존) //=> 변경부분

	}

}

B말고 C를 의존하도록 변경함

⇒ 에러표시와 함께 run시켜보면 에러가남

why?

A클래스 method(B b) 부분에 매개변수도 B b가 아니라 C b 이렇게 변경해줘야함.

class A{
	public void method(C b) {
		b.method();
	}
}

class B{
	public void method() {
		System.out.println("B클래스의 메서드 ");
	}
}

class C{
	public void method() {
		System.out.println("C클래스의 메서드 ");
	}
}


public class InterfaceTest {

	public static void main(String[] args) {
		A a = new A();
		a.method(new C()); // A가 B를 사용(의존) 

	}

}

위와 같이 하면 불편함을 느낀다. 알맹이를 변경하는데 2번의 수정이 필요함.

 

코드를 다음과 변경한다면?

class A{
	public void method(I i) {
		i.method();
	}
}

// B클래스의 선언과 구현을 분
interface I{
	public void method();
}

class B implements I{
	public void method() {
		System.out.println("B클래스의 메서드 ");
	}
}

class C{
	public void method() {
		System.out.println("C클래스의 메서드 ");
	}
}


public class InterfaceTest {

	public static void main(String[] args) {
		A a = new A();
		a.method(new B()); // A가 B를 사용(의존) 

	}

}

→ a.method(new B()); 가 아닌 C를 넣을려면 

class A{
	public void method(I i) {
		i.method();
	}
}

// B클래스의 선언과 구현을 분
interface I{
	public void method();
}

class B implements I{
	public void method() {
		System.out.println("B클래스의 메서드 ");
	}
}

class C implements I{
	public void method() {
		System.out.println("C클래스의 메서드 ");
	}
}


public class InterfaceTest {

	public static void main(String[] args) {
		A a = new A();
		a.method(new C()); // A가 B를 사용(의존) 

	}

}

⇒ 이제는 C가 들어갈 수 있음!

 

블로그의 정보

Hello 춘기's world

볼빵빵오춘기

활동하기