기출문제/정보처리기사

2020년 3회 정보처리기사 기출문제 17번

엉클지니 2025. 4. 8. 17:33

17. 객체지향 설계 원칙 중, 서브타입(상속받은 하위 클래스)은 어디에서나 자신의 기반타입(상위클래스)으로 교체할 수           있어야 함을 의미하는 원칙은?

    ISP(Interface Segregation Principle)

    DIP(Dependency Inversion Principle)

     LSP(Liskov Substitution Principle)

    SRP(Single Responsibility Principle)

 

 

이 문제는 객체지향 설계 원칙 중 **서브타입(상속받은 하위 클래스)**과 관련된 원칙을 묻는 문제입니다. 이를 이해하기 위해서는 각 객체지향 설계 원칙을 하나씩 살펴보고, 서브타입을 기반으로 교체할 수 있는 원칙이 무엇인지 알아보겠습니다.

문제 분석:

**서브타입(하위 클래스)**은 **상속받은 기반타입(상위 클래스)**로 교체할 수 있어야 한다는 원칙을 묻고 있습니다. 즉, 하위 클래스상위 클래스로 대체될 수 있어야 한다는 의미입니다. 이 원칙은 객체지향 설계에서 중요한 개념이며, 상속다형성을 잘 활용해야 합니다.

객체지향 설계 원칙에 대해 알아보기

  1. ① ISP (Interface Segregation Principle):
    • ISP는 "인터페이스 분리 원칙"입니다.
    • 주요 내용: 클라이언트가 자신이 사용하지 않는 메서드에 의존하지 않도록 해야 한다는 원칙입니다. 즉, 너무 많은 기능을 가진 하나의 큰 인터페이스 대신, 작고 구체적인 인터페이스로 나누어야 한다는 것입니다.
    • 서브타입 교체와 관련이 없음.
  2. ② DIP (Dependency Inversion Principle):
    • DIP는 "의존성 역전 원칙"입니다.
    • 주요 내용: 고수준 모듈이 저수준 모듈에 의존해서는 안 되며, 둘 다 추상화에 의존해야 한다는 원칙입니다. 즉, 의존성 관계를 구체적인 클래스가 아닌 인터페이스나 추상 클래스에 의존하도록 해야 합니다.
    • 서브타입 교체와 관련이 없음.
  3. ❸ LSP (Liskov Substitution Principle):
    • LSP는 "리스코프 치환 원칙"입니다.
    • 주요 내용: 자식 클래스는 부모 클래스를 대체할 수 있어야 한다는 원칙입니다. 즉, 하위 클래스는 상위 클래스의 기능을 확장하거나 변경할 수 있지만, 상위 클래스의 객체를 하위 클래스의 객체로 교체할 수 있어야 한다는 것입니다.
    • 서브타입 교체의 원칙을 명확하게 설명합니다. 하위 클래스는 언제나 상위 클래스의 역할을 대신할 수 있어야 하므로, 이 원칙에 맞는 원칙입니다.
  4. ④ SRP (Single Responsibility Principle):
    • SRP는 "단일 책임 원칙"입니다.
    • 주요 내용: 한 클래스는 하나의 책임만을 가져야 한다는 원칙입니다. 클래스는 하나의 일만 해야 하며, 여러 책임을 가지면 유지보수가 어려워진다는 원칙입니다.
    • 서브타입 교체와 관련이 없음.

정답 해설:

  • **LSP (Liskov Substitution Principle)**는 "리스코프 치환 원칙"으로, 서브타입은 상위 타입으로 교체 가능해야 한다는 원칙입니다.
  • 예를 들어, 동물 클래스를 상위 클래스, 클래스를 하위 클래스로 정의한다고 할 때, 객체는 동물 객체를 대신해서 사용할 수 있어야 한다는 뜻입니다. 이를 통해 하위 클래스가 상위 클래스를 완전히 대체할 수 있어야 한다는 요구를 충족시킵니다.

예시:

class Animal {
    public void makeSound() {
        System.out.println("Some sound");
    }
}

class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Bark");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal myAnimal = new Dog(); // Dog 객체는 Animal 객체로 대체 가능
        myAnimal.makeSound(); // "Bark"
    }
}

위 예시에서 Dog 클래스는 Animal 클래스를 대체할 수 있습니다. 이는 **리스코프 치환 원칙(LSP)**에 부합합니다. 🐶🐱

결론:

**정답은 ❸ LSP (Liskov Substitution Principle)**입니다. 하위 클래스는 상위 클래스를 대체할 수 있어야 하며, 이 원칙을 통해 서브타입 교체가 가능하다는 점을 강조합니다.


정답: ❸ LSP (Liskov Substitution Principle)

반응형