객체지향 프로그래밍(OOP)

Java 인터페이스와 추상 클래스 쉽게 이해하기: 초보자도 알기 쉬운 차이와 사용법

CodeCaine Explorer 2024. 12. 18. 19:44
728x90
반응형
SMALL

안녕하세요! 😊
오늘은 Java의 인터페이스(interface)추상 클래스(abstract class)에 대해 알아보겠습니다.
이 두 개념은 객체지향 프로그래밍에서 중요한 역할을 해요. 처음엔 헷갈릴 수 있지만, 차근차근 배우다 보면 금방 익숙해질 거예요! 💪


1. 인터페이스(interface)란? 🧩

인터페이스는 클래스가 따라야 할 약속이나 규칙을 정의하는 틀입니다.

  • 인터페이스에는 추상 메서드(내용이 없는 메서드)만 선언할 수 있어요.
  • 👉 비유: 콘센트 규격. 전자기기는 콘센트 규격을 따라야만 작동할 수 있죠!

특징

  • 구현(내용)이 없는 메서드 선언만 포함합니다.
  • 다중 상속(여러 인터페이스를 구현)이 가능합니다.
  • 클래스는 implements 키워드로 인터페이스를 구현합니다.
// 인터페이스 선언
interface Animal {
    void sound(); // 추상 메서드 (구현 X)
}

// Dog 클래스는 Animal 인터페이스를 구현
class Dog implements Animal {
    public void sound() {
        System.out.println("Woof!"); // 인터페이스 메서드 구현
    }
}

// Cat 클래스도 Animal 인터페이스를 구현
class Cat implements Animal {
    public void sound() {
        System.out.println("Meow!"); // 인터페이스 메서드 구현
    }
}

public class Main {
    public static void main(String[] args) {
        Animal dog = new Dog(); // Dog 객체 생성
        dog.sound(); // 출력: Woof!

        Animal cat = new Cat(); // Cat 객체 생성
        cat.sound(); // 출력: Meow!
    }
}

동작 설명:

  1. Animal 인터페이스는 sound() 메서드를 선언했습니다.
  2. DogCat 클래스가 각각 sound() 메서드를 구현했어요.
  3. 인터페이스를 사용하면 동일한 메서드 이름으로 다른 동작을 쉽게 정의할 수 있습니다.

2. 추상 클래스(abstract class)란? 🏗️

추상 클래스공통된 특성을 정의하는 설계도입니다.

  • 추상 메서드(구현 없는 메서드)와 일반 메서드(구현이 있는 메서드)를 모두 가질 수 있어요.
  • 👉 비유: 자동차 설계도. 일부 기능(엔진, 바퀴)은 공통으로 정의하고, 다른 기능(색상, 내부 디자인)은 각각 다르게 구현할 수 있죠!

특징

  • abstract 키워드를 사용합니다.
  • 단일 상속(한 번에 하나의 클래스만 상속)만 가능합니다.
  • 추상 메서드를 포함하며, 자식 클래스에서 반드시 구현해야 합니다.
// 추상 클래스 선언
abstract class Shape {
    // 추상 메서드 (구현 X)
    abstract void draw();

    // 일반 메서드 (구현 O)
    void message() {
        System.out.println("This is a shape.");
    }
}

// Circle 클래스는 Shape 추상 클래스를 상속
class Circle extends Shape {
    void draw() {
        System.out.println("Drawing a Circle!");
    }
}

// Rectangle 클래스도 Shape 추상 클래스를 상속
class Rectangle extends Shape {
    void draw() {
        System.out.println("Drawing a Rectangle!");
    }
}

public class Main {
    public static void main(String[] args) {
        Shape circle = new Circle(); // Circle 객체 생성
        circle.message(); // 출력: This is a shape.
        circle.draw(); // 출력: Drawing a Circle!

        Shape rectangle = new Rectangle(); // Rectangle 객체 생성
        rectangle.message(); // 출력: This is a shape.
        rectangle.draw(); // 출력: Drawing a Rectangle!
    }
}

동작 설명:

  1. Shape 추상 클래스는 공통 메서드(message())와 추상 메서드(draw())를 정의했습니다.
  2. CircleRectangle 클래스는 Shape를 상속받아 draw() 메서드를 각각 구현했어요.
  3. 공통된 동작은 추상 클래스에서, 각자의 특성은 자식 클래스에서 정의할 수 있습니다.

인터페이스와 추상 클래스의 차이 🧐

특징 인터페이스 추상 클래스
목적 규칙 정의 (무엇을 해야 하는지) 설계도 작성 (공통 동작 정의 포함)
상속 개수 다중 구현 가능 (implements) 단일 상속만 가능 (extends)
메서드 종류 추상 메서드만 (Java 8부터는 기본 메서드 포함 가능) 추상 메서드와 일반 메서드 모두 가능
사용 키워드 interface abstract class

이해가 어렵다면? 😅

처음에는 "인터페이스와 추상 클래스가 왜 필요하지?" 같은 의문이 생길 수 있어요.
🔑 팁:

  • 인터페이스규칙과 약속을 정의하는 데 사용하세요.
  • 추상 클래스공통된 기능구체적인 설계를 정의할 때 사용하세요.

직접 예제를 따라 해 보면서 차이를 느껴보세요! 😊


왜 중요한가요?

인터페이스와 추상 클래스는 코드 재사용성유지보수성을 높이는 데 필수적입니다.
실무에서도 규칙(인터페이스)과 설계(추상 클래스)를 적절히 활용하면 더 나은 코드 구조를 만들 수 있어요. 💡


오늘도 학습하느라 정말 수고 많으셨어요! 😊
조금씩 배우다 보면 인터페이스와 추상 클래스가 점점 친숙해질 거예요. 여러분의 성장을 응원합니다. 화이팅! ❤️

반응형
SMALL