Python 부동산 매물 프로그램 작성 퀴즈(객체지향)

2star_·2024년 10월 7일
0

Python

목록 보기
8/13

🏡 부동산 매물 프로그램 작성 퀴즈 풀이

문제 소개

이번 퀴즈는 부동산 매물 프로그램을 작성하는 문제였습니다. 출력 예시는 이렇습니다.

총 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 객체들을 나중에 동적으로 추가하는 방식을 사용했습니다. 이 방식의 장점을 알아본 결과 리스트를 미리 선언할 필요가 없고, 필요한 매물 객체를 자유롭게 추가할 수 있다는 점입니다. 즉, 추가할 매물이 더 많거나 적을 때 코드가 더 유연하게 동작합니다.

저는 객체를 먼저 만들고 이를 한꺼번에 리스트에 넣는 방식을 사용했는데, 이는 매물의 수가 고정적일 때는 문제가 없지만, 매물이 동적으로 추가되거나 변경되는 상황에서는 답안의 방식이 더 적절할 수 있습니다.

결론

이번 퀴즈를 통해 객체 지향 프로그래밍의 중요성을 다시 한 번 깨달을 수 있었습니다. 또한, 리스트 내의 객체를 반복문을 통해 접근해야 하는 부분에서 실수를 경험하며 더 많은 것을 배울 수 있었습니다. 앞으로는 동적인 리스트 처리 방법도 염두에 두고 코드를 작성해야 될 것 같습니다...!


profile
안녕하세요.

0개의 댓글

관련 채용 정보