본문 바로가기
JAVA

java 인터페이스 interface (+추상클래스 차이점&유사점)

by 자바비터 2022. 3. 20.

▶ 인터페이스란?

- 인터페이스에 대한 사전적 정의는 사물 간 또는 사물과 인간사이의 의사소통이 가능하도록 일시적 혹은 영구적 접근을 목적으로 만들어진 물리적, 가상적 매체를 의미한다.

- 인터페이스는 특정 기능을 수행하기 위해 선언된 함수들의 집합이다.

   

  

▶ 인터페이스의 특징

- 클래스와 extends가 아닌 implements로 상속 관계를 맺는다.

- 변수를 포함할 수 없다. 단, 상수는 정의 가능하다.

- 인터페이스는 명세를 표현하는 장치이고 구현은 클래스가 한다.

- default 메소드 : 인터페이스의 메소드 중 하나는 일반 클래스의 메소드처럼 동작이 정의 될 수 있다.

  default 메소드를 활용하면 자바에서도 메소드 다중상속을 잘 활용할 수 있다.

- 인터페이스는 하나 이상 상속받을 수 있다. 따라서 인터페이스는 다중 상속이 가능하다.

- 클래스는 클래스도 상속 받고 동시에 인터페이스도 상속받을 수 있다.

  

  

▶ 추상클래스와 인터페이스의 차이점

1. 인터페이스는 추상메소드(abstract method)와 상수(FINAL) 필드만 갖는다.

   추상클래스는 추상메소드(abstract method)와 메소드, 상수(FINAL)와 변수 필드 모두 가질 수 있다.

2. 인터페이스implements로 다중 상속이 가능하다.

   추상클래스extends로 다중 상속이 불가능하다.

3. 인터페이스는 상속받는 클래스들이 각자 다른 슈퍼클래스를 갖더라도 필요한 기능이 같을 때 사용한다.

   (조상클래스들이 연관이 없어도 같은 기능이 필요하다면 인터페이스를 사용할 수 있다.

   추상클래스는 상속관계의 클래스들이 공통적으로 갖는 기능들을 추상화해 놓은것으로

   연관관계를 가지고 있는 슈퍼클래스가 가진 메소드들을 상속받아 기능을 구현해야할 때 사용할 수 있다.

   

  

▶ 추상클래스와 인터페이스의 유사점

1. 객체를 생성할 수 없다.

2. 상속을 위한 슈퍼 클래스로만 사용된다.

3. 클래스의 다형성, 재생산성을 실현하기 위한 목적을 가진다.

   

  

인터페이스 예제

interface PhoneInterface{
	//인터페이스에서 선언되는 필드 변수는 모두 상수 변수(final)이다
	final int TIMEOUT = 10000;
	void sendCall();
	void receiveCall();
    
	default void printLogo() { //default메소드, interface 내부에 메소드
        //인터페이스의 메소드 중 하나는 일반 클래스의 메소드 처럼 동작이 정의될 수 있음
		System.out.println("**phone**");
	}
}
//인터페이스의 구현은 implements 키워드를 활용
class SamsungPhone implements PhoneInterface {
	//PhoneIntherface의 모든 추상 메소드 구현
	@Override
	public void sendCall() {
		System.out.println("띠리리리링");
	}
	@Override
	public void receiveCall() {
		System.out.println("전화가 왔습니다");
	}
	public void flash() {
		System.out.println("전화기에 불이 켜졌습니다");
	}
}

public class Ex11 {
	public static void main(String[] args) {
		SamsungPhone phone = new SamsungPhone();
		phone.printLogo();  //상속받은 인터페이스의 default메소드 바로 사용가능
		phone.sendCall();
		phone.receiveCall();
		phone.flash();
	}
}

실행 결과 화면

 

예제처럼 인터페이스틀은 추상클래스와 유사하지만 인터페이스는 class가 아닌 interface로 정의된다.

default 메소드를 활용하면 메소드 중 하나는 일반 클래스의 메소드처럼 동작이 정의되며 상속받은 클래스 객체에서 바로 사용이 가능하다.

보통 실무에서는 추상클래스보다는 인터페이스가 더 많이 쓰인다고 한다.

댓글