추상 클래스란?
추상 클래스(abstract class)는 미완성 설계도라고 할 수 있다.
일반 클래스는 객체를 생성할 수 있지만, 추상 클래스는 미완성 상태이기 때문에 객체를 생성할 수 없다.
대신 여러 클래스들의 공통 기능을 정의하는 부모 클래스 역할을 한다.
abstract class Animal {
abstract void sound();
}
추상 클래스는 흔히 템플릿(Template) 이라고도 부른다.
부모 클래스에서 공통 규칙을 정해두고, 자식 클래스가 그 규칙에 맞게 구현하도록 강제하는 역할을 한다.
추상 메서드란?
추상 메서드는 선언부만 있고 구현부(몸통)가 없는 메서드이다.
abstract void sound();
일반 메서드와 달리 { }가 없다.
왜냐하면 부모 클래스에서는 어떤 동작을 할지만 정해두고, 실제 구현은 자식 클래스마다 다를 수 있기 때문이다.
예를 들어 동물은 모두 소리를 낼 수 있지만, 어떤 소리를 내는지는 동물마다 다르다.
abstract class Animal {
abstract void sound();
}
class Dog extends Animal {
@Override
void sound() {
System.out.println("멍멍");
}
}
class Cat extends Animal {
@Override
void sound() {
System.out.println("야옹");
}
}
부모는 "소리를 내야 한다"는 규칙만 정하고, 자식들이 각자 구현하는 것이다.
추상화와 구체화
1) 추상화(Abstract)
클래스들의 공통점을 찾아 부모 클래스를 만드는 작업
예를 들어
강아지
고양이
토끼
모두 동물이라는 공통점이 있다.
그래서
Animal
이라는 부모 클래스를 만들 수 있다.
2) 구체화(Concrete)
추상 클래스를 상속받아 실제 기능을 구현하는 작업
Dog extends Animal
Cat extends Animal
Rabbit extends Animal
처럼 자식 클래스에서 구체적인 기능을 구현하는 것을 구체화라고 한다.
추상 메서드의 내용이 비어있는 이유
추상 메서드는 자식 클래스마다 구현 내용이 달라질 수 있기 때문이다.
예를 들어
abstract void sound();
라는 메서드는 모든 동물에게 필요하지만
- 강아지 → 멍멍
- 고양이 → 야옹
- 토끼 → (다른 동작)
처럼 내용이 달라진다.
따라서 부모는 규칙만 정의하고 구현은 자식에게 맡긴다.
팩토리 메서드(Factory Method)
팩토리 메서드는
객체를 생성해서 반환하는 메서드 를 말한다.
객체를 직접 생성하는 대신, 객체 생성 책임을 별도의 클래스나 메서드에 맡기는 방식이다.
일반적인 객체 생성
Dog dog = new Dog();
객체를 사용하는 쪽에서 직접 생성한다.
팩토리 메서드 사용
Animal animal = factory.createAnimal();
사용자는 객체를 어떻게 만드는지 몰라도 된다.
단순히 "동물을 만들어 달라"고 요청만 하면 된다.
팩토리 메서드 예시
abstract class Animal {
abstract void sound();
}
class Dog extends Animal {
@Override
void sound() {
System.out.println("멍멍");
}
}
abstract class AnimalFactory {
abstract Animal createAnimal();
}
class DogFactory extends AnimalFactory {
@Override
Animal createAnimal() {
return new Dog();
}
}
사용:
AnimalFactory factory = new DogFactory();
Animal animal = factory.createAnimal();
animal.sound();
팩토리 메서드와 다형성
여기서 중요한 점은
Animal animal = factory.createAnimal();
이다.
실제로 생성되는 객체는
new Dog()
이지만,
참조 변수 타입은 부모인 Animal이다.
즉, 팩토리 메서드는 다형성을 적극적으로 활용한 패턴이라고 볼 수 있다.
정리
추상 클래스
- 미완성 설계도
- 객체 생성 불가
- 부모 클래스 역할
- 공통 규칙 정의
추상 메서드
- 선언부만 존재
- 구현부 없음
- 자식 클래스에서 반드시 구현
추상화
- 공통점을 찾아 부모 클래스를 만드는 작업
구체화
- 상속을 통해 실제 기능을 구현하는 작업
팩토리 메서드
- 객체를 생성해서 반환하는 메서드
- 객체 생성 책임을 분리
- 다형성을 활용하여 객체를 유연하게 관리 가능
'Java' 카테고리의 다른 글
| Java 기초정리 - enum(열거형) (0) | 2026.06.17 |
|---|---|
| JAVA 기초정리 - 다형성 (Polymorphism) (0) | 2026.06.12 |
| Java 기초 정리 - 상속(Inheritance) (0) | 2026.06.11 |
| JAVA 기초정리 - 다형성과 예외처리 (0) | 2026.06.09 |
| JAVA 기초 정리 - 객체지향 (final, 인터페이스, 캡슐화, 상속) (0) | 2026.06.08 |