프로젝트를 진행하며 Interface를 활용해 메서드를 만들고 호출하였다.

Interface는 객체지향 개발 5대 원칙을 만족시킬 수 있는 도구라고 하는데, 구체적으로 무엇이고 어떻게 구현하는지 알아보자!

 

1. 인터페이스란? (Interface)

Interface는 추상 메서드들을 나열한 형태이다. 쉽게 말하자면 객체의 사용방법을 가이드라인 하는 것이다.

구현도 되지 않는 메서드들의 나열을 왜 사용할까?

1. 추상 클래스를 통해 객체들 간 네이밍을 통일할 수 있고, 이로 인해 소스의 가독성과 유지보수가 향상된다.
2. 확장에는 열려있고 변경에는 닫혀있는 객체 간 결합도 (코드 종속성)를 낮춘 유연한 방식의 개발이 가능하다.

인터페이스의 특징으로는,

  • 다중 상속 가능
    • 껍데기만 존재하여 클래스 상속시 발생했던 모호함이 없기에 다중 상속이 가능하다.
  • 추상 메서드와 상수만 사용 가능
    • 인터페이스는 구현 소스를 생성할 수 없다.
  • 생성자 사용 불가
    • 인터페이스 객체가 아니므로 생성자를 사용할 수 없다.
  • 메서드 오버라이딩 필수
    • 자식 클래스는 부모 인터페이스의 추상 메서드를 모두 오버라이딩해야 한다.
코드 종속성을 낮춘다 
코드 종속성은 각각의 메서드 간의 결합도를 의미하며 인터페이스를 활용하면 한 메서드를 수정하였을 때, 다른 메서드도 수정해야 하는 상황을 줄여준다는 의미이다.
 인터페이스로 추상 메서드를 지정하면 메서드의 input값과 output값이 고정되어 있다. 예를 들자면 
 public abstract String myName(String name)이라는 메서드는 input값, output값 모두 String으로 고정되어 있다. 이 메서드를 구현하는 객체에서 아무리 수정하더라도 input값과 output 값은 String으로 고정되어 있어 변경에 대한 영향도가 작다. 그래서 인터페이스는 "변경에 강하다", "확장에는 열려있고 변경에는 닫혀있다" 라고 말하는 것입니다.

 

2. 인터페이스 선언

 인터페이스 클래스 작성방식은 아래와 같다. 

인터페이스에서 포함될수 있는 것들은 상수와 메서드 원형뿐이다. 그리고 두가지 멤버 변수는 public static final  public abstract 이어야 한다. (보통 생략한다)  

interface 인터페이스이름 {     
    public static final 타입 상수이름 = 값;     
    public abstract 메서드이름(매개변수목록);
}

 

3. 인터페이스 구현

  • 인터페이스는 구현 코드가 없고 클래스가 이 인터페이스를 구현한다라고 한다.
  • 코드에서 인터페이스의 메서드를 호출하면 인터페이스는 구현 객체의 메서드를 찾아서 호출한다.
  • 객체는 추상 메서드를 구현한 메서드를 갖고 있어야 한다. 이 객체를 구현 객체라고 한다.
  • 구현 객체를 생성하는 클래스는 구현 클래스라고 하다.

자바 클래스는 부모클래스 하나만 상속할수 있다.  extends 를 이용한 클래스 상속은 하나만 되고 두개 이상은 인터페이스만 된다. 인터페이스를 implements 하는 것은 상속이 아니라 구현한다고 해야 한다. 이렇게 두개 이상의 구현 가능한 인터페이스를 콤마(,) 로 구분해서 추가한다.

 

단일 인터페이스 구현

단일 인터페이스는 아래와 같이 구현한다.

public class ClassName impements InterfaceName{
	// 인터페이스의 추상 메서드 구현
}

 

 

다중 인터페이스 구현

 자바 클래스는 하나의 부모 클래스를 상속할수 있지만 인터페이스는 다중 상속이 가능하다. extends 키워드와 콤마를 이용해서 여러 개 인터페이스를 지정하면 된다.

public interface Animals extends IBird, IFlay {
	public void go();
	public void run();
}

 

 

4. 인터페이스 사용하는 이유

 인터페이스 클래스는 DB 연결에 많이 사용한다.

프로젝트에서 전체 프로그램을 완성해 가는 시점에 MySql 에서 Oracle 로 바뀔 경우를 생각해보자.

인터페이스로 구현하지 않았다면 모든 참조 소스는 다 바꿔야 한다. 그러나 인터페이스를 참조해서 구현했다면 Oracle 연결 클래스만 바꾸면 끝난다. 

 

 

5. 인터페이스끼리의 상속

인터페이스끼리도 상속을 통해서 확장을 시켜나갈 수 있고 하위 인터페이스에서 네이밍을 강제하여 객체 간의 통일성을 추구할 수 있다. 인터페이스로 객체를 구현할 때는 implements라는 키워드를 쓰지만, 인터페이스끼리 상속을 할 때는 클래스와 마찬가지로 extneds 키워드를 사용한다.

 

이렇게 자바에서의 인터페이스에 대하여 알아보았다.

다음 포스팅에서는 스프링에서의 인터페이스 특징, 역할 등에 대해 알아볼 예정이다!

 

 

+ Recent posts