플레이데이터 데이터 엔지니어링 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를 활용한 백준 문제 자동 등록”과 “깃허브 블로그 제작기”를 블로그에 게시할 계획이다.