객체지향 프로그래밍 핵심 개념
각 코드 블록에서 강조된 부분이 어떤 개념에 가장 가까운지 골라보세요.
선택지는 추상화, 캡슐화, 상속성, 다형성 네 가지입니다.
예제 구성
Shape, Rectangle, Triangle, Circle 클래스로 보는 상속 구조
문제 형식
하이라이트된 코드 스니펫을 보고 10개의 4지선다형 문제 풀기
학습 포인트
추상화, 캡슐화, 상속성, 다형성의 차이를 코드 수준에서 구분하기
문제 1. 공통 부모 클래스 선언
도형 클래스들의 공통 기반이 되는 헤더 파일입니다. 강조된 부분이 어떤 객체지향 개념에 가장 가까운지 골라보세요.
힌트: 여러 도형이 공유하는 공통 개념을 하나의 이름으로 묶는 역할을 합니다.
shape.h
#pragma once
class Shape {
private:
int area;
public:
Shape();
int get_area(void);
};
하이라이트된 부분은 어떤 개념에 가장 가까울까요?
문제 2. 정보 숨기기
도형의 넓이를 저장하는 멤버가 외부에서 직접 접근되지 않도록 숨겨져 있습니다.
힌트: 데이터와 접근 방식을 분리해 객체 내부 상태를 보호하는 개념입니다.
shape.h
#pragma once
class Shape {
private:
int area;
public:
Shape();
int get_area(void);
};
하이라이트된 부분은 어떤 개념에 가장 가까울까요?
문제 3. 사각형 클래스의 상속 선언
Rectangle 클래스가 Shape를 기반으로 확장되는 구조를 보여주는 헤더입니다.
힌트: "Rectangle is a Shape"라는 관계를 코드로 표현한 부분입니다.
Rectangle.h
#pragma once
#include "shape.h"
class Rectangle :
public Shape
{
private:
int width, height;
public:
Rectangle();
void set_width(int w);
int get_width();
void set_height(int h);
int get_height(void);
};
하이라이트된 부분은 어떤 개념에 가장 가까울까요?
문제 4. 삼각형 클래스의 상속 선언
Triangle도 Shape를 기반으로 만들어진 도형 클래스입니다.
힌트: 사각형과 마찬가지로 공통 부모에서 출발해 새로운 도형을 만드는 방식입니다.
Triangle.h
#pragma once
#include "shape.h"
class Triangle :
public Shape
{
private:
int width, height;
public:
Triangle();
void set_width(int w);
int get_width();
void set_height(int h);
int get_height(void);
};
하이라이트된 부분은 어떤 개념에 가장 가까울까요?
문제 5. 원 클래스의 비공개 데이터
반지름 값이 클래스 내부에 숨겨져 있고, 외부에서는 함수로만 접근하게 설계한 예시입니다.
Circle.h
#pragma once
#include "shape.h"
class Circle : public Shape
{
private:
int radius;
public:
Circle();
void set_radius(int r);
int get_radius(void);
};
하이라이트된 부분은 어떤 개념에 가장 가까울까요?
문제 6. 같은 메시지 준비하기
도형마다 넓이를 구하는 방식은 달라도, 모두 같은 이름의 함수로 표현할 수 있습니다.
힌트: 중요한 것은 함수 이름이 같고 객체에 따라 결과가 달라질 수 있다는 점입니다.
도형별 넓이 함수 선언
class Rectangle : public Shape {
public:
int get_area(void);
};
class Triangle : public Shape {
public:
int get_area(void);
};
class Circle : public Shape {
public:
int get_area(void);
};
하이라이트된 부분은 어떤 개념에 가장 가까울까요?
문제 7. 반지름 접근 함수
원의 반지름은 외부에서 직접 건드리지 않고, 함수를 통해 읽고 바꾸도록 설계할 수 있습니다.
힌트: 데이터를 숨기고 접근 경로를 통제하는 구조에 주목해 보세요.
Circle.h
#pragma once
#include "shape.h"
class Circle : public Shape
{
private:
int radius;
public:
Circle();
void set_radius(int r);
int get_radius(void);
};
하이라이트된 부분과 가장 관련 깊은 개념은 무엇일까요?
문제 8. 도형마다 다른 넓이 계산
같은 get_area()라는 이름을 쓰더라도, 도형 종류에 따라 계산식은 달라집니다.
힌트: 함수 이름은 같지만 실제 계산 결과가 다르다는 점이 핵심입니다.
도형별 get_area() 구현
int Rectangle::get_area(void) {
return width * height;
}
int Triangle::get_area(void) {
return width * height / 2;
}
int Circle::get_area(void) {
return static_cast<int>(radius * radius * 3.14);
}
하이라이트된 부분은 어떤 개념에 가장 가까울까요?
문제 9. 같은 함수 이름으로 넓이 출력
각 도형 객체는 모두 get_area()를 사용하지만, 출력되는 값은 객체에 따라 달라질 수 있습니다.
힌트: 같은 메시지, 다른 결과라는 표현과 가장 잘 맞는지 생각해 보세요.
main.cpp
cout << "Rectangle 넓이 : " << r1.get_area() << endl;
cout << "Triangle 넓이 : " << t1.get_area() << endl;
cout << "Circle 넓이 : " << c1.get_area() << endl;
하이라이트된 부분은 어떤 개념에 가장 가까울까요?
문제 10. 공통 이름 아래 묶인 도형들
Shape라는 이름은 사각형, 삼각형, 원처럼 서로 다른 도형을 하나의 공통 개념으로 묶어 생각하게 해줍니다.
힌트: 여러 대상을 단순화된 하나의 개념으로 표현하는 방식입니다.
도형 개념 정리
Shape
├─ Rectangle
├─ Triangle
└─ Circle