[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은 모두 같은 곳을 바라보고 있음
  • 클래스 변수를 가장 늦게 설명하는 이유는 클래스에서 클래스 변수보다는 객체 변수가 훨씬 중요
    • 실제로 클래스 변수보다는 객체 변수를 사용하는 비율이 훨씬 높다







댓글

이 블로그의 인기 게시물

[Python] # -*- coding: utf-8 -*-를 쓰는 이유

[소프트웨어공학] NS(Nassi-Schneiderman) 차트

[컴퓨터네트워크] Telnet이란?