이번 퀴즈는 부동산 매물 프로그램을 작성하는 문제였습니다. 출력 예시는 이렇습니다.
총 3대의 매물이 있습니다.
강남 아파트 매매 10억 2010년
마포 오피스텔 전세 5억 2007년
송파 빌라 월세 500/50 2000년
(클래스는 주어져 있다)
문제를 풀기 위해, 저는 먼저 주어진 클래스를 사용하여 각 매물을 객체로 만들고, 이를 리스트에 저장한 뒤 출력하는 방식으로 접근했습니다.
먼저, House
라는 클래스를 살펴봤습니다. 이 클래스는 매물의 정보를 저장하고 출력하는 기능을 가지고 있습니다.
class House:
# 매물 초기화
def __init__(self, location, house_type, deal_type, price, completion_year):
self.location = location
self.house_type = house_type
self.deal_type = deal_type
self.price = price
self.completion_year = completion_year
# 매물 정보 표시
def show_detail(self):
print(f'{self.location} {self.house_type} {self.deal_type} {self.price} {self.completion_year}')
위 코드에서 각 매물의 정보(위치, 유형, 거래 방식, 가격, 준공 연도)를 저장하고, show_detail()
메서드를 통해 이 정보를 출력할 수 있도록 했습니다.
객체 생성 및 리스트 사용
저는 House
클래스를 사용해 매물을 객체로 생성한 후, 이를 리스트에 담아 한꺼번에 관리하고자 했습니다.
G = House("강남", "아파트", "매매", "10억", "2010년")
M = House("마포", "오피스텔", "전세", "5억", "2007년")
S = House("송파", "빌라", "월세", "500/50", "2010년")
Building = [G, M, S]
그런데, 처음에 Building.show_detail()
를 직접 호출하려다 AttributeError
가 발생했습니다. 이 오류가 발생한 이유는 리스트 객체에 직접 메서드를 호출할 수 없기 때문이었습니다. 리스트는 단순히 객체들을 담고 있는 자료형이므로, 리스트의 각 요소에 대해서 메서드를 호출해야 했습니다.
해결 방법
오류를 수정하기 위해, 리스트 안에 있는 각 House
객체에 대해 반복문을 통해 show_detail()
메서드를 호출하도록 변경했습니다.
print(f"총 {len(Building)}대의 매물이 있습니다.")
for House in Building:
House.show_detail()
이제 각 매물의 정보가 정상적으로 출력되었고, 문제를 해결할 수 있었습니다.
class House:
#매물 초기화
def __init__(self,location, house_type, deal_type, price, completion_year):
self.location = location
self.house_type= house_type
self.deal_type = deal_type
self.price = price
self.completion_year = completion_year
#매물 정보 표시
def show_detail(self):
print(f'{self.location} {self.house_type} {self.deal_type} {self.price} {self.completion_year}')
G = House("강남", "아파트", "매매", "10억", "2010년")
M = House("마포", "오피스텔", "전세", "5억", "2007년")
S = House("송파", "빌라", "월세", "500/50", "2010년")
Building = [G, M, S]
#이 줄에서 처음에 바로 Building.show_detail() 을 호출했을 때 AttributeError가 났다.
print(f"총 {len(Building)}대의 매물이 있습니다.")
for House in Building:
House.show_detail()
강의의 답안에서는 제가 사용한 방법과는 약간 다른 방식으로 문제를 해결했습니다. 답안에서는 리스트를 미리 만들지 않고 각각의 매물 객체를 append() 함수를 사용하여 리스트에 추가했습니다.
building = []
building.append(House("강남", "아파트", "매매", "10억", "2010년"))
building.append(House("마포", "오피스텔", "전세", "5억", "2007년"))
building.append(House("송파", "빌라", "월세", "500/50", "2000년"))
print(f"총 {len(building)}대의 매물이 있습니다.")
for house in building:
house.show_detail()
append()
를 사용했을까?답안에서는 리스트를 먼저 비어 있는 상태로 만든 뒤, House
객체들을 나중에 동적으로 추가하는 방식을 사용했습니다. 이 방식의 장점을 알아본 결과 리스트를 미리 선언할 필요가 없고, 필요한 매물 객체를 자유롭게 추가할 수 있다는 점입니다. 즉, 추가할 매물이 더 많거나 적을 때 코드가 더 유연하게 동작합니다.
저는 객체를 먼저 만들고 이를 한꺼번에 리스트에 넣는 방식을 사용했는데, 이는 매물의 수가 고정적일 때는 문제가 없지만, 매물이 동적으로 추가되거나 변경되는 상황에서는 답안의 방식이 더 적절할 수 있습니다.
이번 퀴즈를 통해 객체 지향 프로그래밍의 중요성을 다시 한 번 깨달을 수 있었습니다. 또한, 리스트 내의 객체를 반복문을 통해 접근해야 하는 부분에서 실수를 경험하며 더 많은 것을 배울 수 있었습니다. 앞으로는 동적인 리스트 처리 방법도 염두에 두고 코드를 작성해야 될 것 같습니다...!