콘텐츠로 이동

6단원 과제: 클래스

이름: ____________

  • 출력 예측: 소스 코드를 보고 실행 결과를 예측하여 작성하세요. 코드를 실행하기 전에 먼저 작성하세요.
  • 빈칸 채우기: ______ 빈칸을 채워 프로그램을 완성하세요.

문제 1. self 없이 호출? (출력 예측)

소스 코드

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

    def greet(self):
        return "Hello, " + self.name

g = Greeter("Alice")
print(g.greet())
print(Greeter.greet(g))
print(type(g))

실행 결과

①

②

③

문제 2. 인스턴스 변수 독립성 (출력 예측)

소스 코드

class Box:
    def __init__(self, value):
        self.value = value

a = Box(10)
b = Box(10)
b.value = 99

print(a.value)
print(b.value)
print(a.value == b.value)
print(a is b)

실행 결과

①

②

③

④

문제 3. 클래스 변수 함정 (출력 예측)

소스 코드

class Player:
    score = 0

    def add(self, n):
        self.score += n

p1 = Player()
p2 = Player()

p1.add(10)
p2.add(5)

print(p1.score)
print(p2.score)
print(Player.score)

실행 결과

①

②

③

힌트: self.score += nself.score = self.score + n 과 같습니다.
처음 읽을 때 self.score가 어디서 오는지 생각해보세요.

문제 4. 공유 리스트 함정 (출력 예측)

소스 코드

class Team:
    members = []

    def join(self, name):
        self.members.append(name)

t1 = Team()
t2 = Team()
t1.join("Alice")
t2.join("Bob")

print(t1.members)
print(t2.members)
print(t1.members is t2.members)

실행 결과

①

②

③

문제 5. __str__ 메서드 (출력 예측)

소스 코드

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __str__(self):
        return f"({self.x}, {self.y})"

p = Point(3, 7)
print(p)
print(str(p))
print(repr(p))

실행 결과

①

②

③

문제 6. 상속 — super() 와 오버라이딩 (출력 예측)

소스 코드

class Shape:
    def __init__(self, color):
        self.color = color

    def info(self):
        return f"color={self.color}"

class Circle(Shape):
    def __init__(self, color, radius):
        super().__init__(color)
        self.radius = radius

    def info(self):
        return super().info() + f", r={self.radius}"

c = Circle("red", 5)
print(c.info())
print(c.color)
print(isinstance(c, Shape))
print(isinstance(c, Circle))

실행 결과

①

②

③

④

문제 7. 이름 맹글링 (출력 예측)

소스 코드

class Safe:
    def __init__(self, secret):
        self.__secret = secret

    def reveal(self):
        return self.__secret

s = Safe("1234")
print(s.reveal())
print(hasattr(s, "__secret"))
print(hasattr(s, "_Safe__secret"))

실행 결과

①

②

③

문제 8. 클래스 변수 카운터 (빈칸 채우기)

생성된 객체 수를 추적하는 카운터를 완성하세요.

실행 예시

0
1
3

소스 코드

class Item:
    ______ = 0         # 클래스 변수

    def __init__(self, name):
        self.name = name
        ______.count += 1

print(Item.count)
a = Item("apple")
print(Item.count)
b = Item("banana")
c = Item("cherry")
print(______.count)

문제 9. 상속 체인 완성 (빈칸 채우기)

부모 생성자를 호출하고 오버라이딩을 완성하세요.

실행 예시

Animal: Buddy
Dog: Buddy (Labrador)
Buddy says: Woof!

소스 코드

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

    def __str__(self):
        return f"Animal: {self.name}"

    def speak(self):
        return "..."

class Dog(______):
    def __init__(self, name, breed):
        ______.__init__(name)
        self.breed = breed

    def ______(self):
        return f"Dog: {self.name} ({self.breed})"

    def speak(self):
        return f"{self.name} says: Woof!"

d = Dog("Buddy", "Labrador")
print(Animal.__str__(d))
print(d)
print(d.speak())

문제 10. 은행 계좌 완성 (빈칸 채우기)

아래 조건을 만족하는 은행 계좌 클래스를 완성하세요.

실행 예시

잔액: 1500원
잔액 부족
잔액: 1500원

소스 코드

class BankAccount:
    def __init__(self, owner, balance=0):
        self.owner = owner
        self.______ = balance

    def deposit(self, amount):
        if amount > 0:
            self.balance += amount

    def withdraw(self, amount):
        if amount > ______:
            print("잔액 부족")
        else:
            self.balance -= ______

    def ______(self):
        return f"잔액: {self.balance}원"

acc = BankAccount("홍길동", 1000)
acc.deposit(500)
print(acc)
acc.withdraw(2000)
print(acc)