상세 컨텐츠

본문 제목

Class와 method 활용 (1) - Class를 활용한 OOP의 장점

개발/python-심화(Advanced)

by Matthew0633 2022. 3. 30. 23:59

본문

python으로 개발을 하면서, Class를 통한 추상화를 적극적으로 사용했지만, 이러한 것이 어떠한 장점이 있는지 정확하게 인지를 하지 못했던 것 같다. (잘모르면서도 이러한 코드 스타일을 배울 수 있었던 것은 Github에 좋은 python 코드들을 올려주신 contributer 분들과, 이러한 스타일을 적극적으로 적용하고자 나의 최소한의 자세 덕분인 것 같다..) 바꿔 말하면, Class를 활용하지 않는다면 어떤 비효율적인 코드가 존재할 수 있는지, Class를 통한 추상화와 객체지향프로그래밍으로 이어지는 스타일이 어떠한 효율성을 가져다 주었는지를, 아래내용에 해당하는 공부를 통해 알 수 있었다.

객체지향 프로그래밍 (Object Oriented Programming)의 장점

  • 코드의 재사용성이 증가 (코드 중복 방지) : 개발 및 유지보수 시 효율성이 증가한다
  • 마찬가지로 구조와 설계도에 해당하는 Class를 설계하고 객체로 활용한다면,
    • 재사용성이 증가하여 코드 반복을 최소화할 수 있고
    • 클래스에 유용한 메소드를 정의하여 활용이 가능하다

리스트 구조 프로그래밍의 단점과 예시

  • 관리 비정확성 : 많은 데이터가 존재할 때, 인덱스 접근으로 인한 실수 가능성 증가할 수 있다
  • 관리 비효율 : 인덱스 접근으로 인해 삭제 기능 또한 직관적이지 못하다
    car_company_list = ['Ferrari', 'Bmw', 'Audi']
    car_detail_list = [
        {'color' : 'White', 'horsepower': 400, 'price': 8000},
        {'color' : 'Black', 'horsepower': 270, 'price': 5000},
        {'color' : 'Silver', 'horsepower': 300, 'price': 6000}
    ]
    
    # 자동차 회사 삭제
    del car_company_list[1] # Bmw가 1번이라는 것을 알고 있어야 한다
    del car_detail_list[1]

딕셔너리 구조 프로그래밍의 단점과 예시

  • 아래와 같이 동일 코드를 반복해야한다는 점은 변함이 없다
  • key의 이름이 무조건 유일성을 가져야 문제없이 사용할 수 있다는 제약성이 존재한다
  • 특정 값 기준으로 단순 정렬을 할 때도 중첩 구조에 따라 코드의 복잡성이 증가할 수 있다
  • 키 조회에 대한 예외 처리를 마련해야한다
    cars_dicts = [
        {'car_company': 'Ferrari', 'car_detail': {'color' : 'White', 'horsepower': 400, 'price': 8000}},
        {'car_company': 'Bmw', 'car_detail': {'color' : 'Black', 'horsepower': 270, 'price': 5000}},
        {'car_company': 'Audi', 'car_detail': {'color' : 'Silver', 'horsepower': 300, 'price': 6000}}
    ]
    
    del cars_dicts[1]

Class 활용의 장점

  • 장점1: 구조 설계 후 (다른 언어에서는 Structure, 구조체라고도 한다) 재사용성이 증가하여 코드반복을 최소화할 수 있고,
  • 장점2: Class내에 method를 함께 설계하여 사용할 수 있다
  • Class 활용 프로그래밍 예시
    class MyModel():
        def __init__(self, company, details):
            self._company = company
            self._details = details
    
    		def detail_info(self):
            print('Current Id : {}'.format(id(self)))
            print('Car Detail Info : {} {}'.format(self._company, self._details.get('price')))

<Reference>

우리를 위한 프로그래밍 : 파이썬 중급 (인프런)

관련글 더보기

댓글 영역