인터페이스

muz·2021년 4월 17일
0

Java

목록 보기
15/21
post-thumbnail

인터페이스는 abstract, final과 함께 자바의 대표적인 규제이다. 어떤 객체가 있고, 그 객체가 특정한 인터페이스를 사용한다면 그 객체는 반드시 인터페이스의 메소드들을 구현해야 한다. 만약 인터페이스에서 강제하고 있는 메소드를 구현하지 않으면 이 애플리케이션은 컴파일이 되지 않는다.

interface I {
    public void z();
}

class A implements I {
    public void z() {}
}

class A implements I는 클래스A가 인터페이스I를 구현하고 있다는 뜻으로, 즉 interface I의 멤버인 public void z() 메소드를 클래스A가 반드시 포함하고 있어야 한다는 것이다. 만약 클래스A 내의 public void z() {}를 삭제하면 컴파일 에러가 발생할 것이다.

인터페이스와 상속은 다르다.

  • 상속 : 상위 클래스의 기능을 하위 클래스가 물려 받는 것
  • 인터페이스 : 하위 클래스에 특정한 메소드가 반드시 존재하도록 강제함
    이 둘은 사용하는 키워드도 다르다. 클래스 선언 시 class를 사용하지만 인터페이스는 interface를 사용한다. 상속은 extends를 사용하지만 인터페이스는 implements를 사용한다.

클래스 A는 인터페이스I를 '구현'한다.

약속을 정의하는 인터페이스

public interface Calculatable{
	public void setOprands(int first, int second, int third);
    public int sum();
    public int avg();
}

이 인터페이스를 따라서 클래스를 구현해보자.

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.fist + this.second + this.third;
    }
    public int avg() {
    	return (this.fist + this.second + this.third)/3;
    }
}

public calss CalculatorConsumer {
	public static void main(String[] args) {
    	Calculator c = new Calculator();
        c.setOprands(10,20,30);
        System.out.println(c.sum() + c.avg());
    }
}

인터페이스를 이용하면 서로 동일한 메소드를 만들도록 규약을 정해서 코드를 작성할 수 있으므로 다른 개발자가 구현하는 방식에 덜 영향을 받을 수 있다.

인터페이스의 규칙

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

클래스 A는 메소드 x, z중 하나라도 구현하지 않으면 오류가 발생함

interface I1 {
	public void x();
}

interface I2 {
	public void z();
}

class A implements I1, I2 {
	public void x() {}
	public void z() {}
}
  1. 인터페이스도 상속이 됨
interface I3 {
	public void x();
}

interface I4 extends I3 {
	public void z();
}

class B implements I4 {
	public void x() {}
    public void z() {}
}
  1. 인터페이스의 멤버는 반드시 public임

인터페이스의 멤버는 무조건 public이다. public을 생략하면 접근 제어자 default가 되는 것이 아닌, public이 된다.

interface I5 {
	private void x();
]

abstract vs interface

인터페이스와 추상 클래스는 비슷한 듯 다르다.

😉 인터페이스

  • 클래스가 아닌 인터페이스라는 고유한 형태를 가지고 있음
  • 구체적인 로직, 상태를 가지고 있을 수 없음

🤔 추상 클래스

  • 일반적인 클래스임
  • 구체적인 로직이나 상태를 가지고 있을 수 있음

Reference
1. interface

profile
Life is what i make up it 💨

0개의 댓글