본문 바로가기

카테고리 없음

[ JAVA ] 추상화와 인터페이스란?

추상화란?

  • 복잡한 시스템의 세부 사항을 숨기고
  • 사용자에게 중요한 기능만을 노출

 

 

추상 클래스 (Abstract Class):

  • 추상 클래스는 일반 클래스와 유사하지만, 인스턴스화할 수 없다.
  • 하나 이상의 추상 메소드를 포함할 수 있다. 추상 메소드는 메소드 선언만 있고, 구현은 없다. 이를 상속받는 클래스에서 구체적으로 구현해야함
  • 추상 클래스는 공통의 기능을 여러 클래스에 공유하도록 하면서도, 일부 메소드만 각 클래스에서 구체적으로 정의할 수 있도록 한다.

 

abstract class Animal {
    // 일반 메소드
    void eat() {
        System.out.println("This animal is eating");
    }

    // 추상 메소드
    abstract void sound();
}

class Dog extends Animal {
    // 추상 메소드 구현
    void sound() {
        System.out.println("Woof");
    }
}

class Cat extends Animal {
    // 추상 메소드 구현
    void sound() {
        System.out.println("Meow");
    }
}

 

 

Animal은 추상 클래스이고, sound는 추상 메소드입니다. DogCat 클래스는 Animal을 상속받고, 각각의 방식으로 sound 메소드를 구현

 

public class Main {
    public static void main(String[] args) {
        Animal dog = new Dog();
        Animal cat = new Cat();

        dog.eat();
        dog.sound();

        cat.eat();
        cat.sound();
    }
}

 

 

실행결과

This animal is eating
Woof
This animal is eating
Meow

 

 

인터페이스 (Interface)란?

  • 인터페이스는 모든 메소드가 추상 메소드인 클래스의 일종으로 자바 8 이후부터는 기본 메소드와 정적 메소드를 인터페이스에 포함할 수 있지만, 기본적으로 인터페이스의 메소드는 구현이 없다.
  • 여러 클래스가 인터페이스를 구현할 수 있으며, 이를 통해 서로 다른 클래스들 간에 공통의 행동을 강제할 수 있다.
  • 자바는 다중 상속을 지원하지 않지만, 한 클래스가 여러 인터페이스를 구현할 수 있다.

 

interface Animal {
    void sound();
}

class Dog implements Animal {
    public void sound() {
        System.out.println("Woof");
    }
}

class Cat implements Animal {
    public void sound() {
        System.out.println("Meow");
    }
}

 

public class Main {
    public static void main(String[] args) {
        Animal dog = new Dog();
        Animal cat = new Cat();

        dog.sound();
        cat.sound();
    }
}

 

실행결과

Woof
Meow

 

Animal은 인터페이스이고, DogCat 클래스는 이 인터페이스를 구현하여 sound 메소드를 정의

 

 

실행결과로 보는 둘의 차이

 

  • 추상 클래스 예제에서는 공통의 기능인 eat()을 포함하고 있으므로, 이 메소드도 함께 실행
  • 인터페이스 예제에서는 오직 인터페이스에 정의된 sound() 메소드만 구현되므로, eat()과 같은 공통 기능이 없다.

 

 

따라서 추상 클래스는 일부 구현된 메소드를 상속받아 사용할 수 있지만, 인터페이스는 오직 메소드의 시그니처(형태)만 정의하며, 구현은 이를 상속받는 클래스가 모두 해야 합니다.

 

 

추상화의 장점

 

  • 복잡성 감소: 복잡한 시스템의 구현 세부 사항을 숨김으로써, 사용자는 중요한 기능에만 집중
  • 코드 재사용성: 추상화된 클래스나 인터페이스를 통해 다양한 클래스에서 공통된 기능을 정의하고 사용
  • 유지보수 용이성: 코드 수정 시, 추상화된 부분만 수정하면 되므로 유지보수가 쉽다.

 

 

 

반응형