Java - 인터페이스 (Interface)

제훈·2024년 7월 18일

Java

목록 보기
15/34

인터페이스

인터페이스 : 추상 메소드와 상수 필드만 가질 수 있는 클래스의 변형체

InterProduct

public interface InterProduct {

//    public static final int MAX_NUM = 100; <- public static final 부분은 지워도 된다.
    int MAX_NUM = 100;
    
//    private static final int MAX_NUM = 100; <- 접근지정자도 interface에서는 public 이어야 한다.
    
//    public InterProduct() {} <- 인터페이스는 생성자 자체도 필요로 하지 않는다. (가질 수 없다.)
    
    /* 설명. 기본적으로 추상메소드만 가능하다. (접근지정자는 public) */
//    public abstract void nonStaticMethod(); <- public abstract 생략 가능
    void nonStaticMethod();
    
    /* 설명. static 메소드는 바디부까지 작성을 허용했다. (JDK 1.8부터 추가된 기능) */
    public static void staticMethod() {}

    /* 설명. non-static 메소드여도 default 키워드를 추가하면 바디부까지 작성을 허용했다. (JDK 1.8부터 추가된 기능) */
    public default void defaultMethod() {}

    /* 설명. private도 abstract가 아닌 온전한 메소드로 사용은 가능하다. (default도 없이) */
    private void privateMethod() {

        /*설명. 다른 public default 메소드에서 활용할 수만 있는 기능 */
    }
}

인터페이스를 구현하기 위해서는 implements 키워드를 사용해야 한다.

Product

public class Product implements InterProduct {
    @Override
    public void nonStaticMethod() {
        System.out.println("InterProduct의 nonStaticMethod 오버라이딩 메소드 호출됨");
    }
}

Application

public class Application {
    public static void main(String[] args) {
		/* 설명. 인터페이스도 객체를 생성할 수 없다. */
//        InterProduct ip1 = new InterProduct(); <- 이렇게 하면 안 된다.

        Product product = new Product();
//        InterProduct product = new Product(); <- 이것도 가능하다.
        product.nonStaticMethod();
        
    }
}

사용 이유

  • 공유를 목적으로 하는 상수(public static final 필드)를 기반으로 모든 기능을 공통화(public abstract 메소드)해서 강제성을 부여할 목적

  • 단일 상소이라는 단점을 어느 정도 극복하기 위해 사용하기도 한다. 모든 클래스는 하나의 부모 클래스 외에도 여러 개의 인터페이스를 구현할 수 있다.

public class Application implements InterOne, InterTwo {
		
	@Override
	public void interOneMethod() {}

	@Override
	public void interTwoMethod() {}
}

추상 클래스와 인터페이스의 공통점, 차이점

공통점

구분추상 클래스인터페이스
자체 인스턴스 생성생성 불가생성 불가
다형성 적용 시 상위 타입 활용 가능 유무가능가능

차이점

구분추상 클래스인터페이스
상속 가능 범위단일 상속다중 상속
키워드extends 사용implements 사용
추상 메소드 갯수abstract 메소드 0개 이상모든 메소드는 abstract
abstract 키워드 명시명시적 사용묵시적으로 abstract
profile
백엔드 개발자 꿈나무

0개의 댓글