티스토리 뷰

python - 클래스( 1 )






  클래스



   - 사용자 정의 데이터 타입

   - 메모리에 존재하지 않고, 실체화 되어있지 않다. 클래스안의 여러 속성을 객체( 변수 )를 통해 사용할 수 있다.

   - 하나의 클래스에 여러개의 객체를 둘 수 있다.

   - 클래스를 가지고 객체를 만드는 과정을 ' 인스턴스화 ' 라고 한다.

     # 인스턴스화된 인스턴스를 객체라고 한다.



  객체


   - 쿠키를 만들 때 클래스는 틀( 하트모양, 구름모양 )과 비슷하다. 

   - 별 모양의 틀( 클래스 )로 찍으면 별 모양의 쿠기( 객체 )가 생성되고 하트 모양의 틀( 클래스 )로 찍으면 

     하트모양 쿠기 ( 객체 )가 나온다.

   - 클래스란 똑같은 무언인가를 계속해서 만들어 낼 수 있는 설계 도면( Blue print ) 이고, 객체란 클래스에 

     의해서 만들어진 피조물( 별 또는 하트가 찍힌 쿠키 )을 뜻한다.




 ↑ 위의 클래스는 아무런 기능이 없는 껍찔뿐인 클래스이다.( 비어있는 클래스 )

    # 이러한 클래스도 객체를 만들 수 있다.  쿠키틀과 쿠키처럼

    # 객체는 클래스에 의해서 만들어지며 1개의 클래스는 무수히 많은 객체를 찍어낼 수 있다.

    # Programmer라는 클래스의 객체들 kim, park ( 동일한 타입의 서로다른 객체들 )

    # 변수는 실체화된 객체이다. Programmer라는 클래스를 직접가져와서 쓰는게 아닌, 변수( kim, park )을 통해서 사용한다.

        → 객체화( 인스턴스화 ) 시켜서 사용한다.

    # 변수의 타입을 결정하는 것이 클래스 이다.

    # 변수가 아닌 객체는 접근할 수 없기 때문에 변수는 객체라고 볼 수 있다.

    # 클래스 이름은 대문자로 시작한다( 암묵적 약속 )





  클래스 변수 ( 공유변수 )


   - 클래스 마다 하나만 존재하는 변수

   - 하나의 변수를 모든 객체가 공유한다.

   - 객체가 없어도 사용이 가능하다.

   - 객체가 생성되기 전에 클래스 변수는 존재한다.



 ↑ Service라는 클래스 생성

   # 클래스 Service에 의해 만들어진 객체 Kim

   # 객체 kim에는 Service 클래스의 생성위치가 담겨 있다.



 ↑ 객체 kim을 통해서 클래스 Service를 이용할 수 있다. 

    # 객체 kim에 foryou라는 변수를 " . ( 도트 연산자 )"를 이용해 호출할 수 있다.

    # foryou는 클래스 Service의 클래스 변수이다.




 클래스 변수는 객체간 서로 공유되는 변수로 보통 클래스에 의해 생성되는 객체들이 공통적으로 사용할 수 있다.

 따라서 Service 클래스에 의해 만들어진 객체 kim을 포함한 객체모두는 foryou라는 클래스 변수를 사용할 수 있다.

 



 ↑ 클래스변수는 객체( kim ) 를 통한 접근 방법( kim.foryou )외 클래스를 통한 접근도 가능하다.

   


 ↑ 클래스 변수는 " 공유되는 변수 "라는 특징을 가지고 있다.

    # 클래스 변수가 공유되는 변수이기 떄문에 객체 kim의 foryou도 변경

   




  클래스 함수



 Service 클래스가 제공하는 기능을 클래스 함수를 통해 더 늘릴 수 있다.



 ↑ 클래스 함수 sum을 통해 Service클래스에 더하기 기능을 추가했다.

   # 클래스 함수 sum을 호출할때도 도트 연산자를 이용한다.

   # 클래스 함수 sum에서 첫번째 인자를 self를 받고, 그 다음으로 a, b를 받는다. 

      → 입력으로 받는 입력 인수가 총 3개이다. 

   # 클래스 함수 sum은 self를 통해 객체인지 아닌지 판단한다.

      → kim.sum( 5,10 )를 호출하면 sum함수의 첫번째 인수인 self에는 호출 시 이용했던 객체( kim )가 자동으로 전달




 ↑ 클래스( Service )를 호출한 객체 ( kim )가 자동으로 첫번째 인수 self로 전달된다.

    # 클래스 함수를 직접 접근하기 위해서는 첫번째 인수 self값을 줘야한다. ( 객체를 이용하지 않기 때문에 )


 


 클래스 함수는 함수가 클래스내에 포함된 형태이다. 함수가 클래스내에 종속되어져 있다는 점이 특징이다.

 클래스 함수는 다른말로 메서드( Method )라고 부른다.

 파이썬 메서드 첫번째 파라미터명은 관례적으로 self라는 이름을 사용한다. 호출 시 호출한 객체 자신이 

 전달되기 때문이다. ( 다른 이름을 사용해도 무방 )

 




  객체 변수


   - 객체마다 존재하는 변수

   - 객체마다 주어진 변수를 참조한다

   - 객체가 생성되지 않으면 사용할 수 없다.

   - 객체를 먼저 생성해야 사용할 수 있다.



 ↑클래스 함수 setname을 이용해 객체 kim에게 이름을 부여해줬다.

    # 객체 kim과 ' 김파이썬 ' 이라는 이름을 연결해 주는 것이 바로  self 이다. setname함수가 실행되는 순서는 다음과 같다.

    # setname함수가 실행되는 과정


       1. >>> pey.setname( "김파이썬" )  # 객체 kim에게 " 김파이썬 "이라는 이름을 setname 함수에 입력으로 준다.

       2.  self.name = name            

       3.  kim.name = name                  # self는 setname 함수의 첫 번째 입력값으로 객체 kim을 받는다.

       4.  kim.name = " 김파이썬 "         # name은 setname 함수의 두 번째로 입력받은 값 "김파이썬" 을 받는다.

   

 


 클래스 함수 sum에서도 self.name 은 kim.name으로 치환된다. 그렇기 때문에 sum함수는 kim이라는 객체가 가진

 self.name값을 가져올 수 있는것이다.





   ↑객체 변수를 생성하는법

      # 클래스 변수가 객체간 서로 공유되는 변수라면 객체 변수는 객체별로 고유한 값이 저장되는 변수이다.

      # kim.name= " 김파이썬 "이 문장을 통해 객체 변수를 생성할 수 있다.




 ↑객체 kim의 name과 객체park의 name은 서로 독립된 변수이다.

   # 객체 변수의 값은 객체별로 고유하게 유지된다.





  __init__ 이란



 ↑멤버 변수 self.name을 선언해주지 않으면 위와 같은 오류가 난다. 

    # kim.setname( " 김파이썬 ")처럼 self.name값을 넣어주지 않으면 출력되는값과 인수가 맞지 않아서 오류가난다.

    # 이럴때 __init__를 사용하면 좀더 오류를 줄일 수 있다.



 ↑클래스 함수 setname의 이름을 __init__로 변경해주면, 객체를 만들때 항상 실행된다.

   # 객체를 만들기 위해서는 kim=Service() 가 아닌  객체를 만들때 name을 선언해줘야한다.  → kim=Service(" 김파이썬 ")

   # 




 















===참고=============

점프투 파이썬

'Python > [ Python ] 심화' 카테고리의 다른 글

[ Python ] 절차지향과 객체지향  (0) 2017.04.03