반응형

1. 객체 지향 프로그래밍 (OOP)

규모가 큰 프로젝트 즉 프로그램을 가정할 때

함수 중심

  1. 데이터양이 많아 코드의 중복, 재사용이 발생
  2. 협업 시 휴먼에러 발생 가능성이 큼

클래스 중심 = 데이터 중심

  1. 개별 객체로 관리하기 때문에 유지/관리/보수가 쉬움

=> 항상 클래스 중심이 좋다고 할 수는 없다. 간단한 프로그램 등 작은 규모의 프로그램은 절차 기반 형식으로 짜는 게 더 좋을 때도 많다.

2. 구조별 비교

배스킨라빈스 아이스크림 데이터를 갖고 있다고 생각하면 데이터는 일반적으로 4가지 방식으로 다루게 된다.

  1. 일반적인 구조
ice_cream_1 = "Mom is ailen"
ice_cream_detail = [
    {'taste' : 'choco'},
    {'price' : '3,000'},
    {'favorite' : '1'}
]

ice_cream_2 = "Mintchoco"
ice_cream_detail = [
    {'taste' : 'mint,choco'},
    {'price' : '4,000'},
    {'favorite' : '10'}
]
  1. 변수가 적을 땐 하드코딩이 가능하지만, 데이터 양이 많아질수록 이와 같은 방식은 사실상 불가능
  2. 직관적이고 수정이 쉽다는 장점
  1. 리스트 구조
icecream_list = ['Mom is alien', 'Mintchoco']
icecream_detail_list = [
    {'taste' : 'choco', 'price' : '3,000','favorite' : '1'}
    {'taste' : 'mint,choco', 'price' : '4,000', 'favorite' : '10'}
]
  1. 데이터가 많을수록 데이터에 변화가 생겼을 때 관리가 불편하다.(삭제, 추가, 변형이 어려움)
  2. 인덱스 접근 시 실수가 발생할 가능성이 높다.
  1. 딕셔너리 구조
icecream_dict = [
    {'icecream_name' : 'Mom is alien', 
    'iceream_detail' : {'taste' : 'choco', 'price' : '3,000','favorite' : '1'}},
    {'icecream_name' : 'Mintchoco', 
    'icecream_detail' : {'taste' : 'mint,choco', 'price' : '4,000', 'favorite' : '10'}}
]
  1. 코드 반복이 지속된다.
  2. 중첩 문제 발생 가능(키 값)
  3. 정렬이 불편하고 예외 처리가 필요하다.
  1. 클래스 구조
class Icecream():
    def __init__(self, name, detail):
        self.name = name
        self.detail = detail

    def __str__(self) :
        return 'str : {} - {}'.format(self.name, self.detail)
    #비공식적으로 사용자 레벨의 출력을 원할 경우 사용하는 메소드(반복문 등에서 호출됨)

    def __repr__(self) :
        return 'repr : {} - {}'.format(self.name, self.detail)
    #공식적으로 개발자 레벨의 출력을 원할 경우 사용하는 메소드(객체정보까지 표시해준다.)

icecream1 = Icecream('Mom is alien', {'taste' : 'choco', 'price' : '3,000','favorite' : '1'} )
icecream2 = Icecream('Mintchoco', {'taste' : 'mint,choco', 'price' : '4,000', 'favorite' : '10'} )
  1. 구조 설계 후 재사용성 증가
  2. 코드 반복의 최소화
  3. 각종 메서드 활용

본 게시글은 "우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original)" 을 참고합니다.

반응형
복사했습니다!