본문 바로가기
ALGORITHM/SW Expert Academy

[SWEA/Python] 6217. 객체지향 3

by 안녕나는현서 2021. 7. 30.
728x90

📌 문제

https://swexpertacademy.com/main/main.do

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

📌 문제 접근 방법

[property]

- 입력데이터를 검증하지 않는다면? 잘못된 입력이 들어올 수 있음

- 따라서 적절한 멤버 필드의 접근 제한 필요! -> 인스턴스 변수의 접근 제한 기능

class Person :
	...
    self.__name = name   # 던더스코어를 앞에 붙이면 프라이빗 필드 생성됨

- 프라이빗 필드를 생성하면 getter/setter 메서드의 제공 여부에 대한 고민이 필요

  • getter : 멤버를 읽어오는 메서드
  • setter : 멤버를 변경하는 메서드
class Person :
	...
    def get_name(self) :    # __name 필드의 값을 반환하는 getter 메서드
    	return self.__name  
        
    def set_age(self, age) :
    	if age < 0 :
        	raise TypeError('나이는 0이상의 값만 허용합니다.')
        self.age = age

- 데코레이터 기능 : getter/setter를 대신하는 기능

class Person :
	...
    @property          
    def name(self) :   # 변수 이름과 같은 메서드를 만들어 사용 가능
    
    ...
    @age.setter
    def age(self, age) :
    	if age< 0 :
        	...
members[0].age = 22   # age는 메서드지만 age@property를 이용해 변수처럼 값 저장

 

📌 코드

class Student :
    def __init__(self, name) :
        self.__name = name

    @property
    def name(self) :
        return self.__name
        
    def __str__(self) :    
        return f'이름: {self.name}'

class GraduateStudent(Student) :
    def __init__(self, name, major):
        super().__init__(name)
        self._major = major

    @property
    def major(self) :
        return self._major

    def __str__(self) :
        return f'이름: {self.name}, 전공: {self.major}'


hong = Student('홍길동')
print(hong)

lee = GraduateStudent('이순신', '컴퓨터')
print(lee)
728x90

댓글