
객체 지향 프로그래밍 개념 – 추상 클래스와 인터페이스 – 0 – 추상 클래스의 개념과 활용
안녕하세요! 자바의 객체 지향 프로그래밍 개념에 대해 알아보는 시간을 가져보려고 합니다. 이번에는 추상 클래스에 대한 개념과 활용에 대해 알아보겠습니다.
추상 클래스란?
우선, 추상 클래스(abstract class)는 객체 지향 프로그래밍에서 중요한 개념 중 하나입니다. 추상 클래스는 다른 클래스들에게 공통적인 특징과 기능을 제공하기 위해 사용됩니다. 하지만 직접적으로 객체를 생성할 수는 없으며, 추상 클래스를 상속받은 자식 클래스를 통해 객체를 생성해야 합니다.
추상 클래스는 클래스 정의 시 abstract
키워드를 사용하여 선언합니다. 추상 클래스 내부에는 일반적인 메서드와 추상 메서드를 함께 포함시킬 수 있습니다. 추상 메서드는 선언만 있고 구현이 없는 메서드로, 이 메서드를 상속받은 클래스에서 반드시 구현해야 합니다.
추상 클래스를 사용하면 클래스 간의 계층 구조를 구성할 수 있으며, 공통적인 특성을 가진 클래스들을 쉽게 관리할 수 있습니다. 이제 추상 클래스를 활용하는 예시를 살펴보겠습니다.
추상 클래스의 활용 예시
1. 동물(Animal) 클래스의 추상 클래스
public abstract class Animal {
private String name;
public Animal(String name) {
this.name = name;
}
public void eat() {
System.out.println(name + "이(가) 먹이를 먹습니다.");
}
public abstract void sound();
}
2. 고양이(Cat) 클래스의 구현
public class Cat extends Animal {
public Cat(String name) {
super(name);
}
@Override
public void sound() {
System.out.println("야옹!");
}
}
3. 강아지(Dog) 클래스의 구현
public class Dog extends Animal {
public Dog(String name) {
super(name);
}
@Override
public void sound() {
System.out.println("멍멍!");
}
}
추상 클래스의 비유적인 설명
추상 클래스를 비유해보자면, 추상 클래스는 “설계도”와 같다고 볼 수 있습니다. 설계도는 구체적인 집을 짓기 전에 필요한 청사진이죠. 이렇게 추상 클래스는 공통적인 특성과 메서드를 가지며, 실제로 사용될 객체들의 “설계도” 역할을 합니다.
예를 들어, 동물 클래스를 추상 클래스로 만들어 보겠습니다. 동물 클래스에는 name
필드와 eat()
메서드, 그리고 추상 메서드인 sound()
메서드가 포함되어 있습니다. 이 추상 클래스를 상속받은 고양이와 강아지 클래스는 각각 추상 메서드인 sound()
를 구현해야 합니다.
고양이 클래스에서는 “야옹!”이라는 소리를, 강아지 클래스에서는 “멍멍!”이라는 소리를 출력하는 예시를 작성해보았습니다. 이제 이 추상 클래스와 구체적인 클래스들을 함께 사용하여 객체를 생성하고 메서드를 호출해보겠습니다.
public class Main {
public static void main(String[] args) {
Animal cat = new Cat("야옹이");
cat.eat(); // "야옹이이(가) 먹이를 먹습니다."
cat.sound(); // "야옹!"
Animal dog = new Dog("멍멍이");
dog.eat(); // "멍멍이이(가) 먹이를 먹습니다."
dog.sound(); // "멍멍!"
}
}
추상 클래스의 주의해야 할 점
추상 클래스를 사용할 때 주의해야 할 점이 있습니다.
-
추상 클래스는 직접적으로 객체를 생성할 수 없습니다. 상속을 통해 추상 클래스를 확장한 구체적인 클래스에서 객체를 생성해야 합니다.
-
추상 클래스 내에는 추상 메서드가 포함될 수 있습니다. 이 추상 메서드는 하위 클래스에서 반드시 구현되어야 합니다. 따라서 하위 클래스에서 추상 메서드를 빠뜨리면 컴파일 오류가 발생합니다.
-
추상 클래스는 다른 클래스들에게 공통적인 특성과 기능을 제공하기 위한 것입니다. 따라서 추상 클래스 자체로는 완전한 기능을 갖춘 클래스가 아니며, 실질적인 구현을 위해 하위 클래스를 작성해야 합니다.
추상 클래스를 올바르게 이해하고 활용한다면, 객체 지향 프로그래밍에서 코드의 재사용성과 유지보수성을 높일 수 있습니다.
이번에는 추상 클래스에 대한 개념과 활용에 대해 알아보았습니다. 다음 시간에는 인터페이스에 대해 알아보도록 하겠습니다. 공부하시는 분들에게 흥미로운 자바 프로그래밍 지식이 되길 바라며, 블로그에도 포스팅해주시면 좋을 것 같습니다! 질문이 있으시거나 추가로 알고 싶은 내용이 있으면 언제든지 물어보세요. 감사합니다!
[주의해야 할 점 정리]
- 추상 클래스는 직접적으로 객체를 생성할 수 없고, 상속을 통해 구체적인 클래스에서 객체를 생성합니다.
- 추상 클래스 내에는 추상 메서드가 포함되며, 하위 클래스에서 반드시 구현되어야 합니다.
- 추상 클래스는 공통적인 특성과 기능을 제공하기 위한 것이므로, 하위 클래스를 작성해야 실질적인 구현이 가능합니다.