여니의 프로그래밍 study/Java

[Java] 추상클래스 및 인터페이스

여니's 2023. 5. 28. 16:34

1. 추상클래스

: 해당 클래스에는 추상 메서드가 있으니

상속을 통해 구현해주어야한다. 

 

추상클래스는 미완성 설계도여서

인스턴스를 생성할 수 없다.

 

즉, 추상 클래스는

상속을 통해 자손클래스에 의해서만 완성될 수 있다. 

 

선언부만 작성하고 구현부는 작성하지 않은채로 남겨둔 것이 추상 메서드. 

abstract class 클래스명{
	...
}


// 예시
abstract class Player{
	abstract void play(int pos);
    abstract void stop();
}

class AudioPlayer extends Player{
	void play(int pos) { ... }
    void stop() {...}
}

abstract class AbstractPlayer extends Player{
	void play(int pos) {...}
}

 

메서드 작성 시, 구현부보다 더 중요한 부분이 선언부이다.


2. 인터페이스

: 일종의 추상클래스이다. 

구현된 것은 아무것도 없고 밑그림만 그려져있는 기본 설계도라고 할 수 있다.

 

추상클래스와 달리 몸통을 갖춘 일반 메서드 또는 멤버변수를 구성원으로 가질 수 없다.

오직 추상 메서드와 상수만을 멤버로 가질 수 있다. 

 

interface 인터페이스이름 {
	public static final 타입 상수이름 = 값;
    public abstract 메서드이름(매개변수목록);
}

 

> 모든 멤버변수는 public static final이어야 하고 생략 가능

> 모든 메서드는 public abstract이며 생략 가능

 

인터페이스는 인터페이스로부터만 상속받을 수 있고

클래스와는 다르게 다중 상속이 가능하다.

(여러 개의 인터페이스로부터 상속 받는 것이 가능하다)

 

 

인터페이스 구현

class 클래스이름 implements 인터페이스이름 {
	// 인터페이스에 정의된 추상메서드를 구현해야함.
    
}

 

 

리턴 타입이 인터페이스라는 것은

메서드가 해당 인터페이스를 구현한 클래스의 인스턴스를 반환한다는 것을 의미함.

(외워야함)

 

 

 

인터페이스 I는 실제 구현 내용(클래스 B)을 감싸고 있는 껍데기이며

클래스 A는 껍데기 안에 어떤 알맹이(클래스)가 들어있는지 몰라도 된다.


디폴트 메서드 및 static 메서드

: 추상 메서드의 기본적인 구현을 제공하는 메서드

interface MyInterface{
	void move(); // 추상메서드
    default void newMove(); // 디폴트 메서드
    static void newMove2(); // static 메서드
}

 

 

 


3. 추상클래스와 인터페이스의 차이점

 

추상 클래스는 하위 클래스에 의해 상속되고 확장되며 추상 메서드를 구현해야 합니다. 

반면 인터페이스는 모든 클래스에서 구현할 수 있으

며 인터페이스에 지정된 모든 메서드를 구현하여 클래스가 수행할 계약을 설정합니다. 

 

주요 차이점은 추상 클래스는 상속에 초점을 맞추고 부분 구현을 제공하는 반면 

인터페이스는 구현할 관련되지 않은 클래스에 대한 공통 메서드 세트를 정의하는 데 초점을 맞춥니다.


참고출처 : java의 정석, chatGPT