약 6분
읽기 설정
글자 크기
줄 간격
글꼴
1.5. Abstract Class와 Interface
객체지향 프로그래밍(OOP)에서 중요한 개념인 Abstract Class와 Interface는 코드의 재사용과 확장을 가능하게 해주는 필수적인 요소입니다. 이 두 개념은 서로 비슷하면서도 분명히 다른 점이 있기 때문에, 각각의 필요성과 사용 사례를 이해하는 것이 중요합니다.
Abstract Class (추상 클래스)
추상 클래스는 일부 메서드가 구현되어 있고, 일부 메서드는 구현되지 않은 클래스로, 일반적으로 기본적인 동작을 구현하고 이를 상속받는 클래스에서 그 내용을 완성하도록 설계됩니다. 이 구조는 코드의 중복을 줄이며, 관련된 클래스들 간의 공통된 베이스를 제공합니다. 예를 들어 동물 클래스를 생각해 볼 수 있습니다. 모든 동물(Entity)은 움직일 수 있지만 각 동물마다 그 방법은 다를 것입니다. 이러한 공통된 속성과 행동을 정의하는 데에 추상 클래스를 사용할 수 있습니다.
예제: Abstract Class
다음은 간단한 추상 클래스와 이를 상속받는 클래스의 예입니다:
abstract class Animal {
abstract void makeSound(); // 추상 메서드
void sleep() {
System.out.println("The animal is sleeping."); // 구현된 메서드
}
}
class Dog extends Animal {
void makeSound() {
System.out.println("Woof!"); // 구체적인 메서드 구현
}
}
class Cat extends Animal {
void makeSound() {
System.out.println("Meow!"); // 구체적인 메서드 구현
}
}
Interface (인터페이스)
인터페이스는 클래스가 따라야 할 청사진을 정의하는데 사용되며, 메서드의 시그니처만 정의하고 그 구현은 클래스에서 하도록 강제합니다. 인터페이스는 다중 상속을 지원하므로, 여러 클래스를 비슷한 방식으로 구성할 수 있게 해 줍니다. 예를 들어, 다양한 차량 클래스를 정의한다고 해 봅시다. 모든 차량은 움직이고 제어할 수 있다는 점은 공통적이지만, 그 방식은 각 클래스마다 다를 것입니다. 이 경우 인터페이스를 통해 각 차량 클래스의 기본 동작을 정의할 수 있습니다.
예제: Interface
다음은 인터페이스의 간단한 예입니다:
interface Vehicle {
void move(); // 메서드 시그니처
void stop();
}
class Car implements Vehicle {
public void move() {
System.out.println("Car is moving.");
}
public void stop() {
System.out.println("Car has stopped.");
}
}
class Bicycle implements Vehicle {
public void move() {
System.out.println("Bicycle is moving.");
}
public void stop() {
System.out.println("Bicycle has stopped.");
}
}
실습
- 위의 예제를 기반으로 하나의 추상 클래스와 두 개의 인터페이스를 정의하고 이를 상속받는 클래스를 구현해 보세요.
- 각각의 클래스를 인스턴스화하여 메서드를 호출하고 올바르게 동작하는지를 확인하세요.
프로젝트
간단한 클래스 구조를 설계하여 "Animal"과 "Vehicle" 인터페이스를 구현한 프로그램을 작성해 보세요. 다양한 동물과 차량의 클래스를 생성하고, 이들을 활용하여 각각의 행동을 출력하는 프로그램을 완성하세요.
정리
Abstract Class와 Interface는 객체지향 프로그래밍의 중요한 구성 요소입니다. 이 두 개념을 적절히 잘 활용하면 코드의 유연성을 높여주고, 유지보수를 수월하게 만들어 줍니다. 실무에서 Java와 같은 객체지향 언어를 사용할 때 이러한 구조를 이해하고 적절히 활용하는 것이 중요합니다.
또한, Spring Boot를 포함한 다양한 프레임워크에서의 구현도 이러한 개념들이 필요하게 됩니다. 실무에서는 이 두 개념들이 어떻게 활용되는지에 대한 사례를 추가로 학습하는 것이 좋습니다.
댓글 0
아직 댓글이 없습니다. 첫 댓글을 남겨보세요.