본문 바로가기

반응형

이번 글에서는 추상 클래스 내 추상 메서드를 정의하고,
자식 클래스에서 이를 오버라이딩하여 개별 동작을 구현하는 방법을 학습합니다.
이를 통해 공통 인터페이스는 유지하면서,
각 객체가 자신만의 동작을 정의할 수 있게 됩니다.


📦 추상 클래스 (Animal.java)

package ch07.sec10.exam02;

public abstract class Animal {
	public void breathe() {
		System.out.println("숨을 쉽니다.");
	}

	public abstract void sound(); // 추상 메서드 (몸체 없음)
}

📦 자식 클래스 – 강아지 (Dog.java)

package ch07.sec10.exam02;

public class Dog extends Animal {
	public void sound() {
		System.out.println("멍멍");
	}
}

📦 자식 클래스 – 고양이 (Cat.java)

package ch07.sec10.exam02;

public class Cat extends Animal {
	public void sound() {
		System.out.println("야옹");
	}
}

📌 실행 클래스 (AbstractMethodExample.java)

package ch07.sec10.exam02;

public class AbstractMethodExample {
	public static void main(String[] args) {
		Dog dog = new Dog();
		Cat cat = new Cat();

		dog.sound(); // 멍멍
		cat.sound(); // 야옹

		animalSound(new Dog());
		animalSound(new Cat());
	}

	public static void animalSound(Animal animal) {
		animal.sound(); // 다형성 활용
	}
}

🖥 실행 결과

멍멍
야옹
멍멍
야옹

💬 코드 설명

  • Animal 클래스는 추상 클래스이며,
    sound() 메서드는 추상 메서드(몸체 없음)로 선언됨
  • 자식 클래스인 Dog, Cat은 반드시 sound()를 오버라이딩해야 함
    → 하지 않으면 컴파일 오류 발생
  • animalSound(Animal animal) 메서드는
    부모 타입으로 자식 객체를 받아 다형성을 적용한 예시

📌 간단 정리

클래스 오버라이딩한 메서드 동작
Dog sound() → 멍멍 출력
Cat sound() → 야옹 출력

💡 포인트 정리

  • 추상 메서드는 자식 클래스가 반드시 구현해야 함
  • 추상 클래스는 공통 동작(breathe) + 개별 동작(sound) 설계에 적합
  • animalSound() 메서드는 다형성을 이용하여 다양한 객체 처리
  • 추상 클래스는 템플릿 설계로 자주 사용됨

📌 정리하자면,
추상 메서드를 통해 강제적으로 메서드를 구현하게 만들고,
다형성을 통해 확장성과 유연성을 확보할 수 있는 구조를 만들 수 있습니다.

댓글