Java/JAVA 100 문제 풀이

자바 part.4 문제풀이 - 추상 클래스(Abstract Class)개념, 필요

진이최고다 2023. 7. 26. 14:49

추상 클래스란 무엇인가?

  • 추상 클래스 (abstract class)는 하나 이상의 추상 메서드(구현되지 않는 메서드)를 포함하는 클래스를 말한다. 추상 클래스는 'abstract' 키워드를 사용하여 선언되며, 객체를 직접 생성할 수 없다. 대신, 추상 클래스는 상속을 통해 하위 클래스(sub class)에서 확장되며, 추상 메서드는 하위 클래스에서 반드시 구현해야 한다.

추상 클래스와 일반 클래스의 차이점

  • 일반 클래스는 모든 메서드가 구현되어 있어야 하며, 객체를 직접 생성할 수 있다. 반면, 추상 클래스는 하나 이상 메서드가 구현되지 않아도 된다. 그리고 객체를 직접 생성할 수 없다. 추상 클래스는 상속을 통해 자식 클래스에서 메서드가 구현되며 사용된다.

추상 클래스의 역할, 필요성

  • 추상 클래스는 상속을 통해 코드를 재사용하고, 하위 클래스에게 특정 메서드를 구현하도록 강제하는 역할을 한다. 이는 프로그램의 확장성을 높이고, 유지보수를 용이하게 만든다.

추상 클래스 사용방법

  • 추상 클래스를 사용하는 방법은 상속을 통한 확장이다. 하위 클래스에서 추상 클래스를 상속받으면, 추상 클래스에서 정의된 추상 메서드를 오버라이딩(Overriding) 재정의 하여 구현해야 한다.

추상 클래스의 추상메서드는 꼭 오버라이딩해야 하는가?

  • 추상 클래스를 상속받는 하위 클래스는 반드시 추상메서드를 오버라딩하여 구현해야 한다.

추상 메서드는 추상 클래스에서 구현해야 하는가?

  • 추상 메서드가 포함된 클래스는 반드시 추상 클래스여야 한다. 추상 메서드는 구현이 없는 메서드이기 때문에, 해당 클래스는 객체를 생성할 수 없는 추상 클래스로 선언되어야 한다.

추상 클래스를 만들려면 abstract를 꼭 써야 하는가?

  • 자바에서는 추상 클래스를 선언할 때 반드시 'abstract' 키워드를 사용해야 한다. 이 키워드가 없으면, 클래스는 일반 클래스로 취급되어 객체 생성이 가능해지고, 모든 메서드를 구현해야 하는 요구사항이 생긴다.

예제
// 추상 클래스 선언
abstract class Animal{
	//field
	private String name;
	
	//Constructor
	public Animal(String name) {
		this.name = name;
	}
	
	//Method
	public String getName() {
		return name;
	}
	
	//Abstract Method
	public abstract void makeSound();
}

// 추상 클래스를 상속받는 Dog 클래스 선언
class Dog extends Animal{	
	//Constructor
	public Dog(String name) {
		super(name);
	}
	
	//Abstract Method 구현
	@Override
	public void makeSound() {
		System.out.println("멍멍!");
	}
}

// 추상 클래스를 상속받는 Cat 클래스 선언
class Cat extends Animal{
	//Constructor
	public Cat(String name) {
		super(name);
	}
	
	//Abstract Method 구현
	@Override
	public void makeSound() {
		System.out.println("야옹!");
	}
}

public class oop_AbstractClassMethod {
	public static void main(String[] args) {	
		Dog dog = new Dog("강아지");
		Cat cat = new Cat("고양이");
		
		System.out.println(dog.getName() + "는 소리를 내면 이렇게 합니다.");
		dog.makeSound();
		System.out.println(cat.getName() + "는 소리를 내면 이렇게 합니다.");
		cat.makeSound();
	}
}
강아지는 소리를 내면 이렇게 합니다.
멍멍!
고양이는 소리를 내면 이렇게 합니다.
야옹!

이 코드에서 Animal은 추상 클래스로서, makeSound() 라는 추상 메서드를 포함하고 있다. 이를 상속받는 Dog, Cat 클래스는 각각 makeSound()를 오버라이딩하여 구현하였다. 이를 통해 각 클래스는 makeSound()를 다르게 구현함으로써, 동일한 메서드 호출에 대해 다른 동작을 하게 된다.