개발새발

추상 클래스와 인터페이스 본문

WEB-STUDY

추상 클래스와 인터페이스

비숑주인 2025. 1. 3. 23:09

추상화: 구체적인 개념으로부터 공통된 부분들만 추려내어 일반화할 수 있도록 하는 것

 

추상메소드

메소드 선언만 통일하고 실행 내용은 실체 클래스마다 달라야 하는 경우, abstract 키워드로 선언되고 중괄호가 없는 메소드 하위 클래스는 반드시 재정의해서 실행 내용을 결정해야 함

 

abstract public String getName(); // 추상 메소드
abstract public String fail() { return "Good Bye"; } // 추상 메소드 아님. 컴파일 오류

 

1. 추상클래스 (Abstract Class)

  • 개념:
    • 공통적인 필드와 메소드를 정의하고, 세부 구현은 하위 클래스에서 정의하도록 강제하는 클래스
    • abstract 키워드로 선언되며, 직접 객체를 생성할 수 없고 상속을 통해서만 사용 된다
  • 구성요소:
    • 추상 메소드 (중괄호 없이 선언, 하위 클래스에서 반드시 구현 필요)
    • 일반 메소드
    • 필드 (멤버 변수)
    • 생성자
  • 용도 및 목적:
    • 상속을 위한 슈퍼 클래스로 활용하는 것
    • 서브 클래스에서 추상 메소드 구현
    • 하위 클래스에 규격을 강제.
    • 다형성 구현.

 

abstract class Shape {
    public abstract void draw(); // 추상 메소드
}

class Line extends Shape {
    @Override
    public void draw() {
        System.out.println("Line");
    }
}

class Circle extends Shape {
    @Override
    public void draw() {
        System.out.println("Circle");
    }
}

 

 

Shape는 추상 클래스이며, draw 메소드를 정의 한다

Line과 Circle 클래스는 Shape를 상속받아 draw 메소드를 구현하여 각자의 출력 내용을 정의 한다

 

인터페이스 (Interface)

 

  • 개념:
    • 클래스가 반드시 구현해야 할 메소드를 명세하는 일종의 계약서 역할.
    • interface 키워드로 선언하며, implements 키워드를 사용해 일 클래스에서 구현 한다. 
    • 인터페이스 멤버들은 모두 묵시적으로 public abstract이다. 
    • 구현클래스에서 인터페이스를 사용하기 위해서는 implements 예약어를 사용 한다.
    • 구현클래스에서 인터페이스를 사용할 경우 반드시 정의된 메소드를 오버라이딩하여 구현해야 한다.
    • 인터페이스는 다중 상속이 가능하다.
  • 구성요소:
    • 상수 필드 (묵시적으로 public static final)
    • 추상 메소드 (묵시적으로 public abstract)
    • 디폴트 및 정적 메소드 (Java 8부터 추가)
  • 특징 및 용도:
    • 다중 상속이 가능.
    • 구현 객체의 일관된 동작 보장.
interface RemoteControl {
    int MAX_VOLUME = 10;
    int MIN_VOLUME = 0;

    void turnOn();  // 추상 메소드
    void turnOff(); // 추상 메소드
    void setVolume(int volume); // 추상 메소드
}

class Television implements RemoteControl { // 다중 상속을 받고 있다
    private int volume;

    @Override
    public void turnOn() {
        System.out.println("TV를 켭니다.");
    }

    @Override
    public void turnOff() {
        System.out.println("TV를 끕니다.");
    }

    @Override
    public void setVolume(int volume) {
        this.volume = Math.min(MAX_VOLUME, Math.max(MIN_VOLUME, volume));
        System.out.println("현재 TV 볼륨: " + this.volume);
    }
}

 

추상클래스 vs 인터페이스

 

 

  • 추상클래스:
    • 공통된 코드의 재사용을 위해 설계.
    • 상속을 통해 기능을 확장.
  • 인터페이스:
    • 클래스에 특정 동작을 강제.
    • 구현 객체 간의 일관성을 보장.
특징 추상 클래스 인터페이스
선언 키워드 abstract 클래스 interface
구현 키워드 extends implements
다중 상속 가능 여부 불가능 가능
멤버 구성 필드, 일반 메소드, 추상 메소드 상수, 추상 메소드, 디폴트/정적 메소드

 

 

'WEB-STUDY' 카테고리의 다른 글

자바 GUI 기초  (0) 2025.01.06
패키지와 예외 처리  (0) 2025.01.06
상속  (0) 2025.01.03
클래스와 객체 Ⅱ  (0) 2024.12.31
클래스와 객체 Ⅰ  (1) 2024.12.27