YYYEJI

[JAVA] 인터페이스(Interface)란? 본문

Java

[JAVA] 인터페이스(Interface)란?

YEJI ⍢ 2022. 12. 27. 05:04
728x90

Class의 상속(inheritance)는 여러 문제점으로 인해 다중 상속이 불가능합니다.

하지만 다중 상속의 이점을 버릴 수 없어서 인터페이스(interface)를 통해 다중 상속을 지원하게 됩니다.

 

 

인터페이스(interface)란?

인터페이스는 추상 메서드(method)만을 가질 수 있는 일종의 추상 클래스입니다.

즉 함수의 바디(body)를 가질 수 없다는 의미입니다.

 

 

- 대문자(Upper case)로 시작

- Constructor를 정의하지 X

- Instance 변수를 정의하지 X

- Method body를 정의하지 X

 

 

- 메소드(method)의 body가 구현되지 않아서 interface는 객체(object)를 생성할 수 X

- Interface로도 extends 사용해서 상속(inheritance)받기 가능

 

 

Interface를 물려받을 땐 "implements"를 사용합니다.


public class Class_name implements Interface_name

 

 

Interface 코드


public interface Measurable {
	public double getPerimeter();
	public double getArea();
}

Constructor, instance 변수, method body를 구현하지 않았습니다.

method의 body 구현은 implements한 class에서 구현하게 됩니다.

 

 

 

Implements된 class의 코드


// Rectangle class
public class Rectangle implements Measurable{
	private double myWidth;
	private double myHeight;
	
	public Rectangle() {
		myWidth = 0;
		myHeight = 0;
	}
	
	public Rectangle(double width, double height) {
		myWidth = width;
		myHeight = height;
	}

	
	@Override
	public double getPerimeter() {

		return 2 * (myWidth + myHeight);
	}
	
	@Override
	public double getArea() {
		return myWidth * myHeight;
	}
}
// Circle class
public class Circle implements Measurable{
	private double myRadius;
	
	public Circle() {
		myRadius = 0;
	}
	
	public Circle(double radius) {
		myRadius = radius;
	}
	
	public double getPerimeter() {
		return 2 * Math.PI * myRadius;
	}
	
	public double getCircumference() {
		return getPerimeter();
	}
	
	public double getArea() {
		return Math.PI * myRadius * myRadius;
	}
	
}

implements한 인터페이스의 함수를 구현하지 않으면 error가 뜹니다.

이런 식으로 인터페이스를 사용할 수 있습니다.

 

 

 

◡̈