객체지향 프로그래밍(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라고 하면 함수를 변수처럼 호출해준다.
'Boostcamp AI Tech' 카테고리의 다른 글
[Boostcamp Day-4] Python - file_exception_handling_logging (0) | 2021.08.05 |
---|---|
[Boostcamp Day-4] Python - Module and Project (0) | 2021.08.05 |
[Boostcamp Day-4] Python - Pythonic code (0) | 2021.08.05 |
[Boostcamp Day-4] AI Math - RNN 첫걸음 (0) | 2021.08.05 |
[Boostcamp 과제 - 2, 3] Text Processing I, II (0) | 2021.08.05 |