DEVLOG

인터페이스(Interface) 본문

Java

인터페이스(Interface)

BINTHEWORLD 2022. 5. 23. 11:39

인터페이스란?

추상클래스 개념과 흡사하나 설계의 본질에 더욱 가까운 구현 방법

자바에서 다중 상속을 구현하게 해주는 고급 기술

추상클래스는 추상 메소드 외에 멤버 변수나 일반 메소드를 가질 수 있지만인터페이스에서는 반드시 사전에 정의된 추상 메소드의 상수만을 가질 수 있음


[추상클래스 VS 인터페이스]

인터페이스 : 일반메소드 구현 시 에러 발생 -> 선언만 하는 것은 가능
추상클래스 : 일반메소드 구현 시 에러X


인터페이스 예제

Dog.java

- 인터페이스

// 인터페이스
public interface Dog {
	// 추상메소드 선언 
	abstract void crying();
	// 일반메소드 구현 안되므로, 어떠한 메소드가 존재하는 지만 알려주는 설계 역할만 함
	public void show();

}

Main.java

- Dog.java를 interface

- 상속과 마찬가지로 Add unimplemented methods(오버라이딩)로 반드시 메소드 구현

// implements : 인터페이스 / extends : 상속
public class Main implements Dog{

	public static void main(String[] args) {
		// 메인메소드의 인스턴스화
		Main main = new Main();
		main.crying();
		main.show();
	}

	@Override
	public void crying() {
		System.out.println("월월");
		
	}

	@Override
	public void show() {
		System.out.println("Hello World!");
		
	}

}

결과


[다중상속] 1. 추상클래스 : 다중상속 불가능

Dog.java

- 추상클래스

// 추상클래스
abstract class Dog {
	// 추상메소드 선언 
	abstract void crying();
}

Cat.java

- 추상클래스

// 추상클래스
abstract class Cat {
	// 추상메소드 선언 
	abstract void crying();
}

다중상속 시 에러 발생

2. 인터페이스 : 다중상속 가능

Dog.java

// 인터페이스
public interface Dog {
	// 추상메소드 선언 
	abstract void crying();
	// 일반메소드 선언
	public void one();
}

Cat.java

// 인터페이스
public interface Cat {
	// 추상메소드 선언 
	abstract void crying();
	// 일반메소드 선언
	public void two();
}

Main.java

public class Main implements Dog, Cat { // 인터페이스는 다중상속 가능

	public static void main(String[] args) {
		// 메인메소드의 인스턴스화
		Main main = new Main();
		main.crying();
		main.one();
		main.two();
	}
	
	// 인터페이스든 추상클래스든 선언된 메소드는 반드시 구현해야 함
	
	@Override
	public void crying() {
		System.out.println("월월");
		
	}
	
	@Override
	public void two() {
		System.out.println("Two!");
		
	}

	@Override
	public void one() {
		System.out.println("One!");
		
	}

}

'Java' 카테고리의 다른 글

객체(Object)  (0) 2022.05.23
다형성(Polymorphism)  (0) 2022.05.23
Final 키워드  (0) 2022.05.21
추상 (Abstract)  (0) 2022.05.21
객체지향 프로그래밍 - 6. 상속(2)  (0) 2022.05.21
Comments