본문 바로가기

LANG../JAVA

abstract & interface

abstract

  • abstract 키워드는 클래스와 메서드에 적용된다.
  • 추상(abstract) 클래스는 실체 클래스들의 멤버변수와 메서드들의 이름을 통일할 목적으로 사용한다.
  • 추상(abstract) 메서드가 있는 클래스는 반드시 추상 클래스여야 한다.
  • 추상 클래스에 반드시 추상 메서드만 선언할 필요는 없고 일반 메서드도 선언할 수 있습니다.

 


 

abstract 클래스

  • 추상 클래스는 new 키워드를 이용해서 객체를 만들지 못하고 오직 상속을 통해서 자식 클래스로 구체화 시켜야 한다.
  • 추상 클래스도 일반 클래스와 마찬가지로 멤버변수, 생성자, 메서드를 선언할 수 있다.
  • new를 사용하여 직접 생성자를 호출할 수는 없지만 자식 객체가 생성될 때 super()를 호출하여 추상 클래스 객체를 생성하므로 추상 클래스도 생성자가 반드시 있어야 한다.
package abstract_.abs;

public abstract class PopupStore {
	/*
	 * 1.메서드에 abstract를 붙이면 해당 메서드는 추상메서드가 되고
	 *  이 메서드는 반드시 오버라이딩해야만 합니다.
	 * 2. 추상메서드는 상속을 목적으로 선언한 메서드이지 실행을 목적으로
	 * 선언된 메서드가 아니기 때문에 메서드의 몸체({}) 부분이 없고
	 * 선언 마무리도 세미콜론(;)으로 합니다.
	 * 3. 일반 클래스에는 추상 메서드를 선언할 수 없습니다.
	 * 	추상 메서드가 하나 이상 존재하면 무조건 추상클래스로 선언해야 합니다.
	 * 4. 추상 클래스 내부에서는 추상메서드가 하나 이상 존재한다면
	 *  일반메서드 선언도 여전히 가능합니다.
	 */ 

	public abstract void orderApple();
	public abstract void orderOrange();
	public abstract void orderGrape();
	
	public void refund() {
		System.out.println("제품에 문제가 있어서 환불합니다.");
	}
}

 

abstract 메서드

  • 추상 메서드는 추상 클래스 내에서만 선언할 수 있다.
  • 추상 메서드는 메서드의 선언부만 있고 메서드 실행 내용이 들어가는 중괄호 {}가 없는 메서드를 말한다.
  • 추상 클래스를 설계할 때 자식 클래스가 반드시 실행 내용을 채우도록 강요하고 싶은 메서드가 있을 경우, 해당 메서드를 추상 메서드로 선언한다.
  • 자식 클래스에서 반드시 부모 추상클래스의 추상 메서드를 재정의하여 실행 내용을 작성해야 한다. 그렇지 않으면 컴파일 에러가 난다.
package abstract_.abs;

public class ConvenientStore extends PopupStore {

	@Override
	public void orderApple() {
		System.out.println("가당 사과주스를 4000원에 팝니다.");
	}
	@Override
	public void orderGrape() {
		System.out.println("가당 포도주스를 4500원에 팝니다.");
		
	}
	@Override
	public void orderOrange() {
		System.out.println("가당 오렌지주스를 3500원에 팝니다.");
		
	}
}

 

 


 

  • 일반메서드 : 오버라이드 가능, 오버라이드 안하기 가능
  • 추상메서드 : 오버라이드 강제, 오버라이드 안하기 불가능
  • final메서드 : 오버라이드 불가능, 무조건 안하고 써야함

 

 


interface

다중 상속과 관련된 문제를 해결하고, 클래스 간의 일관된 인터페이스를 제공하기 위한 추상화의 한 형태이다.

인터페이스를 이용하 다중 상속의 효과를 낼 수 있다.

 

 

1. interface 선언

: interface 키워드를 사용해 선언. 추상메서드, 상수, 디폴트메서드, 정적메서드등을 가질 수 있다.

 

 

2. interace 구현

: implements 키워드를 사용해 클래스에서 인터페이스를 구현한다. 여러 인터페이스를 동시에 구현하는 것도 가능하다.

 

 


인터페이스 vs 추상클래스

  • 대표적으로 인터페이스는 다중 상속이 가능하고, 추상클래스는 단일 상속이 가능하다는 차이점이 있다.
  • 인터페이스는 다양한 클래스 간에 공통된 행동을 정의하고, 클래스가 여러 인터페이스를 구현해 다중 상속을 통해 다양한 기능을 제공하고자 할 때 사용한다.
  • 추상 클래스는 공통된 코드를 재사용하고 상속 관계에서 공통적인 기능을 제공할 때 사용된다.