34. 클래스와 메서드 만들기

다시나온 object
여전히 객체란 단어가 들어도 들어도 익숙해지진 않는다.

롤할때 '야 객체먹어 객체 컨트롤해~ '
롤도 게임이고 프로그램으로 되있는거니
틀린말은 아닌데 이거 참 어감이 구리다..
아무도 안쓰기도 하고ㅋㅋ

우리나라 말은 ~~하는 것이라는 뜻을 가진 표현이
딱히 괜찮은게 없어서 그런거 같음(thing, stuff 같은거)

앞서 프로그래밍은 큰 문제를 조그마한 것들의 합으로
쪼개어서 합치는 방식을 가지고 있다고 했는데
이것을 object oriented(객체지향) 프로그래밍이라고 한다.
이거도 또 한자나오니 단어가 좀 어려워지는거 같지만
그냥 object를 조정해서 만들어진 세계? 이정도로 이해하자.

지금까지 봐왔던
다양한 객체들의 타입
'문자열', 정수, 리스트 etc.. 이런거만으로
코딩이 다 되면... 참 좋겠지만

실제로는 각 객체들은 여러가지가 다양한 속성을 가진다.
매번 하나의 객체에 다양한 속성을 일일히 부여하긴 힘드니까
이런 애들끼리 모아서 class(반)를 정의한다.
대충 비슷한 애(객체)들끼리 모아두자 라는 느낌.

예를들어 게더타운 아바타를 하나의 클래스로 본다면
아바타라는 표시되는 객체(object)는
id, 모자, 상의, 하의 등의 특성을 가진다.

클래스와 클래스에 사용할 메서드를 지정하는 방법은

class avatar:     # 게더에서 사용할 아바타 클래스를 만듬
    def id(self): # id를 입력받는 메서드를 지정
        'codes'   #gui로 클릭한거 input()으로 받기.. 잘 몰름
    def head(self): # 머리 모양을 입력받는 메서드를 지정
        'codes'     #gui로 선택한거 받기 (잘 몰라요)
    def ~~        : # 그외 아바타를 구성하는 메서드를 정의

위와 같이 아바타라는 클래스를 하나 만들어두면
사람들이 만드는 아바타에 일일히 코딩를 하지 않아도
어느 정도 틀이 만들어져있기 때문에
정하는 id, 머리, 상의, 하의 등만 가지고
아바타 객체를 만들 수 있으므로 굉장히 편리해진다.

stormofdawn = avatar() # 새 계정에 아바타 class를 할당
 # 새로만든 객체인 newaccount를 인스턴스라고 함
stormofdwan.id         # id를 입력하는 메서드를 실행

여기서 사용한 'self'
클래스 안에는 여러 친구들이 들어가기 때문에
ex) 위의 설명에서는 게더의 계정을 만들고 접속한 여러명
각 인원을 구분하기 위해서 사용한다.
인스턴스값을 그대로 반환하는 특징을 가지며,
메서드에는 거의 항상 self 인자를 사용한다.


위와 같이 특정 클래스를 만들어
클래스 내의 메서드를 사용할 수도 있지만
초기부터 인스턴스에서 속성을 지정해 사용할수도 있다.

init

init 메서드는 클래스에 괄호를 붙여
인스턴스를 만들 때 인스턴스를 초기화(안에 들어있는 값을 리셋?)
하고 위에서 메서드를 사용해 각각 따로 받았던
값들을 초기값으로 지정해서 받아올 수 있다.

class avatar:
    def __init__(self, id, 모자, 상의, 하의):
    # 클래스를 정의할 때, 위 4값을 지정하도록 함
        self.id = id      #인스턴스.id로 id값만 반환가능
        self.모자 = 모자
        self.상의 = 상의
        self.하의 = 하의
    def __init__(self, *list):
        self.id = list[0] #리스트 언패킹을 통해 인덱스로 정리가능
    def __init__(self, **dict):
        self.id = dict['id'] # 딕셔너리 언패킹을 통해 키값으로 정리가능

위와 같이 미리 인스턴스를 만들때 값을 받아온다면

stormofdawn=class('z1존맨', '빵모자', '검정베스트', '청바지')
# 초기에 지정한 값을 항상 불러옴
stormofdawn.id   #인스턴스.속성 을 통해 접근 가능
output ='z1존맨'

방식으로 인스턴스에 인수를 전달할 수 있으며,
클래스 밖에서도 클래스 값을 항상 가져올 수 있다.

속성은 위와같이 개수를 지정해주거나
리스트, 딕셔너리 언패킹을 통해 지속적으로 추가하거나
때에 따라 삭제할 수 있지만

__slots__ = [속성1, 속성2]  #속성 개수를 지정해버림
self.__속성         #클래스 속성을 비공개로 함(메서드밖에서 접근 불가.
def __모자(self):   #메서드 자체도 비공개로 함

등의 방식으로, 클래스 내부에서만 메서드의 값을 변화가능하게
하거나, 추가적인 속성이 붙지 않도록 할 수 있다.

좋은 웹페이지 즐겨찾기