python - 클래스와 객체

nahye·2021년 5월 12일
0
post-thumbnail

클래스와 객체

객체지향 프로그래밍

  • 프로그램을 객체와 객체간의 상호 관계를 중심으로 작성하자는 것이 객체 지향 프로그래밍이다.

클래스

  • 객체들이 가지는 공통된 속성과 메소드로 정의 되어진 설계도면 같은 것을 의미한다.

객체(Object)

  • 속성(특성)과 메소트(행위)를 가지고 있으며 이름을 붙일 수 있는 실체를 말하며 클래스를 실체화 혹은 인스턴스화 시킨 것이 객체이다.

  • 속성

    • self라는 키워드와 함께 사용한다.

class Person: # 클래스는 첫글자만 대문자로 해주면 됨(객체와 클래스를 구분하기 위해서)
    def __init__(self): # 클래스 안에 위치해 있는 함수 = 메소드
        # __앞,뒤에 있으면 특수한 목적
        # init은 생성자(constructor): 객체생성시 자동 호출됨, 속성을 정의하여 초기화 하기 위해 주로 사용함!
        self._hakbun = ""
        # self다음 점 찍고 나오는 것을 "속성"이라고 함
        self._irum = ""
        print("객체 생성")
    def setHakbun(self, hakbun):
        self._hakbun = hakbun
           # 속성      #로컬변수
        print("학번 변경")
    def setIrum(self, irum):
        self._irum = irum
        print("이름변경")
    def printData(self):
        print("학번 : ", self._hakbun, "이름 : ", self._irum)

if __name__ == "__main__":
    obj1 = Person() # 클래스 이름을 이용해 객체 만듬
    obj1.setHakbun("A001") #obj1은 글로별 변수
    obj1.setIrum("이기자")
    obj1.printData()

하나의 생성자와 메소드

메소드가 객체에 다 저장이 됨

'A001'이 hakbun에 저장되서
hakbun이라는 지역변수에 출력하고
지역변수는 소멸됨

'이기자'가 irum에 저장되서
irum이라는 지역변수에 출력후
지역변수는 소멸됨

객체가 만들어지면 주소가 저장이 되는데
self는 생성된 객체의 주소

self

  • self는 객체 자신을 가리키는 참조(=주소)이다.

객체(object) 생성

  • 형식) 변수명 = 클래스명()
  • ex) obj = Person()
    obj.setHakbun("A001")
    obj.setIrum

_hakbun, _irum => 속성

setHakbun(), serIrum(), printData() => 메소드(=함수)

생성자와 소멸자

객체가 없어질 때는
1. 참조되는 레퍼렌스가 없어질 때
2. 프로그램이 종료 될 때

Q. 프로그램이 종료되기 전에 소스에서 소멸자를 호출해야 하는건 어떤 경우인지 궁금합니다.

A. 공간을 할당 받았을 때 예상치 못한 상황이 발생해 프로그램이 종료되면 공간을 할다른 프로그램은 일부 공간을 영원히 못 쓰는 경우가 생기니 소멸자로 이를 대비해준다.

Q.소멸자를 그때그때 써주는 편이 좋나요?

A. 소멸자를 별도로 할당 받는 경우 소멸자를 써주는 게 베스트다.
단, 만든 객체가 다시 쓸일 없다고 생각되면 소멸자를 붙이지 않더라도 del 객체만 제거 된다. 제거 되면 그 공간을 또 다른 작업공간으로 활용할 수 있음.

Q. 소멸자를 사용한 삭제는 객체는 한번에 하나씩 제거가 되는 것인가요?

A. 위 코드의 경우 obj가 제거 되는 것

obj 객체를 제거 했는데 또 obj를 생성할 수 없음

이렇게도 할 수 있음

oj1 = Person()을 객체를 생성하면 오류난다.
어떻게 해야 오류가 안 날까?

C언어는 여러개의 생성자를 만드는 게 가능하지만
파이썬은 한가지의 생성자를 만들 수 있다.

메소드 오버로딩
메소드 이름은 동일하게 정의하되 파라미터를 다르게 주는 것
이름은 동일하더라도 파라미터 형식에 따라 식별이 가능함

파이썬은 메소드 오버로딩이 해당되지 않는다.
두 가지중에 한 가지를 선택해야함
obj와 obj1 중 하나를

파라미터가 없었던 obj에 넣어줌

Q. 객체의 멤버변수는 보통 언더바를 사용하나요?

profile
Slow and steady wins the race

0개의 댓글