반응형
1. 객체 지향 프로그래밍 (OOP)
규모가 큰 프로젝트 즉 프로그램을 가정할 때
함수 중심
- 데이터양이 많아 코드의 중복, 재사용이 발생
- 협업 시 휴먼에러 발생 가능성이 큼
클래스 중심 = 데이터 중심
- 개별 객체로 관리하기 때문에 유지/관리/보수가 쉬움
=> 항상 클래스 중심이 좋다고 할 수는 없다. 간단한 프로그램 등 작은 규모의 프로그램은 절차 기반 형식으로 짜는 게 더 좋을 때도 많다.
2. 구조별 비교
배스킨라빈스 아이스크림 데이터를 갖고 있다고 생각하면 데이터는 일반적으로 4가지 방식으로 다루게 된다.
- 일반적인 구조
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'}
]
- 변수가 적을 땐 하드코딩이 가능하지만, 데이터 양이 많아질수록 이와 같은 방식은 사실상 불가능
- 직관적이고 수정이 쉽다는 장점
- 리스트 구조
icecream_list = ['Mom is alien', 'Mintchoco']
icecream_detail_list = [
{'taste' : 'choco', 'price' : '3,000','favorite' : '1'}
{'taste' : 'mint,choco', 'price' : '4,000', 'favorite' : '10'}
]
- 데이터가 많을수록 데이터에 변화가 생겼을 때 관리가 불편하다.(삭제, 추가, 변형이 어려움)
- 인덱스 접근 시 실수가 발생할 가능성이 높다.
- 딕셔너리 구조
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'}}
]
- 코드 반복이 지속된다.
- 중첩 문제 발생 가능(키 값)
- 정렬이 불편하고 예외 처리가 필요하다.
- 클래스 구조
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'} )
- 구조 설계 후 재사용성 증가
- 코드 반복의 최소화
- 각종 메서드 활용
본 게시글은 "우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original)" 을 참고합니다.
반응형