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 ] 절차지향과 객체지향 (0) | 2017.04.03 |
---|
좀 알려주세요 현기증 난단 말이에요..