울음참고 개발공부
Published 2023. 4. 23. 20:39
Java | 추상클래스 vs 인터페이스 Java
728x90

추상클래스(Abstract class)

미완성 설계도
추상 메서드를 선언하여 상속을 통해 자손 클래스에서 완성하도록 유도하는 클래스

 

[ 특징 ]

 

  • 추상 메서드를 하나 이상 포함하고 있다.
  • 추상 클래스는 추상 메서드 뿐만 아니라 생성자,필드,일반 메서드도 포함할 수 있다. 
  • 상속을 위한 클래스이기 때문에 따로 객체를 생성할 수 없다.
  • 다중상속이 불가능하다.

 

 

[ 예시 ]

public abstract class Computer {
    public abstract void display();
    public abstract void typing();

    public void turnOff() {
        system.out.println("전원 off");
    }
}

Computer 라는 추상 클래스 내에는 추상 메서드 display() 와 typing() 가 존재한다

 

 

추상 메서드

 

메서드의 바디부분인 구현부 없이, 선언만 존재

추상 메서드를 포함하는 클래스는 추상 클래스가 되어야 한다.

 

 

추상 클래스의 상속 extends

public class DeskTop extends Computer {}

 

[ 문제 ]

 

부모 클래스 Computer 에서 자식 클래스 DeskTop 이 상속을 받고자 한다.

어떻게 해야할까?

 

 

방법 1 ) 자식 클래스 또한 추상 클래스로 만들어준다

public abstract class DeskTop extends Computer {}

 

 

방법 2) 추상 메서드를 일반 메서드로 재정의 한다 -> 오버라이드(Override)

public class DeskTop extends Computer{

    @Override
    public void display() {
        system.out.println("Desktop display");
    }

    @Overrid
    public void typing() {
        system.out.println("Desktop typing");
    }
}

 

 

 

 

인터페이스(Interface)

기본 설계도
다른 클래스를 작성하는데 필요한 클래스

 

 

[ 특징 ]

 

  • 추상클래스와 마찬가지로 다른 클래스를 작성하는데 도움을 준다.
  • 인터페이스 내의 메소드는 모두 추상 메소드로만 이루어져있다.
  • 추상클래스와 다르게 다중상속이 가능하다.

 

 

? 여기서 다중 상속이란?

 

자식 클래스가 여러 부모 클래스로부터 상속받는 것을 의미

이렇게 되면 다양한 동작을 수행할 수는 있지만 메서드 출처의 모호성 등 여러 문제가 발생할 수 있어,

java 에서는 다중 상속을 지원하지 않는다. 

 

 

[ 예시 ]

 

public interface Switch {
	
    // 인터페이스의 모든 메서드는 추상메서드이다.
	public void push(){};
    
    // 인터페이스에서 일반 메서드를 정의하는 방법 -> default 키워드 
    public default void pop(){}
    
    // 그 외, 생성자나 변수 선언은 불가능
    
    // 상수 선언 가능
    public static final String name = "switch";
}

 

 

 

추상클래스와 인터페이스의 공통점

 

  • new 연산자로 인스턴스 생성이 불가능하다
  • 사용하기 위해서는 하위클래스에서 확장하여 구현해야한다.

 

 

 

 

 

[ 출처 ]

https://blog.naver.com/obndo8539

 

개발일기 : 네이버 블로그

개발자가 되고픈 코린이

blog.naver.com

 

728x90
profile

울음참고 개발공부

@메각이

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!