파이썬 객체지향 퀴즈 20문항

각각의 문제 + 정답 + 상세풀이 + 예시 코드 + 출력 결과

OX 1

1. 문제

클래스(Class)는 객체(Object)를 만들기 위한 '설계도'이다.

정답

O

상세 풀이

클래스는 속성과 메서드를 미리 정의한 설계도이다. 이 설계도를 이용해 실제로 만들어진 것이 객체 또는 인스턴스이다.

예시 코드

class Student:
    def say_hello(self):
        print('안녕하세요')

s1 = Student()
s1.say_hello()

출력 결과

안녕하세요
OX 2

2. 문제

하나의 클래스로부터 생성된 모든 객체는 동일한 속성 값을 가진다.

정답

X

상세 풀이

같은 클래스로 만든 객체라도 인스턴스 속성은 객체마다 다를 수 있다. 예를 들어 같은 Car 클래스로 만든 자동차라도 브랜드 값은 다를 수 있다.

예시 코드

class Car:
    def __init__(self, brand):
        self.brand = brand

c1 = Car('현대')
c2 = Car('기아')

print(c1.brand)
print(c2.brand)

출력 결과

현대
기아
OX 3

3. 문제

상속(Inheritance)은 'has-a' 관계를 표현하기 위해 사용된다.

정답

X

상세 풀이

상속은 주로 is-a 관계를 표현한다. 예를 들어 Dog는 Animal이다. has-a 관계는 자동차가 엔진을 가진다처럼 포함 관계에 가깝다.

예시 코드

class Animal:
    pass

class Dog(Animal):
    pass

print(isinstance(Dog(), Animal))

출력 결과

True
OX 4

4. 문제

메서드를 정의할 때 첫 번째 매개변수인 self는 생략할 수 있다.

정답

X

상세 풀이

인스턴스 메서드에서 self는 객체 자신을 가리키는 필수 매개변수이다. self를 통해 객체의 속성에 접근한다.

예시 코드

class Person:
    def set_name(self, name):
        self.name = name

p = Person()
p.set_name('인수')
print(p.name)

출력 결과

인수
OX 5

5. 문제

자식 클래스에서 부모 클래스와 동일한 이름의 메서드를 정의하는 것을 '메서드 오버로딩'이라고 한다.

정답

X

상세 풀이

부모 클래스의 메서드를 자식 클래스에서 다시 정의하는 것은 오버라이딩이다. 오버로딩은 같은 이름의 함수를 매개변수 형태에 따라 다르게 쓰는 개념이다.

예시 코드

class Animal:
    def sound(self):
        print('소리')

class Cat(Animal):
    def sound(self):
        print('야옹')

Cat().sound()

출력 결과

야옹
OX 6

6. 문제

__init__ 메서드는 객체가 소멸될 때 자동으로 호출된다.

정답

X

상세 풀이

__init__은 객체가 생성될 때 호출되는 생성자 메서드이다. 객체가 소멸될 때 관련되는 메서드는 __del__이다.

예시 코드

class Book:
    def __init__(self, title):
        self.title = title
        print('객체 생성')

b = Book('파이썬')
print(b.title)

출력 결과

객체 생성
파이썬
OX 7

7. 문제

클래스 변수는 해당 클래스의 모든 인스턴스가 공유하는 변수이다.

정답

O

상세 풀이

클래스 변수는 클래스 영역에 선언되어 여러 인스턴스가 공통으로 참조할 수 있다.

예시 코드

class School:
    name = '전북과학고'

s1 = School()
s2 = School()

print(s1.name)
print(s2.name)

출력 결과

전북과학고
전북과학고
OX 8

8. 문제

@staticmethod로 정의된 정적 메서드는 self 매개변수를 받지 않는다.

정답

O

상세 풀이

정적 메서드는 인스턴스 상태나 클래스 상태를 직접 사용하지 않는 유틸리티 함수처럼 동작하므로 self나 cls를 받지 않는다.

예시 코드

class MathTool:
    @staticmethod
    def add(a, b):
        return a + b

print(MathTool.add(3, 5))

출력 결과

8
OX 9

9. 문제

추상 클래스(Abstract Class)는 인스턴스를 직접 생성할 수 있다.

정답

X

상세 풀이

추상 클래스는 자식 클래스가 반드시 구현해야 할 메서드 규약을 제공한다. 추상 메서드가 남아 있으면 직접 객체를 만들 수 없다.

예시 코드

from abc import ABC, abstractmethod

class Shape(ABC):
    @abstractmethod
    def area(self):
        pass

print('추상 클래스는 설계 규약 역할')

출력 결과

추상 클래스는 설계 규약 역할
OX 10

10. 문제

다형성(Polymorphism)이란 같은 이름의 메서드 호출에 대해 객체마다 다르게 반응하는 특성을 말한다.

정답

O

상세 풀이

다형성은 같은 메서드 이름을 호출해도 실제 객체의 종류에 따라 서로 다르게 동작하는 성질이다.

예시 코드

class Dog:
    def speak(self):
        return '멍멍'

class Cat:
    def speak(self):
        return '야옹'

