포스트

플레이데이터 데이터 엔지니어링 29기 2주차 회고

1. 학습 내용

  • 함수 및 클래스
  • 패키지 활용
  • 예외처리 구현


  • 캡슐화
    외부로부터 클래스에 정의된 속성을 보호하고, 필요한 부분만 노출될 수 있도록 하는 것을 캡슐화라고 한다.
    이러한 캡슐화를 통해 코드를 재수정 없이 재활용 할 수있고, 접근 제어자를 통해 정보 은닉이 가능하다.
    C나 Java에서는 private, protected, public 등의 접근 제어자가 존재한다. 하지만 파이썬에서는 제어자 대신에 ‘__속성이름’(‘_’ 2개) 을 통해 private로 제어 가능하다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
      class MyDate:
      def __init__(self, year, month, day):
          self.__year = year
          self.__month = month
          self.__day = day
        
      today = MyDate(2024, 1, 3)
      print(today.__year)
    
      """
      결과
      >>> 'MyDate' object has no attribute '_year'
      """
    

    참고로 (‘_’ 1개) 면 protected로 사용 가능하다고 한다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
      class MyDate:
          def __init__(self, year, month, day):
              self._year = year
              self._month = month
              self._day = day
            
      today = MyDate(2024, 1, 3)
      print(today._year)
      """
      결과
      >>> 2024
      """
    


  • Decorator
    속성에 접근 가능하도록 하기 위해 단순히 getter/setter 메소드 말고도, 데코레이터를 통해 접근 가능하다는 것을 알게 되었다.

    • 기본 getter/setter 사용
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
      class MyDate:
          def __init__(self,year):
              self.year = year
                
          def get_year(self):
              return self.year
            
          def set_year(self,year):
              self.year = year
      yy = MyDate(2024)
      yy.set_year(2025)
      print(yy.get_year())
        
      """
      결과
      >>> 2025
      """
    
    • 데코레이터 활용
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
      class MyDate:
          def __init__(self,year):
              self.year = year
    
          @property
          def year(self):
              return self.__year
            
          @year.setter
          def year(self,year):
              self.__year = year
    
      yy = MyDate(2024)
      yy.year = 2025
      print(yy.year)
    
      """
      결과
      >>> 2025
      """
    

    처음에는 왜 굳이 @property 를 활용해서 할당하는 거지? 라고 생각했었다. 그러나 여러 부분에서 강점이 있다는 것을 알게 되었다. 특히 속성값의 유효성을 검사하는 경우에 차이가 있었다.

    • setter에 조건이 있는 경우 (데코레이터 X)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    
      class MyDate:
          def __init__(self,year):
              self.set_year(year) # set_year 메소드를 호출해야함
                
          def get_year(self):
              return self.year
            
          def set_year(self,year):
              if year >= 1 and year <= 2030:
                  self.year = year
              else:
                  print("1 ~ 2023 사이의 값을 넣으세요.")
      yy = MyDate(2025)
      print(yy.get_year()) # 메소드를 통해 값을 얻거나 수정
      yy.set_year(-1)
    
      """ 
      결과
      >>> 2025
      >>> 1 ~ 2023 사이의 값을 넣으세요
      """
    
    • setter에 조건이 있는 경우 (데코레이터 O)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    
      class MyDate:
          def __init__(self,year):
              self.year = year # 따로 setter를 작성하지 않아도 됨
    
          @property
          def year(self):
              return self.__year
    
          @year.setter
          def year(self,year):
              if year >= 1 and year <= 2030:
                  self.__year = year
              else:
                  print("1 ~ 2023 사이의 값을 넣으세요.")
      yy = MyDate(2025)
      print(yy.year) # 변수처럼 값을 읽거나 수정 가능
      yy.year = -1
    
      """ 
      결과
      >>> 2025
      >>> 1 ~ 2023 사이의 값을 넣으세요
      """
    

    데코레이터를 활용하면, 메소드가 아닌 변수 처럼 활용하여 접근이 가능한 장점이 있었다. 또한, 유효성 검사를 위해 __init__ 생성자 내에서 다시 self.set_year를 작성하여 접근하였던 것과 달리, 데코레이터는 알아서 검사를 하므로 더욱 간편하게 활용이 가능하였다.

2. 전반적인 후기

파이썬의 클래스에 대해 자세히 알게되었다. 기존에는 메소드를 통해 접근을 제어하여 구현했었는데, ‘__‘를 통한 제어 방식과 데코레이터를 통해 간단히 구현이 가능하다는 것이 놀라웠다. 아직은 익숙치않지만, 다시 복습하면서 손에 익히면 더욱 좋은 코드를 구사할 수 있을것 같다는 생각이 든다.

3. To-Do

다음주부터 강의뿐만 아니라, 자료구조·알고리즘 스터디에도 참여를 하게 되었다. 지금보다 해야될 것이 많아 바쁘겠지만, 열심히 참여할 생각이다! 그리고 스터디 준비 과정에서 구현했던 “Notion API를 활용한 백준 문제 자동 등록”“깃허브 블로그 제작기”를 블로그에 게시할 계획이다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

© KangJJ. 일부 권리 보유