객체 지향 프로그래밍 언어, Object Oriented Programming(OOP)
Object-Oriented Programming
- 객체 : 실생활에서 일종의 물건, 속성(Attribute)와 행동(Action)을 가짐
- OOP는 객체 개념을 프로그램으로 표현하고, 속성은 변수(Variable), 행동은 함수(method)로 표현됨
- 파이썬 : 객체 지향 프로그래밍 언어
객체 지향 프로그래밍 언어를 쉽게 설명하기 위해 인공지능 축그 프로그램을 작성한다고 가정하면
- 객체 종류 : 팀, 선수, 심판, 공
- Attribute : 선수(선수이름, 포지션, 소속팀, 나이), 팀(팀 이름, 팀 연고지, 팀구장, 팀 선수, 팀 감독)
- Action : 선수(공을 차다, 슛을 하다, 공을 잡다), 심판(휘슬을 불다, 프리킥을 지시하다), 감독(지시하다)
각자 기능을 중심으로 프로그램을 작성하여 연결하는 방식을 객체지향 프로그래밍 언어라고 말할 수 있습니다.
OOP : 클래스 & 인스턴스
- 클래스 (CLASS : 설계도=붕어빵틀)
- 인스턴스(instance : 실제 구현체=팥붕/슈붕/고구마붕 등)
# class 선언
class SocerPlayer(object):
# Attribute 추가는 __init__, self와 함께 사용한다
# __init__ : 객체 초기화 예약함수
# self : 객체 초기화 정보 설정
def __init__ (self, name : str, position : str, back_number : int):
self.name = name
self.position = position
self.back_number = back_number
class 내부에서 함수(method)를 사용하기 위해서는 반드시 self를 추가해야 class 함수로 인정된다.
self : 생성된 인스턴스 자신을 말함.
"__" : 맹글링
맹글링은 틀수한 예약함수나 변수, 함수명 변경으로 사용할 수 있다.
예시) __main__, __add__, __str__, __eq__
class SoccerPlayer(object):
def __init__ (self, name : str, position : str, back_number : int):
self.name = name
self.position = position
self.back_number = back_number
def __str__(self):
return "Hello, My name is %s. I play in %s in center " % \
(self.name, self.position)
def __add__(self, other):
return self.name + other
def change_back_number(self, new_number):
print('선수의 등번호를 변경합니다 : From %d to %d' % \
(self.back_number, new_number))
self.back_number = new_number
실제로 soccerplay로 name = park, position = mf, number = 13을 주었을 때
Hello, My name is pack. I play in my in center라는 값을 반환해준다.
class 내부에서 추가했던 함수인 change_back_number라는 등번호 변경 함수를 cho.change_back_number()로 실행하면 선수 등번호가 13에서 7로 변경된다.
* 깨알 상식 - 변수 & class 명 짓는 방법 (snake_case & CamelCase)
- snake_case : 띄어쓰기 부분에 언더바 "_"를 추가, 파이썬 함수, 변수명에 사용
- CamelCase : 띄어쓰기 부분에 대문자를 사용 "camel case"라면 "CamelCase"로 이용
note class python 구현해보기
- Note를 정리하는 프로그램
- 사용자는 note에 뭔가를 적을 수 있다.
- note에는 content(str)이 있고, 내용을 삭제(remove)할 수 있다
- 2개의 노트북을 합쳐 하나로 만들 수 있다.
- Note는 Notebook에 삽입이 된다.
- Notebook은 Note가 삽입 될 때, 페이지(attribute)를 생성하며, 최고 300페이지까지 저장이 가능하다.
class NoteBook(object):
def __init__(self, title):
self.title = title
self.page_number = 1
self.notes = {}
def add_note(self, note, page = 0):
if self.page_number < 300:
if page == 0:
self.notes[self.page_number] = note
self.page_number += 1
else:
self.notes = {page : note}
self.page_number += 1
else:
print("Page가 모두 채워졌습니다.")
def remove_note(self, page_number):
if page_number in self.notes.keys():
return self.notes.pop(page_number)
else:
print("해당 페이지는 존재하지 않습니다")
def get_number_of_pages(self):
return len(self.notes.keys())
OOP의 특성 : 객체지향의 언어 특징
Inheritance(상속성) Polymorphism(다형성), Visibility(가시성)
Inheritance(상속성)
부모클래스의 속성&Method를 물려받은 자식 클래스를 생성하는 것을 말한다.
# 부모 클래스
class Person(object):
def __init__(self, name, age):
self.name = name
self.age = age
# 자식클래스
class Korean(Person):
pass
first_korean = Korean("Sungchul", 35)
print(first_korean.name)
부모 클래스가 가지고 있던 name, age 기본 속성을 그대로 가져와서 "Sungchul", 35라는 값을 표현하는 걸 볼 수 있따.
자식 클래스에 super()를 사용하면 부모 클래스에서 사용하는 값을 그대로 가져와서 사용할 수도 있다.
Polymorphism(다형성)
- 같은 이름 메소드의 내부 로직을 다르게 작성하는 걸 말한다.
- Dynamic Typing 특성으로 인해 파이썬에서는 같은 부모 클래스의 상속이 자주 발생한다.
- 개념적으로 같은 일을 하지만, 세부적인 구현이 다를 경우를 말함
- 파이썬에서는 크게 영향을 많이 받지는 않음
모두다 talk()함수를 부르지만 출력 결과가 다른걸 확인할 수 있다.
각각의 목적에 따라서 다르게 사용할 수 있는 걸 다형성이라고 한다.
Visibility(가시성)
- 객체의 정보를 볼 수 있는 레벨을 조절하느 ㄴ것
- 누구나 객체안의 모든 변수를 볼 이유는 없음
1) 사용자의 임의 정보수정 방지
2) 필요 없는 정보 접근 방지
3) 제품 판매 : 소스의 보호(숨김)
* Encapsulation(캡슐화 or 정보은닉)
- class 설계 시, 클래스 간 간섭/정보공유를 최소화하는 것
- 심판 클래스가 축구선수 클래스의 가족 정보를 알 필요가 없다.
- 캡슐을 던지듯, 인터페이스만 알면 쉽게 사용이 가능하다.
first-class object
- 일등 함수 또는 일급 객체
- 변수나 데이터 구조에 할당이 가능한 객체(parameter or return 값으로 사용가능하다는 것)
- 파이썬 함수는 일급함수
inner function
- 함수내에 또 다른 함수가 존재하는 것
def print_msg(msg):
def printer():
print(msg)
return printer
print_msg("Hello, Python")
decorator
'네이버 코칭스터디 9기' 카테고리의 다른 글
파이썬 코딩환경(OS 및 코드편집기) WINDOW 개발 환경설정 - 파이썬 기초#3 (0) | 2023.01.15 |
---|---|
파이썬 개요 및 특징 정리 - 파이썬 기초#2 (0) | 2023.01.15 |
Python기초 개발환경 준비 - Basic computer class for newbies (1) | 2023.01.15 |
댓글