Java Interface and Abstract


인터페이스 및 추상 클래스 (Interfaces and Abstract Classes)

인터페이스 (Interfaces)

인터페이스는 Java에서 클래스와 비슷하지만, 다음과 같은 점에서 다릅니다:

  • 모든 메서드는 추상 메서드입니다. 즉, 메서드 본문이 없고 세미콜론(;)으로 끝납니다.
  • 모든 필드는 상수로 선언되며, 자동으로 public, static, final로 설정됩니다.
  • 다중 상속이 가능합니다.

인터페이스 예제:

// 인터페이스 정의
interface Animal {
    void makeSound(); // 추상 메서드 선언
}

// 인터페이스 구현
class Dog implements Animal {
    @Override
    public void makeSound() {
        System.out.println("멍멍!");
    }
}

// 인터페이스 사용 예제
public class Main {
    public static void main(String[] args) {
        Animal myDog = new Dog();
        myDog.makeSound(); // 출력: 멍멍!
    }
}

위의 예제에서 Animal 인터페이스는 makeSound()라는 추상 메서드를 선언합니다. Dog 클래스는 Animal 인터페이스를 구현하여 makeSound() 메서드를 오버라이딩합니다. 인터페이스를 사용하여 다형성을 구현할 수 있습니다.

추상 클래스 (Abstract Classes)

추상 클래스는 일반 클래스와 비슷하지만, 다음과 같은 점에서 다릅니다:

  • 추상 메서드를 포함할 수 있습니다. 추상 메서드는 메서드 본문이 없고 세미콜론(;)으로 끝납니다.
  • 객체를 직접 생성할 수 없습니다. 즉, 인스턴스화할 수 없습니다.
  • 하위 클래스에서 추상 메서드를 반드시 구현해야 합니다.

추상 클래스 예제:

// 추상 클래스 정의
abstract class Shape {
    // 추상 메서드 선언
    abstract void draw();

    // 일반 메서드
    void display() {
        System.out.println("도형을 그립니다.");
    }
}

// 추상 클래스를 상속받는 하위 클래스
class Circle extends Shape {
    @Override
    void draw() {
        System.out.println("원을 그립니다.");
    }
}

// 추상 클래스 사용 예제
public class Main {
    public static void main(String[] args) {
        Shape myShape = new Circle();
        myShape.draw(); // 출력: 원을 그립니다.
        myShape.display(); // 출력: 도형을 그립니다.
    }
}

위의 예제에서 Shape 클래스는 draw() 메서드를 추상 메서드로 선언하고 있습니다. Circle 클래스는 Shape 클래스를 상속받아 draw() 메서드를 구현합니다. Main 클래스에서 Shape 타입의 변수를 선언하고 Circle 객체를 할당하여 다형성을 구현합니다.

인터페이스와 추상 클래스는 Java에서 다형성, 유연성 및 코드 재사용성을 높이는 데 중요한 역할을 합니다. 인터페이스는 다중 상속을 지원하고, 추상 클래스는 일반 메서드와 필드를 포함할 수 있어 보다 구체적인 추상화를 제공합니다.


Leave a Reply

Your email address will not be published. Required fields are marked *