728x90
반응형
아래는 위 예제에 Interface를 추가하여 Java의 객체지향 특징을 더욱 강조한 예제입니다. 여기서는 Soundable
이라는 인터페이스를 추가하여, 모든 동물 클래스가 특정 소리를 낼 수 있도록 합니다. 인터페이스를 통해 클래스가 특정 동작을 반드시 구현하게 하는 방법을 배울 수 있습니다.
1. 인터페이스 생성
Soundable
이라는 인터페이스를 만들어서 모든 동물들이 소리를 내는 기능을 공통으로 구현하도록 합니다.
interface Soundable {
// 모든 구현 클래스가 소리를 낼 수 있도록 sound 메서드를 선언
void sound();
}
2. 추상 클래스와 추상 메서드 (추상화)
Animal
클래스는 여전히 추상 클래스로서 동물의 공통 속성 및 메서드를 정의합니다. 이제 Soundable
인터페이스를 구현하도록 설정합니다.
abstract class Animal implements Soundable {
protected String name;
public Animal(String name) {
this.name = name;
}
// Animal이 공통적으로 가지고 있는 메서드
public void eat() {
System.out.println(name + "가 음식을 먹습니다.");
}
}
3. 상속과 구체적인 구현 (상속 및 인터페이스 구현)
Dog
와 Cat
클래스는 Animal
클래스를 상속받고, Soundable
인터페이스의 sound
메서드를 구현합니다.
class Dog extends Animal {
public Dog(String name) {
super(name);
}
// Soundable 인터페이스에서 요구하는 sound 메서드 구현
@Override
public void sound() {
System.out.println(name + "가 멍멍 짖습니다.");
}
public void fetch() {
System.out.println(name + "가 공을 물어옵니다.");
}
}
class Cat extends Animal {
public Cat(String name) {
super(name);
}
// Soundable 인터페이스에서 요구하는 sound 메서드 구현
@Override
public void sound() {
System.out.println(name + "가 야옹 소리를 냅니다.");
}
public void scratch() {
System.out.println(name + "가 스크래칭을 합니다.");
}
}
4. 객체 생성 및 다형성
Animal
타입의 변수를 사용하여 Dog
와 Cat
객체를 다형적으로 사용할 수 있으며, Soundable
인터페이스 타입으로도 선언하여 sound()
메서드를 호출할 수 있습니다.
public class Main {
public static void main(String[] args) {
// Animal 타입으로 선언하여 다형성 활용
Animal myDog = new Dog("바둑이");
Animal myCat = new Cat("야옹이");
// Soundable 인터페이스 타입으로 선언하여 다형성 활용
Soundable soundableDog = new Dog("강아지");
Soundable soundableCat = new Cat("고양이");
// Animal 타입을 통한 다형성 메서드 호출
myDog.eat(); // 바둑이가 음식을 먹습니다.
myDog.sound(); // 바둑이가 멍멍 짖습니다.
myCat.eat(); // 야옹이가 음식을 먹습니다.
myCat.sound(); // 야옹이가 야옹 소리를 냅니다.
// Soundable 타입을 통한 다형성 메서드 호출
soundableDog.sound(); // 강아지가 멍멍 짖습니다.
soundableCat.sound(); // 고양이가 야옹 소리를 냅니다.
// 특정 기능 호출을 위해 타입 캐스팅
if (myDog instanceof Dog) {
((Dog) myDog).fetch(); // 바둑이가 공을 물어옵니다.
}
if (myCat instanceof Cat) {
((Cat) myCat).scratch(); // 야옹이가 스크래칭을 합니다.
}
}
}
5. 실행 결과
위의 예제를 실행하면 다음과 같은 출력이 나타납니다.
바둑이가 음식을 먹습니다.
바둑이가 멍멍 짖습니다.
야옹이가 음식을 먹습니다.
야옹이가 야옹 소리를 냅니다.
강아지가 멍멍 짖습니다.
고양이가 야옹 소리를 냅니다.
바둑이가 공을 물어옵니다.
야옹이가 스크래칭을 합니다.
설명
- 추상화:
Animal
추상 클래스에서 공통 속성을 정의하고,Soundable
인터페이스에서 공통 메서드를 선언하여 구체적인 동물 클래스가 각각의 소리를 구현하게 했습니다. - 상속:
Dog
와Cat
클래스가Animal
클래스를 상속받아, 각 동물에 맞는 소리 및 특성을 구현했습니다. - 인터페이스:
Soundable
인터페이스를 통해sound()
메서드를 구현하도록 강제하여 모든 동물 객체가 소리를 내게 했습니다. - 다형성:
Animal
타입 및Soundable
타입으로 객체를 다형적으로 활용하여 메서드를 호출했습니다.
이 예제는 인터페이스와 클래스 상속의 차이점을 이해하는 데 도움이 되며, 다양한 객체지향 특징을 Java에서 구현하는 방법을 익힐 수 있습니다.
728x90
반응형
'Topcit' 카테고리의 다른 글
클래스 다이어그램 (1) | 2024.11.09 |
---|---|
Java PreparedStatement (0) | 2024.10.28 |
SQL DCL 요약 (0) | 2024.10.28 |
SQL DML 요약 (1) | 2024.10.27 |
SQL DQL 요약 (0) | 2024.10.27 |