[java] 자바 추상 클래스와 인터페이스의 예시 사용법

자바에서 추상 클래스와 인터페이스는 객체 지향 프로그래밍에서 중요한 개념입니다. 추상 클래스와 인터페이스를 사용하여 코드를 구조화하고 재사용 가능한 모듈을 만들 수 있습니다. 이번 블로그 포스트에서는 자바에서 추상 클래스와 인터페이스를 어떻게 사용하는지 예시를 통해 알아보겠습니다.

추상 클래스 (Abstract Class)

추상 클래스는 실제로 객체를 생성할 수 없는 클래스입니다. 추상 클래스는 상속을 통해 하위 클래스에서 구체적인 구현을 수행할 것을 강제합니다. 추상 클래스는 abstract 키워드를 사용하여 정의됩니다.

public abstract class Animal {
    protected String name;

    public Animal(String name) {
        this.name = name;
    }

    public abstract void makeSound(); // 추상 메소드

    public void sleep() {
        System.out.println(name + " is sleeping.");
    }
}

위의 예시 코드에서 Animal 클래스는 추상 클래스로 정의되었습니다. makeSound() 메소드는 추상 메소드로 선언되어 하위 클래스에서 반드시 구현되어야 합니다. sleep() 메소드는 일반 메소드로, 하위 클래스에서 재사용 가능합니다.

public class Dog extends Animal {
    public Dog(String name) {
        super(name);
    }

    public void makeSound() {
        System.out.println(name + " is barking.");
    }
}

위의 예시 코드에서 Dog 클래스는 Animal 추상 클래스를 상속하여 makeSound() 메소드를 구현하였습니다.

public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog("Max");
        dog.makeSound();
        dog.sleep();
    }
}

위의 예시 코드에서 Main 클래스에서 Dog 객체를 생성하고 makeSound() 메소드와 sleep() 메소드를 호출하는 예시입니다.

인터페이스 (Interface)

인터페이스는 추상 메소드의 집합으로, 클래스가 따라야 하는 규약을 정의합니다. 인터페이스는 interface 키워드를 사용하여 정의됩니다.

public interface Flyable {
    void fly(); // 추상 메소드
}

위의 예시 코드에서 Flyable 인터페이스는 fly() 메소드를 정의합니다.

public class Bird implements Flyable {
    public void fly() {
        System.out.println("The bird is flying.");
    }
}

위의 예시 코드에서 Bird 클래스는 Flyable 인터페이스를 구현하여 fly() 메소드를 구체적으로 구현하였습니다.

public class Airplane implements Flyable {
    public void fly() {
        System.out.println("The airplane is flying.");
    }
}

위의 예시 코드에서 Airplane 클래스도 Flyable 인터페이스를 구현하여 fly() 메소드를 구체적으로 구현하였습니다.

public class Main {
    public static void main(String[] args) {
        Bird bird = new Bird();
        bird.fly();

        Airplane airplane = new Airplane();
        airplane.fly();
    }
}

위의 예시 코드에서 Main 클래스에서 Bird 객체와 Airplane 객체를 생성하고 각각 fly() 메소드를 호출하는 예시입니다.

결론

자바에서 추상 클래스와 인터페이스는 코드의 구조화와 재사용을 위해 사용됩니다. 추상 클래스는 실제 객체를 생성할 수 없으며 상속을 통해 구체적인 구현을 수행합니다. 인터페이스는 추상 메소드의 집합으로 규약을 정의하고, 클래스는 인터페이스를 구현함으로써 해당 규약을 따라야 합니다. 이러한 추상 클래스와 인터페이스를 적절히 사용하여 더 모듈화된 코드를 작성할 수 있습니다.