본문 바로가기

반응형

이번 글에서는 자바의 추상 클래스(Abstract Class)에 대해 학습합니다.
공통된 속성과 기능은 추상 클래스에 정의하고,
객체는 직접 생성할 수 없으며, 자식 클래스에서 기능을 완성하여 사용하게 됩니다.


📦 추상 클래스 (Phone.java)

package ch07.sec10.exam01;

public abstract class Phone {
	String owner;

	Phone(String owner) {
		this.owner = owner;
	}

	void turnOn() {
		System.out.println("폰 전원을 켭니다.");
	}

	void turnOff() {
		System.out.println("폰 전원을 끕니다.");
	}
}

📦 자식 클래스 (SmartPhone.java)

package ch07.sec10.exam01;

public class SmartPhone extends Phone {
	SmartPhone(String owner) {
		super(owner);
	}

	void internetSearch() {
		System.out.println("인터넷 검색을 합니다.");
	}
}

📌 실행 클래스 (PhoneExample.java)

package ch07.sec10.exam01;

public class PhoneExample {
	public static void main(String[] args) {
		// Phone phone = new Phone(); // (X) 추상 클래스는 객체 생성 불가

		SmartPhone sp = new SmartPhone("홍길동");
		sp.turnOn();
		sp.internetSearch();
		sp.turnOff();
	}
}

💬 코드 설명

  • Phone 클래스는 abstract 키워드가 붙은 추상 클래스
    • 생성자와 일반 메서드를 가질 수 있음
    • 하지만 객체를 직접 생성할 수 없음
  • SmartPhone 클래스는 Phone을 상속받은 자식 클래스
    • 생성자를 통해 owner 값 초기화
    • 추가 기능 internetSearch() 정의
  • PhoneExample에서는 Phone은 생성 불가
    • 대신 SmartPhone 객체를 생성하여 상속받은 메서드 사용

💻 실행 결과

폰 전원을 켭니다.
인터넷 검색을 합니다.
폰 전원을 끕니다.

📌 간단 정리

추상 클래스 특징 설명
abstract 키워드 클래스 앞에 붙여 선언
객체 생성 불가 new로 인스턴스 생성 불가
생성자 존재 가능 자식 클래스에서 super()로 호출
상속 필수 자식 클래스에서 사용 가능
일반 메서드 정의 가능 추상 메서드 없이도 추상 클래스 사용 가능

💡 포인트 정리

  • 추상 클래스는 공통 기능을 미리 정의하거나,
    일부만 구현하고 나머지는 자식 클래스에게 맡기는 구조
  • 객체 생성은 불가능하지만, 상속을 통해 자식 클래스에서 사용 가능
  • 공통 기능은 그대로 상속하고, 필요한 기능은 자식 클래스에서 추가하거나 재정의
  • 다형성 + 템플릿 설계 시 매우 유용하게 사용됨
댓글