본문 바로가기

JAVA

[Java] 추상클래스 vs. 인터페이스

인터페이스

 

접근제어자 interface 인터페이스이름 {

    public static final 타입 상수이름 = 값; // 상수는 선언과 동시에 초기화 필수!

    ...

    public abstract 메소드이름(매개변수목록);

    ...

}

 

  • 인터페이스 내부에 선언하는 변수는 무조건 public static final이다.
    • 인터페이스 변수는 상수로, 반드시 선언 시에 값을 대입해줘야 한다.
  • 인터페이스 내부에 선언하는 메소드는 몸체가 없는 추상메소드이다.

 

인터페이스 사용 이유

  • 개발 코드 안에서 여러 개의 객체를 변환해서 사용하고 싶을 때 개발코드를 수정하지 않고 사용하기 위해 인터페이스 사용함
  • 개발코드를 수정하지 않고도 여러 객체 받아올 수 있으므로 인터페이스를 참조 변수의 타입으로 설정

 

class Buyer { // 고객
    int money = 1000; // 소유금액
    void buy(Product p) {
    // 매개 변수가 Product 타입의 참조변수. Product 클래스의 자손 클래스 Tv, Computer의 참조변수를 한번에 매개변수로 받아들일 수 있음.
    // 앞으로 다른 제품 클래스를 추가할 때 Product클래스를 상속받기만 하면, buy(Product  p)메서드의 매개변수로 받아들여질 수 있다.
    if(money<p.price) {
        System.out.println("잔액이 부족하여 물건을 살수 없습니다.");
        return;
    }
    money -= p.price; // 가진 돈에서 구입한 제품의 가격을 뺀다.
    }
}