1일1배움/Java

[23/07/16] 추상메서드와 인터페이스의 차이

kim chan jin 2023. 7. 16. 19:19

 

참고하기

https://cjkimhello97.tistory.com/28

 

23/01/19 [interface는 다중상속이 가능하지만 class는 그렇지 않은 이유?]

만약 B인터페이스와 C인터페이스에 이름이 동일하고 반환타입이 동일한 x메서드가 존재한다고 가정해보자. A클래스가 B인터페이스와 C인터페이스를 implements하고 x메서드를 오버라이딩한다면 과

cjkimhello97.tistory.com

참고하기

https://cjkimhello97.tistory.com/68

 

23/03/14 [추상클래스에 생성자를 만드는 이유?]

추상클래스는 인스턴스를 만들지 못한다. 추상클래스는 미완성 설계도이기 때문이다. 다시 말해, 추상클래스에는 일반 메서드 뿐만 아니라 추상 메서드도 존재하기 때문이다. 추상클래스는 미

cjkimhello97.tistory.com

 

구현 방식

추상 클래스는 클래스입니다. 클래스가 일부 메서드를 구현하고 일부 메서드를 추상 메서드로 선언할 수 있습니다. 추상 클래스는 인스턴스화할 수 없으며, 추상 메서드를 포함하는 클래스의 일반적인 부모 역할을 합니다. 추상 클래스는 다른 클래스에서 확장(상속)되어 사용될 목적으로 설계됩니다.
인터페이스는 일련의 추상 메서드와 상수를 정의한 것입니다. 인터페이스는 클래스에서 구현(implement)할 수 있으며, 클래스가 여러 인터페이스를 구현할 수 있습니다. 인터페이스는 다른 클래스들이 특정 동작을 보장하기 위한 규약(계약)을 제공합니다. 인터페이스는 구현할 메서드의 형식을 정의하고, 클래스가 해당 메서드를 구현하도록 강제합니다.

 

상속

추상 클래스는 단일 상속만 허용됩니다. 즉, 클래스는 하나의 추상 클래스만 확장할 수 있습니다. 추상 클래스를 상속받은 클래스는 추상 메서드를 구현하거나, 다시 추상 클래스로 선언될 수 있습니다.
인터페이스는 다중 상속을 지원합니다. 클래스는 여러 개의 인터페이스를 구현할 수 있으며, 다중 상속을 통해 다양한 동작을 동시에 지원할 수 있습니다.

 

목적

추상 클래스는 클래스들 간의 공통된 동작 및 속성을 추상화하고, 코드의 재사용성을 높이기 위해 사용됩니다. 추상 클래스는 클래스들 사이에 계층 구조를 형성하고, 부모 클래스의 일부 기능을 재정의하거나 확장할 수 있습니다.
인터페이스는 다른 클래스들이 어떤 동작을 보장하기 위한 규약을 제공합니다. 인터페이스를 구현하는 클래스는 해당 인터페이스의 메서드를 모두 구현해야 하므로, 클래스 간의 일관된 동작을 보장하고, 다형성을 구현하는 데 사용됩니다.

 

 

구조

추상 클래스는 일반 클래스처럼 필드, 생성자, 메서드 등을 포함할 수 있습니다. 추상 클래스는 일부 메서드를 구현하거나 구현하지 않고 추상 메서드로 선언할 수 있습니다.
인터페이스는 추상 메서드와 상수만을 가질 수 있습니다. 일반적으로 인터페이스에서는 상태를 나타내는 필드나 일반 메서드를 정의하지 않습니다.

 

의문점

추상클래스는 인스턴스를 만들 수 없음에도 불구하고 생성자를 왜 가질 수 있는 것이야?

GPT

추상 클래스는 인스턴스화할 수 없지만, 생성자를 가질 수 있는 이유는 주로 두 가지 이유 때문입니다.

하위 클래스의 인스턴스화를 지원하기 위해:

추상 클래스는 상속을 통해 구체적인 클래스가 확장되어 사용됩니다. 하위 클래스에서 추상 클래스의 생성자를 호출하여 하위 클래스의 객체를 인스턴스화할 수 있습니다. 이를 통해 추상 클래스는 하위 클래스의 공통된 초기화 로직을 제공하고, 하위 클래스의 생성자에서 해당 초기화 로직을 사용할 수 있게 합니다.

추상 클래스 내에서 필드 초기화 및 인스턴스 변수 설정:

추상 클래스는 하위 클래스에서 상속받은 필드나 인스턴스 변수를 초기화하기 위해 생성자를 사용할 수 있습니다. 추상 클래스 내에서 선언된 필드나 인스턴스 변수의 초기 값을 설정하고, 이를 하위 클래스에서 재사용할 수 있습니다. 생성자를 통해 필드를 초기화하는 것은 객체의 상태를 설정하는 데 도움이 됩니다.
그러나 주의해야 할 점은 추상 클래스의 생성자가 호출될 때, 해당 추상 클래스의 인스턴스가 생성되는 것이 아니라 하위 클래스의 인스턴스가 생성된다는 점입니다. 추상 클래스는 직접적으로 인스턴스화할 수 없으므로, 추상 클래스의 생성자가 호출되면 하위 클래스의 생성자가 실행되어야 합니다.

추상 클래스의 생성자에 대한 주의 사항:

추상 클래스의 생성자는 하위 클래스에서 접근 가능해야 합니다. 일반적으로 생성자는 protected 접근 제어자를 사용하여 선언됩니다.
추상 클래스의 생성자는 하위 클래스에서 오버라이딩될 수 없습니다. 하위 클래스는 추상 클래스의 생성자를 호출하고, 그 후에 고유한 초기화 로직을 수행하는 생성자를 구현해야 합니다.
추상 클래스의 생성자는 주로 상속과 필드 초기화를 위한 목적으로 사용되며, 추상 클래스를 직접적으로 인스턴스화하는 것은 허용되지 않습니다. 추상 클래스를 상속하여 하위 클래스를 구현하고, 하위 클래스의 객체를 인스턴스화하여 사용하는 것이 일반적인 사용 방식입니다.