[Python] 클래스란?
[Python] 클래스란?
클래스를 쓰는 이유는?
- 위와 같이 똑같은 일을 하는 add1, add2라는 함수가 만들어졌고 각각의 함수에서 계산된 결과값을 유지하면서 저장하기 위한 전역변수 result1, result2가 필요하게 되었다.
- 상당히 비 효율적 코드
- Calculator 클래스로 만들어진 cal1, cal2라는 별개의 객체가 각각의 역할을 수행
- 각 객체의 결과 값 역시 다른 클래스의 결과값과 상관없이 독립적으로 결과값 유지
- 클래스를 상당히 간단해 짐
클래스에서 가장 헷갈리는 부분
- 파이썬 클래스에서 가장 헷갈리는 부분
- setdata라는 메서드는 매개변수로 3개를 필요로 하는데 왜 a.setdata(4,2)처럼 2개만 입력해도 실행이 될까....?
- 파이썬 메서드의 첫번째 매개변수명은 관례적으로 self라는 이름을 사용
- 호출 시 호출한 객체 자신이 전달되기 때문에 self라는 이름을 사용
- 물론 self말고 다른 이름을 사용해도 상관은 없다.
- 파이썬에서 위와 같은 코드를 자주 보게 된다.
- 여기서 중요한 것은 바로 self이다
- a.setdata(4,2)처럼 호출했을 때 자동으로 들어오는 객체 a라고 했다.
- 즉, self.first의 의미는 -> a.first
- 두 문장을 풀어 쓰면 위와 같게 된다.
※ 메서드의 첫번째 매개변수를 self를 명시적으로 구현해야 하는 것은 파이썬만의 독특한 특징이다. 예를들어 자바같은 언어는 첫번째 매개변수인 self가 필요없다.
생성자
위와 같은 클래스에서 __init__ 메서드만 따로 떼어 내서 살펴보자
- __init__메서드는 setdata메서드와 이름만 다르고 모든게 동일하다
- 단, 메서드 이름을 __init__으로 했기 때문에 생성자로 인식되어 객체가 생성되는 시점에 자동으로 호출되는 차이가 있다.
- a=FourCal()수행시 생성자는 __init__이 호출되어 위와 같은 오류가 발생했다.
- 오류가 발생한 이유는 생성자의 매개변수인 first와 second에 해당되는 값이 전달되지 않았기 때문
매개변수 | 값 |
---|---|
self | 생성되는 객체 |
first | 4 |
second | 2 |
위의 오류를 해결하려면 아래와 같이 실행하면 됨
위와 같이 수행하면 __init__메서드의 매개변수에는 각각 다음과 같은 값들이 대입 됨
클래스 변수
- 클래스변수 : Family 클래스에 선언된 lastname
- 클래스 안에 함수를 선언하는 것과 마찬가지로 클래스 안에 변수를 선언하여 생성
- 클래스 변수는 위 예와 같이 클래스명.클래스변수로 사용할 수 있다.
- 위와 같이 클래스 변수의 값을 변경했더니 클래스에 의해 생성된 객체들의 lastname값들도 모두 함께 변경되었음
- 즉, 클래스 변수는 클래스에 의해 생성된 모든 객체에 공유됨
- id 함수를 이용하면 클래스 변수가 공유됨
- id함수 : 객체의 주소를 return해주는 파이썬의 내장함수
- id 값이 모드 같으므로 Family.lastname, a.lastname, b.lastname은 모두 같은 곳을 바라보고 있음
- 클래스 변수를 가장 늦게 설명하는 이유는 클래스에서 클래스 변수보다는 객체 변수가 훨씬 중요
- 실제로 클래스 변수보다는 객체 변수를 사용하는 비율이 훨씬 높다
댓글
댓글 쓰기