5. 다음 내용이 설명하는 객체지향 설계 원칙은?
❶ 인터페이스 분리 원칙 ② 단일 책임 원칙
③ 개방 폐쇄의 원칙 ④ 리스코프 교체의 원칙
문제 분석:
이 문제는 객체지향 설계 원칙에 대해 묻고 있습니다. 주어진 설명은 클라이언트가 사용하지 않는 메서드나 인터페이스에 의존해서는 안 된다는 내용입니다. 이와 관련된 객체지향 설계 원칙을 찾는 문제입니다.
각 선택지를 하나씩 살펴보겠습니다.
선택지 분석:
- 인터페이스 분리 원칙(Interface Segregation Principle, ISP)
인터페이스 분리 원칙은 "클라이언트는 자신이 사용하지 않는 메서드를 포함하는 인터페이스에 의존해서는 안 된다"는 원칙입니다. 즉, 큰 인터페이스 하나에 여러 기능을 모아두기보다는, 각 클라이언트가 필요한 기능만 제공하는 작은 인터페이스로 분리해야 한다는 의미입니다.
→ 이 설명과 일치합니다. ✅ - 단일 책임 원칙(Single Responsibility Principle, SRP)
단일 책임 원칙은 "클래스는 하나의 책임만 가져야 한다"는 원칙입니다. 즉, 클래스는 오직 하나의 이유로만 변경되어야 하며, 하나의 클래스가 여러 가지 책임을 가지면 그 클래스가 복잡해지고 관리가 어려워진다는 원칙입니다.
→ 이 설명과 일치하지 않습니다. ❌ - 개방 폐쇄 원칙(Open/Closed Principle, OCP)
개방 폐쇄 원칙은 "소프트웨어 엔티티는 확장에는 열려 있어야 하고, 수정에는 닫혀 있어야 한다"는 원칙입니다. 즉, 기존 코드를 수정하지 않고 기능을 추가할 수 있어야 한다는 원칙입니다.
→ 이 설명과 일치하지 않습니다. ❌ - 리스코프 교체 원칙(Liskov Substitution Principle, LSP)
리스코프 교체 원칙은 "자식 클래스는 부모 클래스의 객체로 교체해도 정상적으로 동작해야 한다"는 원칙입니다. 즉, 자식 클래스가 부모 클래스를 대체할 때, 클라이언트 코드가 잘못 동작하지 않도록 해야 한다는 원칙입니다.
→ 이 설명과 일치하지 않습니다. ❌
정답은: ❶ 인터페이스 분리 원칙입니다.
해설:
**인터페이스 분리 원칙(Interface Segregation Principle, ISP)**은 객체지향 설계 원칙 중 하나로, 클라이언트는 자신이 사용하지 않는 메서드와 의존관계를 맺지 말아야 한다는 원칙입니다. 즉, 큰 인터페이스 하나에 여러 메서드를 모아두기보다는, 클라이언트가 필요한 메서드만 제공하는 작은 인터페이스로 분리해야 합니다.
이 원칙은 클라이언트가 사용하지 않는 기능에 의존하게 되면, 코드가 불필요하게 복잡해지고, 유지보수가 어려워질 수 있기 때문에 이를 방지하기 위해 작은 인터페이스로 분리하는 것이 좋습니다.
예시:
// 잘못된 예시 - 하나의 큰 인터페이스를 사용하는 경우
interface Workable {
void work();
void eat();
}
class Worker implements Workable {
public void work() {
System.out.println("Working...");
}
public void eat() {
System.out.println("Eating...");
}
}
// 잘못된 예시 - Worker는 eat() 메서드를 사용하지 않는데 의존하고 있다.
class Manager {
private Workable worker;
public Manager(Workable worker) {
this.worker = worker;
}
public void manage() {
worker.work();
// worker.eat(); -> 이 메서드는 Manager와 관련이 없다.
}
}
위 코드에서 Manager는 Workable 인터페이스를 의존하고 있으며, 이 인터페이스는 eat() 메서드를 포함하고 있습니다. 하지만 Manager는 eat() 메서드를 사용하지 않는데, eat() 메서드를 의존하고 있어 인터페이스 분리 원칙을 위반한 상태입니다.
개선된 예시:
// 인터페이스 분리 - 필요한 기능만 갖춘 인터페이스 사용
interface Workable {
void work();
}
interface Eatable {
void eat();
}
class Worker implements Workable, Eatable {
public void work() {
System.out.println("Working...");
}
public void eat() {
System.out.println("Eating...");
}
}
class Manager {
private Workable worker;
public Manager(Workable worker) {
this.worker = worker;
}
public void manage() {
worker.work();
}
}
이렇게 인터페이스를 분리하면 Manager는 더 이상 eat() 메서드에 의존하지 않게 됩니다. 이제 Manager는 Workable 인터페이스만 의존하므로, 필요한 메서드만 의존하게 되어 유지보수와 코드 관리가 쉬워집니다.
결론:
- **인터페이스 분리 원칙(Interface Segregation Principle)**은 클라이언트가 사용하지 않는 메서드와 의존하지 않도록, 작은 인터페이스를 사용하는 원칙입니다.
- 이 원칙은 클라이언트가 사용하지 않는 인터페이스 때문에 영향을 받지 않도록 하고, 불필요한 의존성을 줄이는 데 목적이 있습니다.
- 따라서 정답은 ❶ 인터페이스 분리 원칙입니다.
표로 정리한 선택지 비교:
선택지 설명 맞는지/틀린지
❶ 인터페이스 분리 원칙 | 클라이언트는 사용하지 않는 메서드에 의존하지 않도록 해야 한다. | ✅ |
② 단일 책임 원칙 | 하나의 클래스는 하나의 책임만 가져야 한다. | ❌ |
③ 개방 폐쇄 원칙 | 소프트웨어 엔티티는 확장에는 열려 있어야 하고, 수정에는 닫혀 있어야 한다. | ❌ |
④ 리스코프 교체 원칙 | 자식 클래스는 부모 클래스를 대체할 수 있어야 한다. | ❌ |
이해가 되셨기를 바랍니다! 😊
'기출문제 > 정보처리기사' 카테고리의 다른 글
2020년 4회 정보처리기사 기출문제 7번 (1) | 2025.03.31 |
---|---|
2020년 4회 정보처리기사 기출문제 5번 (0) | 2025.03.31 |
2020년 4회 정보처리기사 기출문제 4번 (0) | 2025.03.31 |
2020년 4회 정보처리기사 기출문제 3번 (0) | 2025.03.31 |
2020년 4회 정보처리기사 기출문제 2번 (0) | 2025.03.31 |