반응형
자바의 OOP(객체지향 프로그래밍)에서는 추상 클래스와 추상 메소드라는 핵심적인 개념을 지닙니다. 이들은 클래스의 설계 및 확장을 위해 굉장히 중요한 역할을 합니다. 이번 글에서는 이 두 가지 개념에 대해 설명하고 예시 코드를 통해 그 사용법을 이해해보도록 하겠습니다.
추상 메소드(Abstract Method)
추상 메소드는 선언만 있고 본체({})는 없는 메소드입니다. 이 메소드는 'abstract' 키워드를 사용하여 선언하며, 이 메소드가 하나라도 있는 클래스는 반드시 추상 클래스로 선언해야 합니다.
abstract void sound(); // 추상 메소드 선언
추상 메소드는 자식 클래스에서 구현해야 한다. 이는 강제적인 오버라이딩을 통해 클래스의 일관성을 보장합니다.
추상 클래스(Abstract Class)
추상 클래스란, 구현이 완전히 되지 않은 메소드, 즉 '추상 메소드'를 포함하는 클래스를 말합니다. 이 클래스는 'abstract' 키워드를 사용하여 선언하며, 객체화할 수 없다. 즉, 직접 인스턴스를 생성할 수 없습니다.
추상 클래스를 상속하는 하위 클래스는 반드시 추상 메소드를 재정의(오버라이딩) 해야 한다. 이를 통해 하위 클래스는 공통의 특성을 가지면서도 각자의 특성을 유지할 수 있습니다.
abstract class Animal {
abstract void sound(); // 추상 메소드
}
추상 클래스와 추상 메소드 활용 예제
abstract class Animal {
abstract void sound();
void breathe() {
System.out.println("Breathing...");
}
}
class Dog extends Animal {
void sound() {
System.out.println("Bark!");
}
}
class Cat extends Animal {
void sound() {
System.out.println("Meow~");
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog();
Cat cat = new Cat();
dog.sound(); // Bark!
dog.breathe(); // Breathing...
cat.sound(); // Meow~
cat.breathe(); // Breathing...
}
}
Dog 객체의 sound() 메소드와 breathe() 메소드를 호출한 뒤, Cat 객체의 sound() 메소드와 breathe() 메소드를 호출한 결과입니다.
Bark!
Breathing...
Meow~
Breathing...
- Dog 객체의 sound() 메소드 호출 : "Bark!"
- Dog 객체의 breathe() 메소드 호출 : "Breathing..."
- Cat 객체의 sound() 메소드 호출 : "Meow~"
- Cat 객체의 breathe() 메소드 호출 : "Breathing..."
추상 메소드인 sound()는 Dog와 Cat 클래스에서 각각 재정의 되어서, Dog 객체에서는 "Bark!", Cat 객체에서는 "Meow~"라는 서로 다른 소리를 출력하게 됩니다. 반면에 일반 메소드인 breathe()는 추상 클래스인 Animal에서 정의된 그대로 사용되므로, 모든 동물 객체에서 "Breathing..."라는 같은 결과를 출력하게 됩니다.
추상 클래스와 추상 메소드는 코드의 재사용성을 높이고, 객체 간의 관계를 더욱 명확하게 하는데 큰 도움을 줍니다. 이러한 개념들을 잘 이해하고 활용하면 효율적인 프로그래밍이 가능합니다.
반응형
'개발 > Java' 카테고리의 다른 글
| Java에서의 인터페이스(Adapter)의 강제성 소멸과 장점 (0) | 2023.07.18 |
|---|---|
| Java에서의 인터페이스 (Interface) (0) | 2023.07.18 |
| Java에서의 Private 접근 제어자와 Getter/Setter 메서드 (0) | 2023.07.18 |
| Java 접근 제어자 이해하기: public, private, protected, default (0) | 2023.07.18 |
| Java에서 instanceof 연산자 (0) | 2023.07.18 |