만들어 놓은 코드를 재사용하는 방법?
클래스와 객체, 객체 지향 언어의 이해, 객체 지향은 보통 한 학기 정도 배우는 큰 범위의 내용입니다. 예시를 통해 간략하게 알아보겠습니다.
수강신청 프로그램을 작성한다. 어떻게 해야 할까?
- 수강신청이 시작부터 끝까지 순서대로 작성한다.
- 수강신청 관련 주체들(교수, 학생, 관리자)의 행동(수강신청, 과목 입력)과 데이터(수강 과목, 강의 과목)들을 중심으로 프로그램 작성 후 연결
두 가지 모두 가능하지만 요즘은 2번 방식이 주류를 이루고 있습니다. 이러한 기법을 객체 지향 프로그램이라고 합니다.
객체지향 프로그래밍 개요
Object-Oriented Programming, OOP
객체는 실생활에서 일종의 물건 속성(Attribute)과 행동(Action)을 가집니다. OOP는 이러한 객체 개념을 프로그램으로 표현하는 것이고 속성은 변수(Variable), 행동은 함수(method)로 표현됩니다. 파이썬 역시 객체 지향 프로그램 언어입니다.
인공지능 축구 프로그램을 작성한다고 가정해보자
- 객체 종류: 팀, 선수, 심판, 공
- Action: 선수 - 공을 차다, 패스하다. 심판 - 휘슬을 불다, 경고를 주다.
- Attribute: 선수 - 선수 이름, 포지션, 소속팀. 팀 - 팀 이름, 팀 연고지, 팀 소속 선수
OOP는 설계도에 해당하는 클래스(class)와 실제 구현체인 인스턴스(instance)로 나눌 수 있습니다.
- 붕어빵 틀 = Class, 붕어빵 = Instance
- 붕어빵 틀(class)로 여러 붕어빵(Instance)을 만들 수 있다. 팥 붕어빵, 슈크림 붕어빵, 고구마 붕어빵 등등
직접 구현해 보는 것이 가장 효과적!
Class 구현하기 in Python
[알아두면 좋은 상식] Python naming rule
변수와 Class명 함수명은 짓는 방식이 존재
- snake_case: 띄어쓰기 부분에 "_"를 추가, 뱀처럼 늘여 쓰기, 파이썬 함수/변수명에 사용
- CamelCase: 띄어쓰기 부분에 대문자, 낙타의 등 모양, 파이썬 Class명에 사용
축구 선수 정보를 Class로 구현하기
# class 선언, object는 python3에서 자동 상속이여서 안 적어도 된다.
class SoccerPlayer(object):
# __init__은 객체 초기화 예약 함수
def __init__(self, name: str, position: str, back_number: int):
self.name = name
self.position = position
self.back_number = back_number
def change_back_number(self, new_number):
print("선수의 등번호를 변경합니다 : From %d to %d" % \
(self.back_number, new_number))
self.back_number = new_number
def __str__(self):
return "Hello, My name is %s. My back number is %d" % \
(self.name, self.back_number)
def __add__(self, other):
return self.back_number + other.back_number
[알아두면 좋은 상식] 파이썬에서 "__" 의미
__는 특수한 예약 함수나 변수 그리고 함수명 변경(맨글링)으로 사용
ex) __main__, __add__, __str__, __eq__
OOP Implementation Example
[ 구현 가능한 OOP 만들기 - 노트북 ]
- Note를 정리하는 프로그램.
- 사용자는 Note에 뭔가를 적을 수 있다.
- Note에는 Content가 있고, 내용을 제거할 수 있다.
- 두 개의 노트북을 합쳐 하나로 만들 수 있다.
- Note는 Notebook에 삽입된다.
- Notebook은 Note가 삽일 될 때 페이지를 생성하며, 최고 300페이지까지 저장 가능하다.
- 300 페이지가 넘으면 더 이상 노트를 삽입하지 못한다.
Reference
TEAMLAB Director 최성철 님, boostcamp AI Tech Pre-Course
'PROGRAMMING > Python' 카테고리의 다른 글
[Python] Dictionary get method (파이썬 딕셔너리 팁) (44) | 2023.04.03 |
---|---|
[Python] 파이썬 배열 [:] / [::] 사용법 (feat.list slicing syntax) (40) | 2023.03.01 |
[Python] 파이썬 분수, 표현 / 연산 / 변환 (feat.Fractions module) (7) | 2023.02.11 |
[Python] 누적합 / 순열 / 조합 (feat.itertools module) (4) | 2023.02.03 |
[Python for AI]파이썬 데이터 구조 - 스택*Stack, 큐*Queue, 튜플*Tuple, 집합*Set, 사전*Dictionary (5) | 2022.12.07 |