Boostcamp AI Tech

[Boostcamp Day-4] Python - Object Oriented Programming

ju_young 2021. 8. 5. 15:18
728x90

객체지향 프로그래밍(Object-Oriented Programming, OOP)는 객체 개념을 프로그램으로 표현할 수 있다. 여기서 객체는 속성(attribute)와 행동(action)을 가진다. 그리고 속성은 변수(variable), 행동은 함수(method)로 표현할 수 있다.

OOP는 설계도에 해당하는 클래스(class)와 실제 구현체인 인스턴스(instance)로 나눌 수 있고 클래스는 붕어빵틀, 인스턴스는 만들어진 붕어빵에 비유할 수가 있다.

class

class SoccerPlayer(object):
    def__init__(self, name, position, back_number):
        self.name = name
        self.position= position
        self.back_number= back_number

    def change_back_number(self, new_number):
        self.back_number= new_number

class 선언

 class SoccerPlayer(object):

attribute 추가

     def__init__(self, name, position, back_number):
        self.name = name
        self.position= position
        self.back_number= back_number

여기서 '__'는 특수한 예약함수나 변수 그리고 함수명 변경(맨글링)으로 사용된다. 더블 언더스코어라고도 하고 줄여서 던더바라고 하기도 한다.

method 구현

   def change_back_number(self, new_number):
        self.back_number= new_number

method추가 할 때 반드시 self를 추가해야만 class 함수로 인정된다.

인스턴스 사용

jinhyun= SoccerPlayer("Jinhyun", "MF", 10)

여기서 클래스명과 각 parameter값을 입력해주고 jinhyun이라는 변수에 저장하면 이제 이 jinhyun이라는 변수가 인스턴스가 되는 것이다.

상속

상속은 부모클래스로부터 속성과 method를 물려받은 자식 클래스를 생성하는 것을 말한다.

class Person(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age

class Korean(Person):
    pass

다형성

같은 이름 메소드의 내부 로직을 다르게 작성하는 것으로 오버로딩이라고도 하는 것 같다.

 class Animal:
     def __init__(self, name):
        self.name = name

    def talk(self):
        pass

class Cat(Animal):
    def talk(self):
        return 'a'

class Dog(Animal):
    def talk(self):
        return 'b'

가시성

객체의 정보를 볼 수 있는 레벨을 조절하는 것을 말하는데 누구나 객체 안에 모든 변수를 볼필요는 없기 때문에 은닉시킬 필요가 있다. 다음과 같이 변수앞에 __를 붙여 private 변수로 선언하면 타객체가 접근할 수 없다.

class Inventory(object):
    def __init__(self):
        self.__items = []

만약 다음과 같이 @property를 함수 위에 추가해주면 숨겨진 변수를 반환하게 해준다. 여기서 @property는 decoration이라고 한다.

@property
def items(self):
    return self.__items

<인스턴스 이름>.items라고 하면 함수를 변수처럼 호출해준다.

728x90