추상클래스와 인터페이스
1. 추상클래스
1-1. 추상클래스의 정의와 특징
- 추상 클래스는 하나 이상의 추상 메서드를 포함하는 클래스입니다.
- 추상 메서드는 메서드 선언만 있고 구현이 없는 메서드입니다.
- 추상 클래스는 직접적으로 인스턴스화할 수 없으며, 상속을 통해 사용됩니다.
- 추상 클래스는 추상 메서드 외에도 일반 메서드와 인스턴스 변수를 포함할 수 있습니다.
1-2. 추상 클래스의 목적과 활용 예시
- 추상 클래스의 주요 목적은 공통된 기능과 속성을 가진 클래스들을 모델링하고 코드 재사용성을 높이는 것입니다.
- 추상 클래스는 다른 클래스들에게 공통된 메서드와 변수를 상속해주기 위해 사용됩니다.
- 예시로, 동물을 모델링하는 추상 클래스인 "Animal" 클래스를 생성할 수 있습니다. "Animal" 클래스는 공통된 특성과 동작(메서드)을 가지며, 실제 동물들의 구체적인 클래스(하위 클래스)가 이를 상속받아 구현할 수 있습니다.
1-3. 추상 메서드와 일반 메서드의 차이 설명
- 추상 메서드는 메서드의 선언만 있고 구현이 없는 메서드입니다.
- 일반 메서드는 메서드의 선언과 구현이 모두 포함되어 있습니다.
- 추상 클래스는 추상 메서드를 하나 이상 가지고 있어야 하지만, 일반 메서드도 포함할 수 있습니다.
- 추상 메서드는 하위 클래스에서 반드시 구현되어야 합니다. 반면, 일반 메서드는 이미 구현되어 있어 하위 클래스에서 추가 구현이 필요 없습니다.
- 추상 메서드는 하위 클래스에서 다양한 구현을 제공하고, 일반 메서드는 공통된 동작을 제공합니다.
1-4. 추상 클래스를 상속하는 방법과 규칙 설명
- 추상 클래스를 상속받기 위해서는 하위 클래스에서 "extends" 키워드를 사용하여 상속을 선언해야 합니다.
- 자식 클래스는 추상 클래스의 모든 추상 메서드를 구현해야 합니다. 그렇지 않으면 자식 클래스도 추상 클래스로 선언되어야 합니다.
- 추상 클래스의 일반 메서드는 그대로 상속받아 사용할 수 있으며, 필요에 따라 자식 클래스에서 재정의할 수 있습니다.
- 하나의 클래스는 추상 클래스와 동시에 인터페이스를 상속받을 수 있습니다.
2. 인터페이스
2-1. 인터페이스의 정의와 특징
- 인터페이스는 추상 메서드, 상수 및 디폴트 메서드로 이루어진 참조 타입입니다.
- 추상 클래스와 달리, 추상 메서드만을 가지며 일반 메서드의 구현은 포함하지 않습니다.
- 인터페이스는 클래스가 어떤 메서드를 제공하고 어떤 상수를 가지는지 정의하는 역할을 합니다.
- 인터페이스는 "interface" 키워드를 사용하여 정의됩니다.
2-2. 인터페이스의 목적과 장점
- 인터페이스의 주요 목적은 클래스 간의 명세를 정의하는 것입니다. 이는 클래스가 특정한 메서드를 구현하도록 보장합니다.
- 인터페이스는 코드의 유연성과 재사용성을 높여줍니다. 클래스가 여러 개의 인터페이스를 구현할 수 있으므로 다양한 기능을 가진 객체를 생성할 수 있습니다.
- 인터페이스는 클래스 간의 결합도를 낮추고, 코드의 의존성을 관리하기 쉽게 해줍니다.
- 인터페이스는 다른 개발자와의 협업 시 계약을 통해 메서드의 사용법과 의도를 명확히 정의할 수 있습니다.
2-3. 다중 상속과 인터페이스의 관계 설명
- 자바에서는 클래스는 다중 상속을 지원하지 않지만, 인터페이스는 다중 상속이 가능합니다.
- 클래스는 단일 클래스로부터 상속을 받을 수 있지만, 인터페이스는 여러 개의 인터페이스로부터 상속을 받을 수 있습니다.
- 이를 통해 클래스는 여러 개의 인터페이스에서 정의된 메서드를 구현하여 다양한 기능을 수행할 수 있습니다.
- 인터페이스 간의 다중 상속으로 인해 충돌하는 메서드 구현이 있을 경우, 해당 클래스에서 해당 메서드를 재정의해야 합니다.
2-4. 인터페이스를 구현하는 방법
- 인터페이스를 구현하기 위해서는 클래스에서 "implements" 키워드를 사용하여 구현을 선언해야 합니다.
- 클래스에서는 인터페이스에서 정의한 모든 추상 메서드를 구현해야 합니다.
- 인터페이스에서 선언된 모든 상수는 자동으로 구현 클래스로 상속됩니다.
- 인터페이스를 구현하는 클래스는 인터페이스의 메서드를 재정의하여 필요한 기능을 구현해야 합니다.
- 하나의 클래스는 여러 개의 인터페이스를 구현할 수 있습니다.
2-5. 추상 클래스와 인터페이스의 공통점과 차이점 ** 중요
공통점:
- 추상 클래스와 인터페이스 모두 추상 메서드를 포함할 수 있습니다.
- 둘 다 상속을 통해 기능을 확장하고, 다형성을 지원합니다.
- 클래스들 간의 관련성을 나타내는 용도로 사용될 수 있습니다.
차이점:***
- 추상 클래스는 추상 메서드 외에도 일반 메서드와 인스턴스 변수를 포함할 수 있습니다. 반면, 인터페이스는 추상 메서드, 디폴트 메서드, 정적 메서드, 상수만을 가질 수 있습니다.
- 클래스는 단일 상속만 가능하지만, 인터페이스는 다중 상속을 지원합니다.
- 추상 클래스는 "extends" 키워드를 사용하여 상속을 선언하고, 인터페이스는 "implements" 키워드를 사용하여 구현을 선언합니다.
- 클래스가 추상 클래스를 상속받을 때는 "is-a" 관계를 갖습니다. 반면, 인터페이스를 구현할 때는 "has-a" 관계를 갖습니다.
IS-A
notebook is a computer (o)
laptop is a desktop (X)
computer 라는 공통 속성이 있고 (부모클래스) laptop, notebook 는 공통 속성을 각각 상속받습니다.
Has-A
HAS-A 는 특정기능을 사용하고 싶을때 자주 사용합니다.
차로 예를 들자면 차는 엔진과 ,어떤 것들… 을 가지고 있다. 즉 기능을 포함시키고 싶을때 사용 하는 것이 HAS-A 입니다.
2-6. 상황에 따른 추상 클래스와 인터페이스의 선택 기준
- 추상 클래스: 클래스들 간에 공통된 구현을 가지는 경우, 기본적인 구현을 제공하고 하위 클래스들이 이를 상속받아 확장해야 하는 경우에 사용합니다. 또한, 추상 클래스는 단일 상속을 지원하므로 클래스의 계층 구조가 필요한 경우에 적합합니다.
- 인터페이스: 다양한 클래스들 간에 공통된 동작을 정의하고, 다중 상속이 필요한 경우에 사용합니다. 또한, 클래스들 간의 관계를 약결합하고 유연성을 갖추어야 하는 경우에 적합합니다.
'Java' 카테고리의 다른 글
[Java] 생성자 this(), 참조변수 this (0) | 2023.05.31 |
---|---|
[Java] 오버로딩, 오버라이딩 (0) | 2023.05.30 |
[Java] static 메서드와 인스턴스 메서드 (0) | 2023.05.30 |
[Java] 예외처리 (0) | 2023.05.30 |
[Java] 컬렉션과 제네릭 (0) | 2023.05.30 |