천천히 빛나는

Java 기초 : 인터페이스 (interface) 본문

JAVA/JAVA

Java 기초 : 인터페이스 (interface)

까만콩 •ᴥ• 2024. 1. 17. 21:53

 

인터페이스 (interface)

interface I {
    public void z();
}

public class interfaceTest implements I{
    public void z(){};
}

어떤 객체가 있고 그 객체가 특정한 인터페이스를 사용한다면 그 객체는 반드시 인터페이스의 메소드들을 구현해야 한다.

interface에 명시 되어 있는대로 클래스의 멤버를 구현해야 컴파일이 된다.

 

public interface Calculatable {
    public void setOprands(int first, int second, int third) ;
    public int sum(); 
    public int avg();
}
// 개발자 A
class Calculator implements Calculatable {
    int first, second, third;
    public void setOprands(int first, int second, int third) {
        this.first = first;
        this.second = second;
        this.third = third;
    }
    public int sum() {
        return this.first + this.second + this.third;
    }
    public int avg() {
        return (this.first + this.second + this.third) / 3;
    }
}

// 개발자B
class CalculatorDummy implements Calculatable{
    public void setOprands(int first, int second, int third){
    }
    public int sum(){
        return 60;
    }
    public int avg(){
        return 20;
    }
}
public class CalculatorConsumer {
    public static void main(String[] args) {
        CalculatorDummy c = new CalculatorDummy();
        c.setOprands(10, 20, 30);
        System.out.println(c.sum()+c.avg());
    }
}

계산기 클래스를 개발자 A가, 계산기 클래스를 사용하는 부분은 개발자 B가 만든다고 할 때 interface가 존재한다면 코드 상으로 협업을 할 수 있게 된다.

 

 

인터페이스의 규칙

1. 인터페이스의 멤버는 반드시 public이다.

interface I1{
    public void x();
}

인터페이스는 인터페이스를 구현한 클래스를 조작하는 조작 장치이다. 즉 인터페이스는 대상이 되는 시스템을 제어하게 되는데 그렇기 때문에 외부에서 제어할 수 있는 public 만을 허용한다. public을 생략해도 default가 아니라 public으로 접근 제어자가 설정된다.

 

2. 하나의 클래스가 여러개의 인터페이스를 구현할 수 있다.

interface I1{
    public void x();
}
 
interface I2{
    public void z();
}
 
class A implements I1, I2{
    public void x(){}
    public void z(){}   
}

자바의 단일 상속과 비교했을 때 인터페이스는 여러 개의 인터페이스를 구현할 수 있다.

 

3. 인터페이스도 상속이 된다.

interface I3{
    public void x();
}
 
interface I4 extends I3{
    public void z();
}
 
class B implements I4{
    public void x(){}
    public void z(){}   
}

I4가 가진 z를 구현해야 하며 I4가 상속받고 있는 I3가 정의한 x도 구현을 해야 한다.

 

 

abtract vs interface

추상클래스는 추상 메소드를 하위 클래스가 상속받아서 강제하게 하는 클래스이다. (본체있는 메소드 가져도 된다.)

인터페이스는 구체적인 로직이나 상태를 가질 수 없다. (본체가 없는 메소드만을 가지고 있어야 한다.)

 

구분 추상 클래스 인터페이스
상속 가능 범위 단일 상속 다중 상속
키워드 extneds 사용 implements 사용
추상 메소드 갯수 abstract 메소드 0개 이상 모든 메소드는 abstract
abstract 키워드 명시 명시적 사용 묵시적으로 abstract
자체 인스턴스 생성 생성 불가 생성 불가
다형성 적용 시 상위 타입 활용 가능 유무 가능 가능