🍎 Backend/JAVA

[java] abstract(추상) vs implements의 비교

밈98 2024. 12. 20. 21:22

1. 추상 클래스란?

* 추상은 실체간의 공통된 특성을 추출해낸 것을 말한다.

  • 추상클래스는 클래스들의 공통적인 필드나 메소드를 추출해서 선언한 클래스를 추상클래스라고 한다.
  • 추상클래스는 실제 클래스의 부모 역할을 한다.
  • 상속해서 공통적인 필드나 메소드를 물려 받을 수 있음
예시
public abstract class Animal {

    public void breath(){
        System.out.println("숨을 쉽니다!");
    }

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


public class Cat extends Animal {
    @Override
    void sound () {
        System.out.println("야옹야옹");
    }
}

public class AnimalExample {
    public static void main (String[] args) {
        Cat cat = new Cat();
        cat.breath();
        cat.sound();

        animalSound(new Cat());
    }
    public static void animalSound (Animal animal) {
        animal.sound();
    }
}

 

2. 인터페이스의 역할

  • 인터페이스는 사전적으로 두 장치를 연결하는 접속기를 뜻한다.
  • 객체를 연결하는 역할
  • 인터페이스로 다형성 구현 가능함
public interface RemoteControl {
    int MAX_VOLUME = 10;
    int MIN_VOLUME = 0;
    public void turnOn();
    public void turnOff();
    public void setVolume(int volume);

    default void setMute(boolean mute){
        if(mute){
            System.out.printf("무음 처리합니다");
            setVolume(MIN_VOLUME);
        }else {
            System.out.println("무음 해제합니다");
        }
    }
    static void changeBattery() {
        System.out.println("리모콘 건전지를 바꿉니다");
    }

}
public class Television implements RemoteControl {
    private int volume;

    @Override
    public void turnOn(){
        System.out.println("티비를 켠다");
    }

    @Override
    public void turnOff () {
        System.out.println("TV를 끕니다");
    }

    @Override
    public void setVolume (int volume) {
        if(volume>RemoteControl.MAX_VOLUME) this.volume = RemoteControl.MAX_VOLUME;
        else if(volume<RemoteControl.MIN_VOLUME) this.volume = RemoteControl.MIN_VOLUME;
        else {
            this.volume = volume;
        }
        System.out.println("현재 티비 볼륨: " + this.volume);
    }
}

 

3. 강제 타입 변환

public class CastingExample {
    public static void main (String[] args) {
        Vehicle vehicle = new Bus();
        vehicle.run();

        Bus bus = (Bus) vehicle;
        bus.run();
        bus.checkFare();
    }
}
public interface Vehicle {
    void run();
}
public class Bus implements Vehicle {

    @Override
    public void run () {
        System.out.println("버스가 달립니다");
    }
    public void checkFare(){
        System.out.println("승차요금을 체크합니다");
    }
}

출력 : 

버스가 달립니다
버스가 달립니다
승차요금을 체크합니다

 

4. 다형성

  • 다형성이란 사용 방법은 동일하지만 다양한 결과가 나오는 성질
메소드 재정의 + 자동 타입 변환 -> 다형성
  • 인터페이스의 추상 메소드는 구현 클래스에서 재정의를 해야함
  • 재정의되는 내용은 구현 클래스마다 다름

'🍎 Backend > JAVA' 카테고리의 다른 글

[JAVA] 람다(Lambda)와 스트림(Stream)  (0) 2025.01.09
[JAVA] CS면접대비 자바와 객체지향 정리  (0) 2025.01.02
[JAVA] 해시 맵  (0) 2023.12.11
[JAVA] 메모리 관리 & call by value  (0) 2023.12.08
[Java] 컴파일 과정  (0) 2023.12.04