JAVA

객체지향(추상 클래스 (Abstract Class) ,인터페이스 (Interface))

jki09871 2024. 7. 24. 14:00

**추상 클래스(abstract class)**와 **인터페이스(interface)**는 자바에서 객체 지향 프로그래밍의 중요한 개념으로, 객체 지향 설계를 통해 다양한 클래스들 간의 공통된 행동을 정의하고, 코드의 유연성과 재사용성을 높이는 데 사용됩니다. 둘은 다형성 구현의 중요한 요소이기도 합니다. 각각의 개념에 대해 자세히 설명하겠습니다.

 

추상 클래스 (Abstract Class)

추상 클래스는 설계의 뼈대와 같은 것이라고 생각하면 됩니다. 이 클래스는 완전하지 않으며, 다른 클래스들이 이 뼈대를 기반으로 실제 기능을 추가하도록 만들어집니다.

  • 추상 클래스는:
    • 구현되지 않은 메서드(추상 메서드)를 가질 수 있습니다. 이 메서드들은 실제로 무엇을 해야 하는지 정의만 해두고, 실제 구현은 자식 클래스가 합니다.
    • 구현된 메서드도 가질 수 있어서, 자식 클래스가 이 메서드를 그대로 사용할 수도 있습니다.
    • **상태(변수)**를 가질 수 있어서, 자식 클래스가 공유할 수 있는 데이터를 정의할 수 있습니다.

예제:

// 추상 클래스
abstract class Animal {
    // 추상 메서드 (구현 없음)
    public abstract void makeSound();
    
    // 구현된 메서드
    public void sleep() {
        System.out.println("Sleeping...");
    }
}

// 자식 클래스
class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Bark");
    }
}

public class Main {
    public static void main(String[] args) {
        Dog myDog = new Dog();
        myDog.makeSound();  // 출력: Bark
        myDog.sleep();      // 출력: Sleeping...
    }
}

이 예제에서 Animal은 추상 클래스입니다. makeSound는 추상 메서드로, 자식 클래스인 Dog가 구현해야 합니다. sleep 메서드는 구현된 메서드로, 자식 클래스에서 그대로 사용할 수 있습니다.

인터페이스 (Interface)

인터페이스는 계약서와 같은 역할을 합니다. 인터페이스는 클래스가 무엇을 해야 하는지 정의합니다. 그러나 그 방법(구현)은 인터페이스를 구현하는 클래스가 결정합니다.

  • 인터페이스는:
    • 메서드 선언만을 포함합니다. 실제 구현은 인터페이스를 구현하는 클래스에서 합니다.
    • 여러 인터페이스를 구현할 수 있어, 다양한 기능을 클래스에 추가할 수 있습니다.
    • 상수만 가질 수 있습니다. 변수는 가질 수 없으며, 항상 public static final로 선언됩니다.

예제:

// 인터페이스
interface Animal {
    // 추상 메서드 (구현 없음)
    void makeSound();
    
    // 디폴트 메서드 (구현 있음)
    default void eat() {
        System.out.println("Eating...");
    }
}

// 자식 클래스
class Dog implements Animal {
    @Override
    public void makeSound() {
        System.out.println("Bark");
    }
}

public class Main {
    public static void main(String[] args) {
        Dog myDog = new Dog();
        myDog.makeSound();  // 출력: Bark
        myDog.eat();        // 출력: Eating...
    }
}

이 예제에서 Animal은 인터페이스입니다. makeSound 메서드는 인터페이스에서 정의된 대로, 구현하는 클래스에서 제공해야 합니다. eat 메서드는 디폴트 메서드로, Dog 클래스에서 별도로 구현하지 않아도 사용할 수 있습니다.

요약

  • 추상 클래스:
    • 설계의 뼈대 역할을 하고, 공통된 동작과 상태를 정의합니다.
    • 자식 클래스가 이 뼈대를 기반으로 구체적인 동작을 추가합니다.
  • 인터페이스:
    • 클래스가 무엇을 해야 하는지를 정의하는 계약서와 같습니다.
    • 실제 구현은 인터페이스를 구현하는 클래스에서 결정됩니다.
    • 여러 인터페이스를 통해 다양한 기능을 클래스에 추가할 수 있습니다.

이렇게 추상 클래스인터페이스를 이용하면, 코드의 재사용성을 높이고, 여러 클래스들 간의 일관성을 유지할 수 있습니다.

'JAVA' 카테고리의 다른 글

객체지향(제네릭(Generic))  (0) 2024.07.24
예외처리(Exception)  (0) 2024.07.24
객체지향(오버로딩 (Overloading), 오버라이딩 (Overriding))  (0) 2024.07.24
객체지향(상속)  (0) 2024.07.24
객체지향(지역 변수, 상수)  (1) 2024.07.24