파라미터 타입이 달라 코드 중복이 발생하는 문제"를 인터페이스를 통해 해결하는 것을
간단한 예로 다시 정리해둔 것임...
Animal 인터페이스를 활용하여 공통 로직을 모듈화하고,
파라미터 타입이 달라도 하나의 메서드에서 처리할 수 있도록 ...
Dog, Cat, Bird와 같은 다양한 동물 객체가 있
각 동물 클래스는 공통적으로 이름(name)과 나이(age)를 가지고 있지만,
특정 동물마다 고유한 속성이 추가로 존재
공통 로직은 동물의 이름과 나이를 출력하는 작업
하지만 각 동물 클래스가 서로 다른 타입이기 때문에 코드 중복이 발생
클래스 구조
public class Dog {
private String name;
private int age;
private String breed; // 고유 속성: 품종
// Getter/Setter
}
public class Cat {
private String name;
private int age;
private String furColor; // 고유 속성: 털 색깔
// Getter/Setter
}
public class Bird {
private String name;
private int age;
private boolean canFly; // 고유 속성: 나는 여부
// Getter/Setter
}
기존 방식: 각 타입별로 별도 메서드 작성
각 동물의 이름과 나이를 출력하기 위해 별도의 메서드를 작성해야 했
public void printDogInfo(Dog dog) {
System.out.println("Name: " + dog.getName());
System.out.println("Age: " + dog.getAge());
}
public void printCatInfo(Cat cat) {
System.out.println("Name: " + cat.getName());
System.out.println("Age: " + cat.getAge());
}
public void printBirdInfo(Bird bird) {
System.out.println("Name: " + bird.getName());
System.out.println("Age: " + bird.getAge());
}
문제점
- 코드 중복: 이름과 나이를 출력하는 로직은 공통되지만, 타입이 달라 중복 코드 발생.
- 확장성 부족: 새로운 동물 클래스(Fish, Rabbit 등)가 추가되면 새로운 메서드를 계속 작성해야 함.
해결: 공통 인터페이스를 도입하여 모듈화
1. 공통 인터페이스 정의
모든 동물이 Animal 인터페이스를 구현하도록 설계:
public interface Animal {
String getName();
int getAge();
}
2. 각 동물 클래스가 Animal을 구현
모든 동물 클래스가 Animal을 구현하여 공통 메서드를 제공하게:
public class Dog implements Animal {
private String name;
private int age;
private String breed;
@Override
public String getName() {
return name;
}
@Override
public int getAge() {
return age;
}
// Getter/Setter for breed
}
public class Cat implements Animal {
private String name;
private int age;
private String furColor;
@Override
public String getName() {
return name;
}
@Override
public int getAge() {
return age;
}
// Getter/Setter for furColor
}
public class Bird implements Animal {
private String name;
private int age;
private boolean canFly;
@Override
public String getName() {
return name;
}
@Override
public int getAge() {
return age;
}
// Getter/Setter for canFly
}
3. 공통 메서드로 로직 통합
이제 공통 인터페이스를 활용해 하나의 메서드로 통합할 수 있:
public void printAnimalInfo(Animal animal) {
System.out.println("Name: " + animal.getName());
System.out.println("Age: " + animal.getAge());
}
사용예
Dog dog = new Dog();
dog.setName("Buddy");
dog.setAge(3);
Cat cat = new Cat();
cat.setName("Whiskers");
cat.setAge(2);
Bird bird = new Bird();
bird.setName("Tweety");
bird.setAge(1);
printAnimalInfo(dog); // Dog 객체 처리
printAnimalInfo(cat); // Cat 객체 처리
printAnimalInfo(bird); // Bird 객체 처리
결과
- 코드 중복 제거: printAnimalInfo 메서드 하나로 모든 동물 객체를 처리 가능.
- 확장성 향상: 새로운 동물 클래스(Fish, Rabbit)가 추가되더라도,
Animal 인터페이스만 구현하면 공통 메서드에서 처리 가능. - 타입 안정성 보장: Animal을 구현하지 않은 클래스는 사용할 수 없음.
'Java' 카테고리의 다른 글
파라미터 타입이 다른 공통 로직 모듈화 - 정적 팩토리 메서드 (0) | 2024.12.11 |
---|---|
파라미터 타입이 다른 공통 로직 모듈화 - 제네릭 (0) | 2024.12.11 |
jsp (0) | 2024.12.10 |
Java Stream - Stream, map, collect()로 리스트 객체 가공 (0) | 2024.10.29 |
일급 컬렉션 (0) | 2024.10.21 |