자바에서 추상 클래스(Abstract Class)란 무엇인가요?
_____A1: 추상 클래스는 하나 이상의 추상 메서드(구현되지 않은 메서드)를 포함할 수 있는 클래스입니다. 직접 객체를 생성할 수 없으며, 서브클래스에서 상속받아 구현하도록 설계된 클래스입니다.
Q2: 추상 클래스와 일반 클래스의 차이점은 무엇인가요?
A2: 일반 클래스는 인스턴스화가 가능하며 모든 메서드가 구현되어 있어야 합니다. 반면 추상 클래스는 인스턴스화가 불가능하며, 하나 이상의 추상 메서드를 포함하여 일부 메서드 구현을 서브클래스에 의존합니다.
Q3: 추상 클래스는 왜 사용하나요?
A3: 공통 기능을 공유하면서 서브클래스에 특정 기능 구현을 강제하기 위해 사용합니다. 즉, 공통의 뼈대를 제공하고, 세부 구현은 하위 클래스가 다르게 만들도록 설계할 때 유용합니다.
Q4: 추상 클래스는 어떻게 선언하나요?
A4: 클래스 선언에 `abstract` 키워드를 사용합니다.
```java
public abstract class Animal {
public abstract void makeSound(); // 추상 메서드
public void sleep() {
System.out.println("Sleeping...");
}
}
Q5: 추상 클래스 내에 추상 메서드가 없어도 되나요?
A5: 네, 추상 메서드가 없어도 추상 클래스로 선언할 수 있습니다. 다만, 주로 확장용인 클래스임을 명시하기 위해 사용합니다.
Q6: 추상 클래스는 인스턴스화 할 수 있나요?
A6: 아니요, 추상 클래스는 직접 객체를 생성할 수 없습니다. 반드시 서브클래스에서 상속받아 구체적인 클래스로 만들어야 합니다.
Q7: 추상 클래스 상속 시 주의할 점은?
A7: 서브클래스는 반드시 모든 추상 메서드를 구현해야 합니다. 그렇지 않으면 서브클래스도 추상 클래스가 되어야 합니다.
Q8: 추상 클래스와 인터페이스의 차이는 무엇인가요?
A8: 추상 클래스는 상태(필드)를 가질 수 있고, 일부 메서드는 구현할 수 있습니다. 인터페이스는 기본적으로 메서드 시그니처만 선언하며, 자바 8부터는 default 메서드를 가질 수 있지만 상태는 가질 수 없습니다. 또한, 클래스는 단일 상속만 가능하지만 인터페이스는 다중 구현이 가능합니다.
Q9: 추상 클래스의 생성자는 호출되나요?
A9: 예, 추상 클래스도 생성자를 가질 수 있으며, 서브클래스 객체 생성 시 추상 클래스 생성자는 자동으로 호출됩니다.
Q10: 언제 추상 클래스 대신 인터페이스를 사용해야 하나요?
A10: 클래스 간에 완전한 구현이 불필요하고 단지 규격(옵션)을 정의할 때는 인터페이스를 사용하고, 공통적인 구현과 상태를 공유할 필요가 있을 때는 추상 클래스를 사용하는 것이 일반적입니다.
추상 클래스는 인스턴스를 생성할 수 없는 클래스이며, 주로 다른 클래스들이 상속받아 사용할 수 있는 기본적인 틀을 제공하는 역할을 합니다.
추상 클래스는 일반 클래스와 달리 하나 이상의 추상 메서드를 포함할 수 있으며, 이 메서드는 구현이 없는 메서드로, 서브 클래스에서 반드시 구현해야 합니다.
추상 클래스의 특징1. 인스턴스화 불가 : 추상 클래스는 직접 인스턴스를 생성할 수 없습니다.
즉, `new` 키워드를 사용하여 객체를 만들 수 없습니다.
이는 추상 클래스가 완전한 형태의 클래스가 아니기 때문입니다.
2. 추상 메서드 : 추상 클래스는 하나 이상의 추상 메서드를 가질 수 있습니다.
추상 메서드는 메서드의 선언만 있고, 본체(구현)는 없습니다.
서브 클래스는 이 메서드를 반드시 구현해야 하며, 이를 통해 서브 클래스가 특정 기능을 제공하도록 강제할 수 있습니다.
3. 일반 메서드와 필드 : 추상 클래스는 일반 메서드와 필드를 가질 수 있습니다.
즉, 추상 클래스는 추상 메서드뿐만 아니라 구현된 메서드와 상태(변수)를 포함할 수 있습니다.
이를 통해 서브 클래스에서 공통적으로 사용할 수 있는 기능을 제공할 수 있습니다.
4. 상속 : 추상 클래스는 다른 클래스에 의해 상속될 수 있습니다.
서브 클래스는 추상 클래스를 상속받아 그 기능을 확장하거나 구현할 수 있습니다.
추상 클래스의 사용 예추상 클래스는 주로 다음과 같은 상황에서 사용됩니다:- 공통 기능 제공 : 여러 클래스에서 공통적으로 사용되는 메서드나 필드를 정의하여 코드 중복을 줄이고, 유지보수를 용이하게 합니다.
- 강제성 부여 : 서브 클래스에서 특정 메서드를 반드시 구현하도록 강제함으로써, 일관된 인터페이스를 유지할 수 있습니다.
- 다형성 구현 : 추상 클래스를 통해 다양한 서브 클래스를 다룰 수 있는 통합된 인터페이스를 제공하여, 코드의 유연성을 높입니다.
예제 코드아래는 추상 클래스와 이를 상속받는 서브 클래스의 간단한 예제입니다.
```java// 추상 클래스 정의abstract class Animal { // 추상 메서드 abstract void sound(); // 일반 메서드 void eat() { System.out.println("This animal eats food."); }}// 서브 클래스 1class Dog extends Animal { @Override void sound() { System.out.println("Woof"); }}// 서브 클래스 2class Cat extends Animal { @Override void sound() { System.out.println("Meow"); }}// 메인 클래스public class Main { public static void main(String[] args) { Animal dog = new Dog(); dog.sound(); // 출력: Woof dog.eat(); // 출력: This animal eats food. Animal cat = new Cat(); cat.sound(); // 출력: Meow cat.eat(); // 출력: This animal eats food. }}```위의 예제에서 `Animal`은 추상 클래스이며, `sound()`라는 추상 메서드를 가지고 있습니다.
`Dog`와 `Cat` 클래스는 `Animal` 클래스를 상속받아 `sound()` 메서드를 구현합니다.
이를 통해 각 동물의 소리를 다르게 정의할 수 있습니다.
결론추상 클래스는 객체 지향 프로그래밍에서 중요한 역할을 하며, 코드의 재사용성과 유지보수성을 높이는 데 기여합니다.
이를 통해 개발자는 보다 구조적이고 체계적인 코드를 작성할 수 있으며, 다양한 객체를 다룰 수 있는 유연한 시스템을 구축할 수 있습니다.
작성자:
김하린 [비회원]
| 작성일자: 1년 전
2024-09-05 03:56:56
조회수: 204 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 204 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.