Java/Java

인터페이스 ( interface )

DDG9 2024. 4. 25. 09:26

인터페이스의 개념

  • 모든 메서드가 추상 메서드로 선언됨 public abstract
  • 모든 변수는 상수로 선언됨 public static final

 

인터페이스의 특징

  • 추상 메서드: 인터페이스는 추상 메서드(구현부가 없는 메서드)만을 가질 수 있습니다. 자바 8부터는 default 메서드와 staitc 메서드를 가질 수 있게 되었습니다.
  • 다중 상속: 클래스는 여러 인터페이스를 구현할 수 있으므로, 다중 상속의 효과를 낼 수 있습니다. ( 상속관계와 차이점)
  • 구현: 클래스가 인터페이스를 구현할 때는 implements 키워드를 사용합니다.
interface Animal {
	// 추상 메서드만 선언 가능
	// public abstract void eat();
	// public abstract void move();

	// 축약 가능
	void eat();
	void move();

}

// implements - 구현하다
class Dog implements Animal {

	@Override
	public void eat() {
		System.out.println("먹이를 먹다");
	}

	@Override
	public void move() {
		System.out.println("촐랑촐랑 다닌다");
	}

}

class Bird implements Animal {

	@Override
	public void eat() {
		System.out.println("모이를 먹다");
	}

	@Override
	public void move() {
		System.out.println("날아 다니다");
	}

}
public class AnimalTest {

	public static void main(String[] args) {

		// Animal animal = new Animal(); 인터페이스는 기본적으로 new 할 수 없다
		Animal dog = new Dog(); // Animal <- Dog 다형성, 업캐스팅 된 상태
		Animal bird = new Bird();

		dog.eat();
		dog.move();

		bird.eat();
		bird.move();

	}

}

 

 

※ 인터페이스(점선)

public interface Calc {

	int add(int n1, int n2);
	int substract(int n1, int n2);
	int times(int n1, int n2);
	double divide(int n1, int n2);

}
public abstract class Calculator implements Calc {

	@Override
	public double divide(int n1, int n2) {
		if (n2 == 0) {
			System.out.println("0으로 나눌 수 없습니다");
			return 0;
		}
		return n1 / n2;
	}
}
public class CompleteCalc extends Calculator {

	@Override
	public int add(int n1, int n2) {
		return n1 + n2;
	}

	@Override
	public int substract(int n1, int n2) {
		return n1 - n2;
	}

	@Override
	public int times(int n1, int n2) {
		return n1 * n2;
	}

	public void showInfo() {
		System.out.println("계산 완료");
	}

	// 코드 테스트 메인 함수
	public static void main(String[] args) {
		Calc calc = new CompleteCalc(); // 업 캐스팅된 상태

		System.out.println(calc.add(10, 10));
		System.out.println(calc.divide(10, 0));
		System.out.println("-------------------------");

		((CompleteCalc) calc).showInfo();
		// 반복문, 제어문 활용한다면 instanceof 연산자를 기억하자
		if (calc instanceof CompleteCalc) {
			((CompleteCalc) calc).showInfo();
		}
	}
}

'Java > Java' 카테고리의 다른 글

String, StringBuffer 클래스  (0) 2024.04.26
Object 클래스  (0) 2024.04.25
추상 클래스 ( abstract class )  (0) 2024.04.24
다형성 ( Polymorphism )  (0) 2024.04.24
메서드 오버로딩  (0) 2024.04.24