TIL 32. python OOP 기초

rahula·2021년 6월 5일
0

python

목록 보기
6/10
post-thumbnail

파이썬의 OOP(객체지향 프로그래밍) 기초에 대해 공부한 것들을 기록합니다. 이 글은 책 점프 투 파이썬을 토대로 작성됐습니다.

객체

Class와 object

파이썬에서는 Class로 생성한 개체들을 객체라고 부른다. 딕셔너리와 객체는 완전히 다르다.

객체마다 고유한 속성을 갖는다.
동일한 Class로 만든 객체들은 서로 일절 영향을 주지 않는다.

계산기 Class와 그 인스턴스로써 만든 객체.

class Calculator():
    def reset_data(self, first, second):
        self.first = first
        self.second = second
    
    def plus(self):
        result = self.first + self.second
        print(result)
        return result
    
    def minus(self):
        result = self.first - self.second
        print(result)
        return result
    
    def multiply(self):
        result = self.first * self.second
        print(result)
        return result
    
    def divide(self):
        result = self.first / self.second
        print(result)
        return result

my_cal = Calculator()
my_cal.reset_data(300,400)

my_cal.plus() # 700
my_cal.minus() # -100
my_cal.multiply() # 120000
my_cal.divide() # 0.75

his_cal = Calculator()
# his_cal.reset_data(100,200)
print(his_cal.first)
print(his_cal.second)

object와 instance의 차이?

object는 'Class로 만든 무엇'을 뜻하고, instance는 그 무엇이 Class와 어떤 관계를 갖는지 설명하는데 쓰인다.
예를 들어 samsung_phone은 Phone이라는 Class의 instance이다.

메서드

Class안에 구현된 함수는 메서드라고도 부른다.
메서드는 Class안에서 선언되었을 뿐, 함수와 기본적으로 같다.

메서드의 첫번째 매개변수 self

파이썬은 모든 메서드를 하나의 argument와 함께 사용한다.
매개변수 self는 특별한 의미를 가진다.

첫번째 매개변수 self에는 메서드를 호출한 객체가 자동으로 전달된다. 따라서 어떤 메서드가 매개변수를 3개받는다고 하면 실제로 넣게되는 인자값은 2개이다.

디폴트 method

__str__같은 메서드는 따로 정의하지 않아도, class에 디폴트로 들어있다.
이처럼 Class에는 디폴트 메서드들이 있고, 따로 정의해주지 않아도 호출해서 쓸 수 있다.

객체변수

객체변수는 객체에 생성되는 객체만의 변수를 말한다. 클래스로 만든 객체의 객체변수는 다른 객체의 객체변수와 상관없이 독립적인 값을 유지한다. 애초에 객체끼리 주솟값이 다르기 때문에, 한 객체의 객체변수를 바꾼다고 해도 다른 객체들은 일절 상관이 없다.

print(id(first_obj)) # 139653066210080
print(id(second_obj)) # 139653066427552

생성자(Constructor)

객체에 초깃값을 설정해야 할 필요가 있을 때엔 따로 메서드를 호출하는 것보다 생성자를 구현하는 것이 안전한 방법이다. 생성자란 객체가 생성될 때 자동으로 호출되는 메서드를 의미한다.

메서드의 이름으로 __init__을 사용하면 이 메서드는 생성자가 된다.

    def __init__(self, first, second):
        self.first = first
        self.second = second

상속

상속이란 어떤 클래스를 만들 때 다른 클래스의 기능을 물려받을 수 있게 만드는 것이다. 상속은 기존 클래스는 그대로 놔둔채 클래스의 기능을 확장시켜야 할 때 주로 사용한다.
기존 클래스가 라이브러리 형태로 제공되거나, 수정이 허용되지 않는 상황일 때 특히 상속을 자주 쓰게 된다.

메서드 오버라이딩

메서드 오버라이딩이란, 부모 클래스에 있는 메서드를 동일한 이름으로 다시 만드는 것을 의미한다.

super

어떤 클래스를 다른 클래스에게 상속할 때, 원본이 되는 클래스를 super class 혹은 부모 클래스라고 부른다.

메서드 안에서 super함수를 호출하면, 부모클래스의 메서드를 자식클래스의 메서드에서 호출할 수 있다. 주로 부모클래스의 메서드를 코드의 반복 없이 오버라이딩하고 싶을 때 사용한다.

클래스 변수

클래스 변수는 동일한 클래스로 만든 모든 객체에 공유되는 변수이다. 자식 객체에서 따로 오버라이딩을 하지 않는 이상, 모든 자식 객체는 부모 클래스의 클래스 변수를 똑같이 갖는다.

profile
백엔드 지망 대학생

0개의 댓글