추상 클래스(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 |