파이썬을 위한 객체지향 프로그래밍 기본 개념 설명

비전공자로써 파이썬을 하며 겪었던 힘든 내용들 중 객체의 핵심 내용 위주로..


우선 다음의 예시를 위한 클래스를 정의해보자

class User:
    def say_hello(user):
        print(f"안녕하세요! 저는 {user.name}입니다.")

    def login(user, my_email, my_password):
        if (user.email == my_email and user.password == my_password):
            print("로그인 성공")
        else:
            print("로그인 실패")

유저클래스는 해당 유저의 이름과 로그인 성공 실패 여부를 나타낸다.


 

인스턴스 메소드의 특별한 규칙

객체 지향 프로그래밍에 대해 정말 아무것도 모르시다면, 매우 간단히 정리해놓은 이전글을 참고하고 오시길..

 

객체 지향 프로그래밍

객체 속성, 행동 모든 것이 객체가 된다. 현실에 존재하든 가상이든 속성과 행동이 떠오른다면 객체가 될 수 있다. 객체지향 프로그래밍: 객체들과 객체들간의 소통 객체지향적으로 설계 = 모델�

koreadatascientist.tistory.com

 

User.say_hello(user1) # 클래스에서 메소드 호출
user1.say_hello() # 인스턴스에서 메소드를 호출

인스턴스에서 메소드를 호출하면, .(dot)왼쪽이 첫번째 파라미터로 자동으로 들어간다.

만약 이 상태에서 괄호를 빈 채로 놔두지 않고, 파라미터까지 써준다면, 2가지의 parameter를 넘겨준것이나 다름없다. 

그러므로 1개의 파라미터를 넘겨줘야 되는데, 2개를 넘겨줬다는 오류가 뜬다.

이는 마치 아래의 에러 코드에서 알 수 있듯, 중복된 파라미터로 기능을 한다.

user1.say_hello(user1) # 에러; 파라미터를 2개 전달받음
User.say_hello(user1, user1) # 위와 동일한 기능

 

파이썬의 첫번째 파라미터 권장사항

파이썬에서는 인스턴스 메소드의 첫번째 파라미터에 대해 'self'로 써주기를 권장한다.

그런 이유로 대부분의 파이썬 IDE(VScode, Pycharm 등)에서는 클래스 내의 메소드를 입력할 때 자동완성으로 첫 번째 파라미터로 self를 생성한다.

self는 결국 주인공일 것이고, 이것은 가독성도 좋게 만든다.

self를 적용해서 위의 클래스를 새로 정의하였다.

맨 위에서 정의한 클래스와 현재 클래스에서 달라진 내용이 무엇인지 찾아볼 것.

class User:
    def say_hello(self):
        print(f"안녕하세요! 저는 {self.name}입니다.")

    def login(self, my_email, my_password):
        if (self.email == my_email and self.password == my_password):
            print("로그인 성공")
        else:
            print("로그인 실패")

 

인스턴스 변수와 같은 이름을 갖는 파라미터

파라미터로 넘기는 변수 이름이 name인 경우가 있고,

인스턴스 변수가 user.name 이라면, 중복의 문제가 없을까?

class User:
    def say_hello(self):
        print(f"안녕하세요 {self.name}입니다.")
        
    def check_name(self, name):
        return self.name == name

맨 아래 코드를 잘 보면 self.name == name이다.

self.name은 인스턴스 변수를 나타내는 name을 의미하고,

뒤의 name은 파라미터로 받은 name이다.

과연 이 둘은 충돌의 문제가 있지 않을까?

 

결론적으로, 없다.

객체 속성, 행동

모든 것이 객체가 된다. 

현실에 존재하든 가상이든 속성과 행동이 떠오른다면 객체가 될 수 있다.

객체지향 프로그래밍: 객체들과 객체들간의 소통

객체지향적으로 설계 = 모델링

1. 객체 정하기

2. 객체들의 속성과 행동 정하기

3. 객체들이 어떻게 소통할지 정하기

 

클래스로 객체를 만든다.

객체 = 인스턴스(엄밀히는 다름)

 

객체의 속성과 행동은 각각 인스턴스 변수(name, email, password)와 함수로 나타낸다

속성 → 변수, 행동 → 함수(메소드) 

ex. 클래스 안의 함수를 정의했다 = 메소드를 정의했다.

 

  • 인스턴스 메소드
    • 인스턴스 변수 사용, 인스턴스 변수에 값을 설정 ex. user1.name = "홍길동"

+ Recent posts