Python

파이썬을 배워보자!!{클래스와 객체(3)}

25G 2021. 4. 14. 10:04

안녕하세요! 오늘도 클래스에 대해서 또 얘기를 해버려야 할 것 같습니다 ㅠㅠ 클래스에 대해서 알려드릴게 너무나도 많기 때문에 앞으로 몇 개의 포스팅도 클래스에 관련된 그런 포스팅이 될 것 같습니다.

오늘은!!! 클래스의 속성의 종류에 대해서 말씀드려보려 합니다! 속성?? 불,물,얼음.다합쳐서 마법의 힘 뭐 그런 거 아니고요 ㅋㅋㅋㅋㅋ

클래스 속성과 인스턴스 속성에 대해 말씀드리겠습니다.

 

클래스 속성은 해당 클래스가 가지고 있는 속성을 말해요 그러니 모든 객체가 공유할 수 있습니다.

 

인스턴스 속성은 해당 객체만 가지고 있는 속성이므로 객체마다 고유의 값을 가지게 한는속성입니다.

 

지금은 글로만 설명드려서 이게 뭔 소리인가 싶으실 겁니다

코드로 보여드릴게요

이동수단에 대한 클래스를 만들어 봤어요

위 코드를 보면 해당 객체만 가지고 있는 속성으로 고유의 값을 가지게(인스턴스 속성)할만한 코드가 보이시지 않으신가요?!! 

네 바로 생성자 친구들인데요 저번 글에서도 말씀드렸지만 생성자는 객체마다의 개성? 객체마다의 특성을 부여할 수 있도록 여러 가지 요소들을 넣어놓는데요 그럼 위에 설명드린 인스턴스 속성과도 말이 들어맞죠??

 

 

그럼 클래스 속성은 어떤 것일까요??

클래스 속성은 위의 코드에서 찾아볼 수 있습니다

클래스 속성이 뭐라고 그랬죠?!!! 해당 클래스가 가지고 있는 속성! 그러니 활동폭이 하나의 객체가 아닌 클래스 전체인 것입니다!

감이 있으신 분들은 여기서 클래스 속성을 가지는 코드가 어떤 것인지 바로 찾으실 수 있을 것인데요 바로 2번째 줄에 있는 passengerList입니다! passengerList에 배열을 선언하고 있는데요! 배열을 넣을 공간만 만들어 놓고 있습니다 아직까진 빈  껍데기죠. 그리고 getIn메서드로 name매개변수를 append라는 메서드를 통해서 passngerList에 name매개변수를 추가하겠다고 말하고 있습니다!

 

그리고 bicycle에 Transport() 클래스 인스턴스를 선언하고 vehicle과 motorcycle객체에서 인스턴스를 선언하고 있네요

그리고 순서대로 getIn매서드를 호출해서 문자열을 저장하고 있습니다 

마지막으로 passengerList를 호출하며 출력하는 소스코드가 나오고 위 소스코드는 끝이 나는데요

어떻게 출력될까요?? 종이와 팬을 사용해서 그려 보시는 것도 도움이 많이 될 것입니다

 

getIn메서드 내에서 passengerList에 요소를 찾을 때 이 객체가 인스턴스 속성으로 요소를 가지고 있는지 먼저 찾습니다 그리고 있으면 요소를 추가하고 없다면 Transport클래스에서 추가할 요소를 찾습니다. 만약에 클래스에도 추가할 요소가 없으면 데이터를 넣을 공간이 없으니  오류가 나겠죠?! 하지만 위 소스코드에 2번째 줄에 passengerList로 배열을 선언해 냈지요? 

그리고 인스턴스엔 요소를 추가할 공간이 없으니 클래스에 passengerList로 추가가 될 것입니다 그럼 출력은 

["홍길동", "설까치", "하니"]가 출력이 되겠지요!!

 

그리고 마지막으로 접근제어를 간단하게 설명해 드리며 마무리를 지을게요

일단 접근제어는 어떠한 데이터를 접근하는 것에 대한 조건을 달아주는 것이에요! 

왜 필요하냐고요?! 조금만 생각해 보면 알 수 있듯이 바로 "보안"때문이랍니다. 

여러분이 고생 고생해서 프로그램을 만들고 서비스를 실시했는데 접근제어 타입이 전부 접근 가능한 데이터라면 어떻게 될까요?! 

여러분이 멍 고생해서 만든 프로그램이 다 해킹당하고 수정당하고 아주 지들 마음대로 가지고 놀 것 아닙니까!!ㅜㅜ 그럴 순 없지요~ ㅎㅎ

사람은 늘 실수를 하기 때문에 코딩을 하다 보면 실수를 할 수 도 있습니다. 하지만 프로그래밍을 조금이라도 해보신 분은 아시겠지만 점하나도 잘 못 찍히면 실행이 되던 코드가 실행이 안 되는 경우가 허다하다 보니 그런 부분이 예민할 수밖에 없는데요

위 소스코드에 제가 아주 잘 보이게 표시를 해놨죠?! __이런 식으로 언더바 두 개를 붙여주면 외부에서 수정할 수 없는 비공개 요소가 됩니다

근데 수정을 할 수 없으면 어떤 문제점이 생길까요?

네 바로 수정을 해야 될 상황이 오게 되면 어떻게 할까?입니다 그래서 사용하는 게 getter와 setter입니다

위 소스코드를 보면 getter는 return으로 반환 값을 사용해 요소를 수정하고! setter를 보시면 간접적으로 값을 수정하는 것을 볼 수 있습니다

그래서 보통 코딩을 할 때는 요소들은 다 비공개 요소로 설정 해 놓은 뒤 getter와 setter를 사용해서 그 값을 핸들링 한답니다!

 

 

오늘도 긴 글 읽어 주셔서 감사하고요! 다음에 봐요!!