객체 지향 프로그래밍의 4개의 기둥캡슐화데코레이터를 사용한 캡슐화

Q

데코레이터 캡슐화 이후 실행하는 함수들의 정확한 의미.

조회 788

좋아요 10

2020년 2월 29일




댓글 3

2020년 2월 29일
작성하는데 시간은 조금 걸릴 것 같지만 다른 분들한테도 도움이 될만한 좋은 질문 같네용^^ 오늘안에 답변하는걸 목표로 해보겠습니당
2020년 7월 7일
네. 질문을 상세히 해 주셔서 답변 보고 이해가 쉬웠습니다. 감사합니다.
2020년 7월 7일
질문을 잘 하는 게 실력이군요 ^_^
A
2개의 답변이 있어요
커뮤니티 파트너 채택



2020년 3월 1일

댓글 1

2020년 3월 2일
답변감사합니다!



2020년 2월 29일

댓글 4

2020년 2월 29일
우선 강의 설명에서 print(young.age) 가 실행 될 때는 @property 로 되어있는 getter 메소드가 자동 실행된다고 설명을 했고 young.age = 20 에서는 setter 메소드가 자동 실행된다고 하였습니다. 그러면 나이를 리턴한다는 메시지가 먼저 나올 거라고 생각했습니다. 그 이전에 "나이를 설정합니다." 라는 출력메시지가 young = Citizen(...) 의 결과로 나오는 메시지 인줄 몰랐습니다. 답변 감사합니다.
2020년 2월 29일
그럼 정리하자면 young = Citizen("young", 25, "12345678) 의 결과 이닛 메소드가 실행되고 이닛 메소드 안의 self.age 는 setter 를 실행하라는 의미가 되는 것인가요? 그러면 이닛 메소드 안의 self.age = age 를 어떻게 해석해야 하나요? = 를 기준으로 왼쪽은 setter 실행-->그 결과 "나이를 설정합니다" 출력후 self._age = value 가 되고(그런데 추가로 여기서 value 는 Citizen("young", 25, "12345678) 에서 25를 받아오는 것인가요?) 그럼 일단 이닛 메소드의 self.age = age 에서 self.age 는 setter 의 기능으로 처리 되었는데 = 을 기준으로 오른쪽에 있는 age 는 어떻게 되는 건가요?
2020년 2월 29일
마지막으로 출력값이 어떻게 생성되었는지 다시 한 번 정리해보면 young = Citizen("young", 25, "12345678") 의 결과 init 메소드 실행-->그 결과 그 안의 self.age 는 데코레이터에 의해 의미가 바뀌어서 setter 를 실행하게 하고 그 결과로 "나이를 설정합니다" 라는 메시지 출력후 self._age = 25 가 됩니다. 그리고 print(young.age) 는 우선 print 안의 young.age 구문이 property 데코레이터에 의해 그 의미가 age 함수를 실행하라는 의미로 바뀌었고 그래서 그 실행 결과 "나이를 리턴합니다." 메시지 출력후 리턴값으로 self._age 를 받으므로 print(self._age) 가 되어서 print(25) 가 되어 25 가 출력값이 되는 것인가요? 그리고 마지막으로 이름이 같은데 setter 메소드이냐 getter 메소드이냐는 = 을 기준으로 왼쪽이냐 오른쪽이냐 이거나 제가 생각해보니 이게 말로 설명하기는 힘든데 당연히 상황에 따라 당연히 getter 메소드이냐 setter 메소드이냐가 정해지는 것 같기는 한데 맞나요?
2020년 3월 1일
제 긴 답변을 읽고 다시 긴 질문을 해주셔서 감사합니다.

저의 답변은 아래의 답변하기 방식으로 다시 드리겠습니다.

(주) 코드잇

대표강영훈

개인정보보호책임자강영훈

이메일support@codeit.kr

사업자 번호313-86-00797

통신판매업제 2019-서울중구-1034 호

주소서울특별시 중구 청계천로 100 시그니쳐타워 동관 10층 코드잇