본문 바로가기
Java

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

by 태크민 2024. 6. 10.

추상 클래스(Abstract Class)

개념

abstract 키워드로 선언된 클래스

최소 한 개의 추상 메서드를 포함하는 경우 반드시 추상 클래스로 선언해야한다.

그러나 추상 메서드가 하나도 없는 경우라도 추상 클래스로 선언할 수 있다.

 

추상 클래스의 구현

서브 클래스에서 슈퍼클래스의 모든 추상 메서드를 오버라이딩하여 실행가능한 코드로 구현한다.

 

추상 클래스의 목적

  • 객체(인스턴스)를 생성하기 위함이 아니며, 상속을 위한 부모 클래스로 활용하기 위한 것이다.
  • 여러 클래스의 공통된 부분을 추상화(추상 메서드)하여 상속받는 클래스에게 구현을 강제화하기 위한 것이다. (메서드의 동작을 구현하는 자식 클래스로 책임을 위임)
  • 즉, 추상클래스의 추상메서드를 자식 클래스가 구체화하여 그 기능을 확장하는 데 목적이 있다.

추상 클래스 예시

//추상 클래스
abstract class Shape { 
  Shape() {...}
  void edit() {...}
  abstract public void draw(); // 추상 메서드
}
/* 추상 클래스의 구현 */
class Circle extends Shape {
  public void draw() { System.out.println("Circle"); } // 추상 메서드 (오버라이딩)
  void show() { System.out.println("동그라미 모양"); }
}

 

인터페이스(Interface)

 

개념

interface 키워드를 사용하여 선언한다. 추상 메서드와 상수만을 포함한다.

 

인터페이스의 구현

인터페이스를 상속받고(implements), 추상메서드를 모두 구현한 클래스를 작성한다.

implements 키워드를 사용한다.

 

인터페이스의 목적

  • 상속받을 서브 클래스에서 구현할 메서드의 원형을 모두 알려주어, 클래스가 자신의 목적에 맞게 메서드를 구현하도록 하는것이다.
  • 구현 객체의 같은 동작을 보장하기 위한 목적이 있다.
  • 즉, 서로 관련이 없는 클래스에서 공통적으로 사용하는 방식이 필요하지만 기능을 각각 구현할 필요가 있는 경우에 사용한다.

특징

  • 인터페이스는 상수 필드와 추상메서드만으로 구성된다.
  • 모든 메서드는 추상 메서드로서, abstract public 속성이며 생략 가능하다.
  • 상수는 public static final 속성이며, 생략하여 선언할 수 있다.
  • Java 8부터 default 메소드가 추가되었다.오버라이딩 안하고 일반 메소드처럼 호출할 수도 있다.
  • → default키워드가 붙은 메소드는 일반 메소드처럼 구현 할 수 있으며, 자식 클래스에서 이를 오버라이딩 할 수 있다.
  • Java 8부터 static 메소드가 추가 되었다.클래스명.static메소드(); 로만 호출이 가능하다!
  • → 인터페이스에 static 메소드를 선언 가능하게 함으로써 간단한 기능을 가지는 유틸리티성 인터페이스를 만들 수 있게 되었다.

인터페이스 예시

//인터페이스
public interface Calculator {
	public int plus(int pre, int post);
	public int multi(int pre, int post);
	
	default int execPlus(int pre, int post){
		return pre + post;
	}

	static int execMulti(int pre, int post){
		return pre * post;
	}
}
//구현 객체
public class CalculatorImpl implements Calculator {
	@Override 
	public int plus(int pre, int post) {
	 return pre + post; 
	} 

	@Override public int multi(int pre, int post) {
	 return pre * post; 
	} 
}
//메인 함수
public class InterfaceEx {
 public static void main(String[] args) {
	 Calculator cal = new CalculatorImpl();
	 int resultPlus = cal.plus(3, 9);
	 int resultMulti = cal.multi(3, 9);
	 int resultExecPlus = cal.execPlus(3, 9);
	 int resultExecMulti = Calculator.execMulti(3, 9);
}

 

추상 클래스와 인터페이스의 공통점

  • 인스턴스(객체)는 생성할 수 없다.
  • 선언만 있고 구현 내용이 없다.
  • 자식클래스에게 메서드의 구체적인 동작을 구현하도록 책임을 위임한다.

추상 클래스와 인터페이스의 차이점

  • 추상 클래스는 추상메서드를 자식 클래스가 구체화하여 그 기능을 확장하는데 목적이있다. (상속을 받아 기능을 확장시키는것) 하지만, 인터페이스는 서로 관련이 없는 클래스에서 공통적으로 사용하는 방식이 필요하지만 각각의 기능을 구현할 필요가 있는경우에 사용한다.
  • 추상 클래스는 클래스이지만 인터페이스는 클래스가 아니다.
  • 추상 클래스는 단일 상속이지만 인터페이스는 다중상속이 가능하다.

'Java' 카테고리의 다른 글

[Java] static 블록과 생성자  (1) 2024.12.14
[Java] 기본타입 vs 참조타입  (1) 2024.06.10
[Java] 오버라이딩 vs 오버로딩  (0) 2024.06.10
[Java] JVM 이란?  (1) 2024.06.04
[Java] Garbage Collector (GC)  (0) 2024.06.03