상세 컨텐츠

본문 제목

[Java] 인터페이스와 추상 클래스 이해하기

JAVA

by dev.trams 2023. 7. 3. 17:32

본문

반응형


Java에서 인터페이스와 추상 클래스는 객체 지향 프로그래밍의 핵심 개념 중 하나입니다. 이 포스팅에서는 인터페이스와 추상 클래스의 개념과 차이점에 대해 설명하고, 어떻게 활용할 수 있는지 알아보도록 하겠습니다. 또한 실전 예제를 통해 이러한 개념들을 실제 코드에 적용하는 방법을 살펴보겠습니다.

1. 인터페이스란?
   - 인터페이스는 클래스에서 구현해야 할 메서드를 정의하는 일종의 계약입니다.
   - 인터페이스는 추상 메서드, 상수, 디폴트 메서드, 정적 메서드로 구성됩니다.
   - 인터페이스는 다중 상속이 가능하며, 클래스와 인터페이스 간의 관계를 형성합니다.
   - 인터페이스는 클래스가 어떤 기능을 제공하는지 명시적으로 나타내어 코드의 가독성과 유지 보수성을 향상합니다.

2. 추상 클래스란?
   - 추상 클래스는 하나 이상의 추상 메서드를 포함하는 클래스입니다.
   - 추상 클래스는 일반 메서드, 인스턴스 변수, 생성자 등을 포함할 수 있습니다.
   - 추상 클래스는 클래스의 일반적인 특징과 공통 동작을 정의하고, 하위 클래스에서 구체적인 동작을 구현하도록 유도합니다.
   - 추상 클래스는 인스턴스를 직접 생성할 수 없으며, 상속을 통해 하위 클래스에서 확장하여 사용합니다.

3. 인터페이스 vs 추상 클래스
   - 인터페이스와 추상 클래스는 각각 다른 목적과 사용 방식을 가지고 있습니다.
   - 인터페이스는 클래스 간의 관계를 형성하고, 다중 상속과 유연한 구조를 지원합니다.
   - 추상 클래스는 일반적인 동작을 정의하고, 상속을 통해 기능을 확장할 수 있도록 합니다.
   - 인터페이스는 "이러한 기능을 제공한다"라는 계약을 정의하고, 추상 클래스는 "이러한 동작을 가진다"라는 공통점을 제공합니다.

반응형


4. 실전 예제: 도형 계층 구조 만들기
   - Shape라는 추상 클래스를 정의하고, 이를 상속받는 다양한 도형 클래스를 생성합니다.
   - 인터페이스를 활용하여 도형 클래스들이 공통으로 구현해야 할 메서드를 정의합니다.
   - 실제로 도형 객체를 생성하고 메서드를 호출하여 결과를 확인합니다.

// Shape 추상 클래스
abstract class Shape {
    public abstract void draw();
}

// Circle 클래스
class Circle extends Shape {
    public void draw() {
        System.out.println("원을 그립니다.");
    }
}

// Rectangle 클래스
class Rectangle extends Shape {
    public void draw() {
        System.out.println("사각형을 그립니다.");
    }
}

// Triangle 클래스
class Triangle extends Shape {
    public void draw() {
        System.out.println("삼각형을 그립니다.");
    }
}

// 메인 메서드
public class Main {
    public static void main(String[] args) {
        Shape circle = new Circle();
        circle.draw();

        Shape rectangle = new Rectangle();
        rectangle.draw();

        Shape triangle = new Triangle();
        triangle.draw();
    }
}


5. 활용 예제: 동물 소리 재생기
   - Animal 인터페이스를 정의하고, 이를 구현하는 다양한 동물 클래스를 생성합니다.
   - 추상 클래스를 활용하여 공통 동작을 구현하고, 각각의 동물 클래스에서 특정 동작을 구현합니다.
   - 객체를 생성하고 메서드를 호출하여 동물 소리를 재생해 봅니다.

// Animal 인터페이스
interface Animal {
    void makeSound();
}

// 추상 클래스를 활용한 공통 동작 구현
abstract class AbstractAnimal implements Animal {
    public void eat() {
        System.out.println("음식을 먹습니다.");
    }
}

// 개 클래스
class Dog extends AbstractAnimal {
    public void makeSound() {
        System.out.println("멍멍!");
    }
}

// 고양이 클래스
class Cat extends AbstractAnimal {
    public void makeSound() {
        System.out.println("야옹!");
    }
}

// 메인 메서드
public class Main {
    public static void main(String[] args) {
        Animal dog = new Dog();
        dog.makeSound();
        dog.eat();

        Animal cat = new Cat();
        cat.makeSound();
        cat.eat();
    }
}


6. 마무리 및 요약
   - 인터페이스와 추상 클래스는 Java에서 객체 지향 프로그래밍을 구현하는 데 중요한 역할을 합니다.
   - 인터페이스는 클래스 간의 계약을 정의하고, 추상 클래스는 공통 동작을 구현하며 확장 가능한 구조를 제공합니다.
   - 적절하게 인터페이스와 추상 클래스를 활용하면 유연하고 확장 가능한 코드를 작성할 수 있습니다.

이상으로 Java에서의 인터페이스와 추상 클래스에 대한 포스팅을 마치겠습니다. 다음 포스팅에서는 예외 처리에 대해 다룰 예정이니 많은 기대 부탁드립니다!

[참고 자료]:
- Oracle Java Documentation: https://docs.oracle.com/javase/tutorial/java/concepts/index.html
- GeeksforGeeks: https://www.geeksforgeeks.org/interface-vs-abstract-class-in-java/

반응형

관련글 더보기