본문 바로가기
SK 행복성장캠퍼스/Python 기초

0907_6일차_클래스_메서드

by NickNuma 2020. 9. 7.

6일차. 마지막, 첫 번째는 클래스의 메서드에 대한 설명입니다.

 


일단 클래스의 메서드(method)란, 
클래스 내에 존재하는 하나의 함수라고 생각할 수 있습니다.
클래스 내에서 함수처럼 하나의 기능을 담당합니다. 
함수 생성과 마찬가지로 def로 시작합니다.
def 메서드명(self)
     문장

"""
   메서드 (method)
      1. 용도 : 함수처럼 기능적인 처리 담당
               클래스 내에서 선언된 함수이다.    ( 클래스 밖에서 선언된 함수 = 함수(function) )
      2. 문법(Syntax) :
               def 메서드명(self):
                     문장
         * 메서드명은 임의로 지정할 수 있다.
"""

 


class를 생성하면 우선, 생성자(def __init__(self):)를 만들고 --> 인스턴스 변수 초기화 역할
클래스의 기능 역할을 하는 메서드를 생성합니다.
(기본 setter와 getter 메서드 생성, def set_variable(self):, def get_variable(self):) --> variable을 수정하고 값을 반환하는 메서드

class Pet:

   # 생성자 (생성자 함수) : 인스턴스 변수 초기화 역할
   def __init__(self, a):     # a = 로컬 변수     # 로컬 변수 (임시 변수)  => stack 저장 -> LIFO -> 사용 끝 -> 데이터 삭제
      self.age = a            # self.age = 인스턴스 변수
                              # 객체 변수 / 인스턴스 변수 => heap 메모리에 저장 => 아무도 참조하지 않을때 힙에서 삭제
   # 메서드 : self.age를 수정하는 메서드           # heap => 사용이 끝났을 때 사라지는 것 x, 더 이상 참조되지 않을 때 -> 가비지 컬렉터가 삭제
   def set_age(self, a):   # setter 메서드
      self.age = a

   def get_age(self):      # getter 메서드
      return self.age
p = Pet(2)
#인스턴스 선언
print("현재 pet 나이 : ", p.age, p.get_age())    # 현재 pet 나이 :  2 2  # __init__ 생성자로 인스턴스 선언하면서 초기값 반환

#나이 수정 코드 추가
#setter 메서드 호출
p.set_age(3)         #__init__ 생성자로 초기화된 인스턴스 변수의 값을 수정함
# 메서드 호출시 해당 변수 stack에 저장 # stack의 변수는 인스턴스 변수에 저장되는데 이때는 힙 메모리에 저장

print("내년 pet 나이 : ", p.age, p.get_age())     # 내년 pet 나이 :  3 3 # 인스턴스에서 값이 반환되면 stack 내 메모리는 저장 (임시 메모리)

 


로컬 변수는 임시 변수로서 Stack에 저장되어 사용이 끝나면 데이터가 삭제됩니다.
self.variable로 표현되는 인스턴스 변수(객체 변수)는 Heap 메모리에 저장됩니다. 더 이상 참조되지 않을 때, 새로운 인스턴트가 선언될 때 --> 가비지 컬렉터에 의해 삭제됩니다.

# 인스턴스가 제거되는 시점
# 가. none 지정
# p = Pet(3)     변수 P --> Pet(3)
# p = None       변수 P --> None      // Pet(3) 인스턴스, 힙 메모리에서 삭제제

#나. 새새로운 인스턴스 저
# p = Pet(3)     변수 P --> Pet(3)
# p = Pet(4)     변수 P --> Pet(4)    // Pet(3) 인스턴스, 힙 메모리에서 삭제

 


대~충 기본적인 class의 구조입니다.
class 내에 생성자와 setter.getter 메서드가 존재합니다.

class Student:
   def __init__(self, name, age, region):      # name, age, region-> 로컬변수 -> stack 저장
      self.name = name                    # self.name -> 인스턴스 변수 -> heap 저장
      self.age = age
      self.region = region

   def set_name(self, name):     # setter 메서드
      self.name = name

   def get_name(self):     # getter 메서드
      return self.name

   def set_age(self, age):
      self.age = age

   def get_age(self):
      return self.age

   def set_region(self, region):
      self.region = region

   def get_region(self):
      return self.region

person = Student("홍길동", 20, "서울")
print("학생 1의 이름 : {}, 학생 1의 나이 : {}, 학생 1의 주소 : {}".format(person.name, person.age, person.region))

person2 = Student("이순신", 45, "전라")
print("학생 2의 이름 : {}, 학생 2의 나이 : {}, 학생 2의 주소 : {}".format(person.name, person.age, person.region))


주중에는 간단하게 설명을 하고 주말에 복습겸 다듬도록 하겠습니다.

그럼 이만~

반응형

댓글