for animal in [Dog(), Cat()]:
    print(animal.speak())

출력 결과

멍멍
야옹
5지선다 11

11. 문제

객체가 생성될 때 속성을 초기화하기 위해 사용하는 특별한 메서드의 이름은?

정답

③ __init__

상세 풀이

__init__은 객체가 생성될 때 자동으로 호출되어 인스턴스 속성을 초기화하는 생성자 역할을 한다.

예시 코드

class Student:
    def __init__(self, name):
        self.name = name

s = Student('민수')
print(s.name)

출력 결과

민수
5지선다 12

12. 문제

부모 클래스 Animal을 Dog 클래스가 상속받는 올바른 문법은?

정답

③ class Dog(Animal):

상세 풀이

파이썬에서 상속은 class 자식클래스(부모클래스): 형식으로 작성한다.

예시 코드

class Animal:
    def move(self):
        print('움직인다')

class Dog(Animal):
    pass

Dog().move()

출력 결과

움직인다
5지선다 13

13. 문제

클래스 내에서 인스턴스 자신을 가리키는 데 사용되는 관례적인 매개변수 이름은?

정답

⑤ self

상세 풀이

self는 메서드를 호출한 인스턴스 자신을 가리키며, 인스턴스 속성에 접근할 때 사용한다.

예시 코드

class Counter:
    def __init__(self):
        self.count = 0
    def up(self):
        self.count += 1

c = Counter()
c.up()
print(c.count)

출력 결과

1
5지선다 14

14. 문제

다음 중 정보 은닉(Information Hiding)의 주된 목적은?

정답

② 객체의 내부 상태 보호 및 무결성 유지

상세 풀이

정보 은닉은 객체 내부 데이터를 외부에서 함부로 바꾸지 못하게 하여 안정성과 무결성을 높이는 데 목적이 있다.

예시 코드

class Account:
    def __init__(self):
        self.__money = 1000
    def get_money(self):
        return self.__money

acc = Account()
print(acc.get_money())

출력 결과

1000
5지선다 15

15. 문제

@property 데코레이터를 사용하는 가장 큰 이유는?

정답

③ 메서드를 속성(attribute)처럼 접근하게 하기 위해

상세 풀이

@property를 사용하면 메서드 결과를 괄호 없이 속성처럼 읽을 수 있어 코드가 더 직관적이다.

예시 코드

class Circle:
    def __init__(self, r):
        self.r = r
    @property
    def diameter(self):
        return self.r * 2

c = Circle(5)
print(c.diameter)

출력 결과

10
5지선다 16

16. 문제

다음 코드의 출력 결과는? class A: x=10 / class B(A): pass / class C(A): x=20 / print(A().x, B().x, C().x)

정답

② 10 10 20

상세 풀이

A의 x는 10이다. B는 A를 상속받아 x=10을 그대로 사용하고, C는 x를 20으로 재정의했기 때문에 10 10 20이 출력된다.

예시 코드

class A:
    x = 10
class B(A):
    pass
class C(A):
    x = 20

print(A().x, B().x, C().x)

출력 결과

10 10 20
5지선다 17

17. 문제

@classmethod로 정의된 메서드가 첫 번째 인자로 받는 것은?

정답

② cls (클래스 객체)

상세 풀이

클래스 메서드는 인스턴스가 아니라 클래스 자체를 첫 번째 인자로 받으며 관례적으로 cls라고 쓴다.

예시 코드

class Person:
    count = 0
    @classmethod
    def show_count(cls):
        print(cls.count)

Person.show_count()

출력 결과

0
5지선다 18

18. 문제

다음 중 다형성(Polymorphism)을 가장 잘 설명한 것은?

정답

③ 동일한 호출에 대해 객체 타입에 따라 다르게 동작하는 것

상세 풀이

다형성은 같은 이름의 메서드 호출이 객체 타입에 따라 다르게 실행되는 성질이다.

예시 코드

class Circle:
    def draw(self):
        print('원을 그린다')

class Square:
    def draw(self):
        print('사각형을 그린다')

for shape in [Circle(), Square()]:
    shape.draw()

출력 결과

원을 그린다
사각형을 그린다
5지선다 19

19. 문제

print(obj)를 실행할 때, 문자열을 반환하기 위해 구현해야 하는 매직 메서드는?

정답

③ __str__

상세 풀이

__str__은 객체를 사용자가 보기 쉬운 문자열로 표현할 때 사용된다. print(obj)를 실행하면 이 메서드의 반환값이 출력된다.

예시 코드

class Student:
    def __str__(self):
        return '학생 객체입니다'

obj = Student()
print(obj)

출력 결과

학생 객체입니다
5지선다 20

20. 문제

s.find('x')와 s.index('x')의 가장 큰 차이점은?

정답

④ 찾는 값이 없을 때의 처리 방식

상세 풀이

find는 찾는 문자가 없으면 -1을 반환하지만 index는 ValueError 예외를 발생시킨다.

예시 코드

s = 'python'

print(s.find('x'))
try:
    print(s.index('x'))
except ValueError:
    print('ValueError 발생')

출력 결과

-1
ValueError 발생