2019년 1월 18일 금요일

파이썬 클래스(Python Class)


파이썬 클래스


일반적으로 클래스는 단어의 첫글자가 대문자
예시)PythonClass

파이썬에서는 자바와 다르게 클래스 없이도 프로그램을 만들수 있다

하지만 클래스를 알고 사용하지 않는 것과 몰라서 사용 못하는 것은
코드 이해 및 편리함에서 차이가 있으므로 간단하게 알아보도록 하자


클래스라는것은 무엇일까


많이들 클래스는 설계도면이고
그 설계도면(클래스)로 만들어지는 애들이 객체 라고들 한다

예시)

        python에서 클래스를 정의

        class MyClass:
               클래스 구성

        객체 (a , b) 의 생성

         a = MyClass()
         b = MyClass()


※객체 ?   인스턴스?


   인스턴스 : 관계를 나타낼 때 사용   ex) a는 MyClass의 인스턴스
   객체       : 타입을 나타낼때 사용    ex) a는 객체


클래스의 구성요소


메서드  :  함수인데 클래스에 포함된 함수라 생각하자
             첫번째 parameter로 self를 사용한다

                      예시) class MyClass:
                                    def mymethod(self,a):

              즉 객체를 생성하게 되면 객체 자기자신이 메서드의 인자로 전달된다
           
              메서드를 사용하는 방법
             
              클래스.메서드
              >>> a = MyClass()                        a 객체 생성
              >>> MyClass . mymethod(a, value)   클래스.메소드를 이용하여 사용
                                                              ⭐이때 a객체를 꼭꼭 전달해줘야한다
              메서드(권장)
              >>> a = MyClassl()                      a 객체 생성
              >>> a.mymethod(value)                객체.메서드를 이용하여 사용
                                                             ⭐꼭 a객체를 인자로 전해주지 말자


객체변수 :  객체마다 독립된 변수를 가진다

               객체.변수이름 으로 정의한다
           
               예시)
                     myObject . myvariable1
                     myObject . myvarialbe2

                     myObject . myvariable1


클래스 변수 :  클래스 변수는 객체마다 공유하고 있는 변수
                 
                   class MyClass:
                          classvariable = 1
                 
                   a=MyClass()
                   b=MyClass()
                   MyClass . classvariable   ==> 1
                   a.classvariable              ==> 1
                   b.classvariable              = 2                  클래스 변수를 2로 바꿨다
     
                   a.classvariable              ==> 2               다른 객체라도 2로 변경

                   이런식으로 MyClass로 생성된 객체라면 공유하는 변수
               
                   ※id(Class.클래스변수)      id(객체.클래스변수)
                     이렇게 해주면 어디에 저장이 되어있는지 주소값이 나오는데
                     같은 주소값이라는 말은 같은 아이를 쓰고 있다는 말이다

생성자     :  객체를 생성함과 동시에 객체에 대한 설정을 할 수 있다
           
                예시)
                      class MyClass:
                         def __init__(self, value1,value2):
                            self.value1 = value1
                            self.value2 = value2

                      선언을 해주고
                      a = MyClass(1,2) 
                      이렇게 객체를 생성하면
                      a.value1 => 1      a.value2 => 2

             

클래스 상속



클래스를 변경하지 않고 기능 추가, 기존의 기능덮어쓰기 등에 사용한다

class ChildClass(ParentClass):
       def childmethod(self):

이런식으로 ParentClass의 변수,메서드를 ChildClass는 사용할수 있고
추가적인 메서드 변수를 만들고 사용할수 있다

단! 반대로 ChildClass에서 새롭게 정의된 메소드와 변수는 ParentClass로 만든
객체로는 사용할수 없다


메소드 오버라이딩


오버라이딩이란 덮어쓴다는 의미로
ParentClass에서 사용된 method를 똑같이 ChildClass에서 재정의하고
내용만 바꾸어 사용하는 것이다


그럼 ParentClass객체에서는 ParentClass의 method가
ChildClass객체에서는 ChildClass의 method를 사용할수 있다.


가장 많이 본 글