기출문제/정보처리기사

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

엉클지니 2025. 3. 31. 22:53

4. 객체지향 기법의 캡슐화(Encapsulation)에 대한 설명으로 틀린 것은?

   인터페이스가 단순화 된다.

   소프트웨어 재사용성이 높아진다.

   변경 발생 시 오류의 파급효과가 적다.

    상위 클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것을 의미한다.

 

 

문제 분석:

이 문제는 객체지향 기법 중에서 **캡슐화(Encapsulation)**에 대한 설명이 맞는지 틀린지를 묻고 있습니다. 캡슐화는 객체지향 프로그래밍(OOP)에서 중요한 개념으로, **데이터(속성)**와 **메서드(연산)**를 하나로 묶어 객체로 만들고, 객체 외부에서 직접 접근할 수 없도록 숨기는 기술입니다.

각 선택지를 하나씩 살펴보겠습니다.


선택지 분석:

  1. 인터페이스가 단순화 된다.
    캡슐화는 객체의 내부 구현을 숨기고, 외부에서 객체와 상호작용할 수 있는 인터페이스만을 제공하는 방식입니다. 이렇게 하면 사용자가 객체를 다룰 때 더 직관적이고 단순한 인터페이스를 사용할 수 있게 됩니다.
    맞는 설명입니다.
  2. 소프트웨어 재사용성이 높아진다.
    캡슐화는 객체 내부의 구현을 숨기기 때문에, 객체의 구현을 변경해도 외부 인터페이스는 변하지 않게 됩니다. 이로 인해 객체를 재사용하기가 쉬워지고, 소프트웨어의 재사용성이 높아집니다.
    맞는 설명입니다.
  3. 변경 발생 시 오류의 파급효과가 적다.
    캡슐화를 통해 객체의 내부 구현을 외부에서 숨길 수 있기 때문에, 객체의 내부 변경이 외부에 미치는 영향을 최소화할 수 있습니다. 즉, 객체의 내부를 변경해도 외부에서 그 객체를 사용하는 데 영향을 미치지 않으므로 오류의 파급 효과가 적습니다.
    맞는 설명입니다.
  4. 상위 클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것을 의미한다.
    이 설명은 **상속(Inheritance)**에 대한 설명입니다. 캡슐화는 데이터와 메서드를 하나로 묶어서 객체를 설계하는 개념이지, 상속의 개념과는 다릅니다. 상속은 상위 클래스의 속성이나 메서드를 하위 클래스가 물려받는 것을 의미합니다.
    틀린 설명입니다.

정답은: ❹ 상위 클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것을 의미한다.


해설:

**캡슐화(Encapsulation)**는 객체지향 프로그래밍에서 중요한 원칙 중 하나로, 객체의 데이터기능(메서드)을 하나의 단위로 묶고, 외부에서 객체의 내부 구조를 직접적으로 접근하지 못하도록 숨기는 것입니다. 이렇게 함으로써 정보 은닉(Information Hiding)을 구현하고, 객체의 상태가 외부에서 잘못 변경되지 않도록 보호할 수 있습니다.

캡슐화의 주요 이점:

  • 인터페이스 단순화: 외부에서 객체를 사용할 때, 객체 내부의 복잡한 구현을 신경 쓸 필요가 없으므로 사용자 인터페이스가 단순해집니다.
  • 재사용성 증가: 내부 구현이 변경되더라도 외부 인터페이스가 변하지 않기 때문에 객체를 재사용하기가 용이합니다.
  • 변경의 파급효과 최소화: 객체 내부의 구현을 숨기기 때문에, 내부 구현이 변경되더라도 외부 코드에는 영향을 미치지 않아 오류의 파급효과가 적습니다.

하지만 상속캡슐화와 다른 개념입니다. 상속은 상위 클래스의 속성이나 메서드를 하위 클래스가 물려받는 기능을 의미하며, 이는 캡슐화와는 별개의 개념입니다.

예시:

캡슐화 예시

class Car {
    // 속성 (private으로 은닉)
    private String color;
    private int speed;

    // 생성자
    public Car(String color, int speed) {
        this.color = color;
        this.speed = speed;
    }

    // 메서드 (public으로 외부에 제공)
    public void accelerate() {
        this.speed += 10;
    }

    public int getSpeed() {
        return this.speed;
    }
}
  • 캡슐화된 부분: color와 speed는 private로 선언되어 외부에서 직접 접근할 수 없습니다. 대신 accelerate()와 getSpeed() 같은 공개된 메서드를 통해 속성에 접근하고 조작할 수 있습니다.
  • 이렇게 하면 내부 데이터(color, speed)의 안전성이 보장되고, 외부에서 어떻게 데이터를 처리하는지에 대한 세부 사항을 알 필요 없이 객체를 사용할 수 있습니다.

결론:

캡슐화는 객체의 내부 데이터를 숨기고, 외부에서 접근할 수 있는 메서드만 제공하는 방식입니다. 이를 통해 인터페이스를 단순화하고, 소프트웨어의 재사용성을 높이며, 변경 시 오류의 파급효과를 최소화할 수 있습니다.

반면 상속하위 클래스상위 클래스의 속성과 연산을 물려받는 개념으로, 캡슐화와는 다른 개념이므로 틀린 설명에 해당합니다.


표로 정리한 선택지 비교:

선택지 설명 맞는지/틀린지

① 인터페이스가 단순화 된다. 캡슐화는 객체 외부에 간단한 인터페이스만 제공하여 사용자가 쉽게 사용하게 한다.
② 소프트웨어 재사용성이 높아진다. 캡슐화는 객체의 내부 구현을 숨기고 외부 인터페이스만 제공하여 재사용성을 높인다.
③ 변경 발생 시 오류의 파급효과가 적다. 캡슐화는 객체의 내부 변경이 외부에 미치는 영향을 최소화하므로 오류 파급효과가 적다.
❹ 상위 클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것을 의미한다. 이 설명은 상속에 관한 내용이며, 캡슐화와는 다르다.

이해가 잘 되셨기를 바랍니다! 😊

반응형