#python #anaconda #jupyter-notebook #visual-code #html #css #javascript #http 제목[re]class 실습자료 예제 질문2022-03-06 19:25작성자저는파이썬이미워요이건 C++나 자바와 같은 다른 개체지향 언어를 배우면 확실히 알게 되실 내용이긴 합니다.학생이란 개체는 id와 name이라는 값을 저장하고 있습니다. 만약 프로그램에서 학생의 아이디를 저장했다가 전과를 했다거나 하는 어떤 이유로 중간에 정보를 바꾸려고 한다고 해봅시다.예를 들어 a 라는 학생의 아이디를 바꿀려면, a.setId(1234)이러면 a 학생의 id가 저장하는 값이 1234로 바뀌어요.a.id = 1234 로 해도 똑같은데 왜 이렇게 하냐고요?제가 파이썬을 싫어하는 수많은 이유 중 하나가 이겁니다. 두개 개념 구분이 잘 안되거든요.클래스에서 name 과 id는 개체가 담고있는 정보입니다. 그런데 프로그래밍을 할 때 어떤 개체를 만들고 나서 그 개체의 속성을 바꾸지 말아야 하는 경우가 있습니다. 그러면 원하지 않는 동작을 하기 때문이죠. 예를 들어 어떤 바보같은 프로그래머가 '학생 a가 듣고있는 한 강의를 학생 b가 듣는걸로 바꾸는 코드를 작성해야지' 라는 생각으로 코드를 짠다고 해봅시다. 똑똑한 여러분이라면 수업의 수강생을 저장하는 자료에서 a를 빼고 b를 저장할겁니다. 그런데 이 바보같은 프로그래머는 학생 a 의 이름과 아이디 항목에 b의 이름과 아이디를 집어넣어버렸습니다( a.name = b.name 이따구로요). 그러면 a 가 듣고있는 다른 과목들에도 b의 이름과 아이디로 표시되겠죠? 학생 b가 헤르미온느가 되어버리고 학생 a는 휴학생이 되어버리는 놀라운 결과가 나옵니다. 이런 경우가 바로 개체의 어떤 정보를 바꾸고 싶지 않은 경우입니다.위에서 a.setId(1234) 와 a.id = 1234 가 같은 동작을 한다고 했었죠? 다른 개체지향 언어에서는 보통 a.id = 1234 이런 방법으로 개체의 값에 직접 접근해서 바꾸도록 하지 않습니다. 만약 클래스의 정의를 봤는데, setId() 라는 함수가 있으면 '아 이 개체는 걱정할 필요 없이 아이디를 바꾸는 코드를 짜도 되겠구나 이렇게 이해할 수 있습니다. 반면에 이런 함수가 없다면 '이 개체의 아이디를 중간에 바꾸지 말아야 하는구나. 이걸 짜놓은 사람은 개체의 아이디가 중간에 바뀌지 않는 경우를 상정하고 나머지 코드를 짜놨겠구나.' 이렇게 생각할 수 있습니다.만약 클래스의 정의에서 setX() 는 없고 getX() 만 있다면 X의 값을 읽어올 수는 있지만, 중간에 이 값을 내가 임의로 바꿀 수 없다(이 코드를 짠 사람은 이 값을 바꾸는 동작을 기대하지 않는다)고 생각할 수 있습니다.다른 언어를 모르는 사람에게 설명하는 것이어서 자세한 설명은 다 못합니다. 다른 언어에서는 a.id = 1234 이렇게 직접 접근하여 바꾸는 것을 권장하지 않습니다(문법적으로 이것을 하지 못하게 할 수도 있습니다. 이 코드를 사용하는 사람이 실수하는 것을 막으려고요). get~, set~ 이런 함수가 정의되어있지 않다면, 이 값을 과연 바꿔도 되는지 명확하게 드러나지 않기 때문이죠.정리해서 말씀드리겠습니다.개체가 X라는 변수명으로 값을 저장하고 있다고 합시다. 그러면 보통 이 값을 바꾸는 함수 이름으로는 SetX 로 하고 값을 읽어오는 함수로는 GetX 이렇게 많이 씁니다. 세터, 게터 이렇게 많이 부릅니다. 파이썬은 개같아서 이거 없이 막 대입하고 값을 읽어오고 할 수 있지만, 겟터와 세터를 적절히 쓰면 자신의 의도를 더 정확히 표현할 수 있습니다. 다른 사람의 코드를 봤을때 클래스의 어떤 변수에 세터가 없다고 한다면 '이 값을 중간에 바꾸지 말아야겠구나' 이런 문화적인 이해를 해야합니다. 그리고 이런걸 잘하면 조별과제 할때 옆자리에 바보가 앉아있어도 이 사람이 덜 실수하게 할 수 있습니다.이걸 쓰는 또 한가지 이유로는, 개같은 파이썬을 쓸때도 다른 훌륭한 언어의 훌륭한 문화를 들여오면 좀 덜 개같은 기분을 느낄 수 있습니다.#setter# getter# set# get 목록수정삭제답변글쓰기 댓글 [0] 댓글작성자(*)비밀번호(*)내용(*) 댓글 등록 더보기이전class 실습자료 예제 질문ㅇ2022-03-06다음[re][re]class 실습자료 예제 질문ㅇ2022-03-07 Powered by MangBoard | 워드프레스 쇼핑몰 망보드