자바의 추상 클래스(Abstract Class)는 객체 지향 프로그래밍에서 특정 클래스의 공통적인 특성을 추상화하여 상속 받을 하위 클래스에게 공통된 속성과 메서드를 제공하는 기능입니다. 추상 클래스를 통해 코드의 가독성과 확장성을 높여주며, 객체 지향 프로그래밍의 원칙 중 하나인 코드의 재사용성을 지키는데 도움이 됩니다. 이번 글에서는 자바의 추상 클래스에 대해 더 자세히 알아보고, 예제 코드를 통해 기능을 이해해 보겠습니다.
1. 추상 클래스의 개념 및 장점
추상 클래스는 자바에서 키워드 'abstract'를 사용하여 선언되며, 공통적인 속성과 메서드를 포함할 수 있습니다. 하지만 인스턴스를 만들 수 없으며, 반드시 하위 클래스에서 상속 받아 사용해야 합니다. 추상 클래스를 사용하면 다음과 같은 장점이 있습니다.
- 코드의 재사용성
공통된 속성과 메서드를 추상 클래스에 선언함으로써, 하위 클래스에서 중복된 코드를 생략할 수 있습니다. - 확장성
상속받아 생성된 하위 클래스는 추상 클래스의 기본 구조를 변경하지 않고도, 필요한 기능을 추가 및 수정할 수 있습니다. - 가독성 및 유지 보수성
공통적인 기능을 추상 클래스에서 제공하므로, 전체 코드의 구조와 흐름을 이해하기 쉽게 하며, 유지 보수를 용이하게 합니다.
2. 자바 추상 클래스 구현 및 사용
자바에서 추상 클래스를 구현하고 사용하기 위해서는 다음과 같은 방법들을 사용할 수 있습니다.
- 추상 클래스 선언 및 메서드 정의
- 하위 클래스 생성 추상 메서드 구현
예제로 설명하면 아래와 같습니다.
// 추상 클래스 정의
abstract class Animal {
abstract void speak(); // 모든 동물이 구현해야 추상 메서드
}
// 추상 클래스를 상속하는 클래스 정의
class Dog extends Animal {
@Override
void speak() {
System.out.println("멍멍!");
}
}
class Cat extends Animal {
@Override
void speak() {
System.out.println("야옹!");
}
}
public class Main {
public static void main(String[] args) {
Dog myDog = new Dog(); // 구현된 Dog 클래스 사용
Cat myCat = new Cat(); // 구현된 Cat 클래스 사용
myDog.speak(); // "멍멍!"
myCat.speak(); // "야옹!"
}
}
위의 예제에서 Animal은 추상 클래스이며, Dog와 Cat은 서로 다른 클래스지만 Animal 추상 클래스를 상속받습니다. 이를 통해, 새로운 동물 클래스를 추가할 때 기존 코드를 수정하지 않고 간단하게 애플리케이션에 새로운 기능을 추가할 수 있습니다.
3. 추상 클래스 예제
음료를 나타내는 추상 클래스를 정의하고, 여러 종류의 음료 클래스를 구현해보겠습니다. 해당 추상 클래스는 공통 속성인 '가격'과 '용량'을 포함할 것이며, 음료의 용량에 따라 단가를 계산하는 메서드를 구현할 것입니다.
// 추상 클래스 정의
abstract class Beverage {
protected int price;
protected int volume;
Beverage(int price, int volume) {
this.price = price;
this.volume = volume;
}
abstract void displayInfo();
int calculateUnitPrice() {
return price / volume;
}
}
// 추상 클래스를 상속하는 클래스 정의
class Coffee extends Beverage {
Coffee(int price, int volume) {
super(price, volume);
}
@Override
void displayInfo() {
System.out.println("커피\n가격: " + price + "원\n용량: " + volume + "ml\n단가: " + calculateUnitPrice() + "원/ml");
}
}
class Soda extends Beverage {
Soda(int price, int volume) {
super(price, volume);
}
@Override
void displayInfo() {
System.out.println("탄산음료\n가격: " + price + "원\n용량: " + volume + "ml\n단가: " + calculateUnitPrice() + "원/ml");
}
}
public class Main {
public static void main(String[] args) {
Coffee coffee = new Coffee(5000, 500);
Soda soda = new Soda(2000, 350);
coffee.displayInfo(); // 커피 정보 출력
soda.displayInfo(); // 탄산음료 정보 출력
}
}
자바 추상 클래스를 통해 프로젝트의 규모가 커져도 코드의 유연성과 확장성을 향상시킬 수 있으며, 객체 지향 프로그래밍의 핵심 원칙을 준수하게 됩니다.
'Programming > Java' 카테고리의 다른 글
자바의 내부 클래스 (0) | 2023.08.01 |
---|---|
자바의 인터페이스 (0) | 2023.07.31 |
자바의 다형성 (0) | 2023.07.29 |
자바의 상속 (0) | 2023.07.28 |
자바의 클래스와 객체 (0) | 2023.07.27 |