Programming/JAVA

[JAVA] 인터페이스 (Interface)

잇나우 2020. 2. 24. 23:29
반응형

Interface

추상 메소드와 상수(final), default 메소드, static 메소드로 구성되어있다. 추상메소드로 인해 강제성을 줄 수 있어 통일성 및 일관성이 지켜져 재사용성과 유지보수가 좋아진다. 인터페이스의 추상 메소드는 abstract키워드를 생략할 수 있다. java 8버전 이상부터는 default와 static 메소드를 사용할 수 있게 되었다. 인터페이스는 객체생성이 불가능하며 상속과 비슷한 구현(implement)를 이용한다. 구현할때는 implements키워드를 사용하고, 구현한 클래스에서 반드시 인터페이스의 모든 추상 메소드들을 구현(재정의) 해야한다.

public interface InterfaceName {
    public void test();   // abstract 생략가능 
}

public class SubObj implements InterfaceName {
    @Override
    public void test() {  // 인터페이스의 추상 메소드를 재정의 해야한다.
        System.out.println("인터페이스 구현");
    }
}

이렇게 인터페이스를 구현할 수 있다. 인터페이스는 다중 구현이 가능하고 인터페이스끼리 extends 키워드를 이용하여 상속이 가능하다. 클래스와는 다르게 다중상속도 가능하다. 인터페이스는 클래스와 달리 기본 접근제어자가 public이다. 인터페이스에서 멤버변수를 선언할 경우 public statc final로 선언 해야하지만 생략하면 기본으로 설정된다.

interface Inter {
    public void fruit(); 
}

interface InterA extends Inter{   // 인터페이스를 상속 
    String NAME = "Apple";    // final이 생략되어있다.
}

class SubObj implements InterA {   // 인터페이스를 구현 
    @Override
    public void fruit(){
        System.out.println("과일 이름 : "+NAME);
    }
}

인터페이스를 사용하는 이유는 다형성이 가능하여 코드의 재사용성을 높이고 유지보수가 향상되어 관리하기가 쉬워진다는 점에 있다. 상속을 통해 상위 클래스의 타입으로 통일하여 하위 클래스들을 하나의 타입으로 관리할 수 있다. 라이브러리와 프레임워크에서 인터페이스의 장점을 잘 활용하고 있다.

인터페이스와 상속

인터페이스와 상속중 무엇을 사용해야할지는 개발자가 원하는 방향으로 정하면 되는 것이다. 하지만 다형성을 위한것이라면 클래스 상속보다는 인터페이스 구현을 추천한다고 한다. 클래스 상속은 변화가 발생하면 상속 구조가 깨지기 쉽기 때문이다. 설계 이후에도 기능적인 변화가 많이 일어나는데 그래서 대부분 상속보다는 인터페이스를 사용한다.

반응형