Python Object Oriented Programming.html
객체지향 프로그램 : Object-Oriented Programming, 일명 OOP
객체 : 실생활에서 일종의 물건 속성(Attribute)와 행동(Action)을 가짐
OPP는 이러한 객체 개념을 프로그램으로 표현
속성은 변수(variable), 행동은 함수(method)로 표현됨
파이썬 역시 객체 지향 프로그램 언어
인공지능 축구 프로그램을 작성한다고 가정하면,
객체 종류 : 팀, 선수, 심판, 공
Action : 선수 - 공을 차다, 패스하다,
심판- 휘슬을 불다, 경고를 주다.
Attribute : 선수 - 선수 이름, 포지션 , 소속팀,
팀 - 팀 이름, 팀 연고지, 팀소속 선수
OOP는 설계도에 해당하는 클래스(class)와 실제 구현체인 인스턴스(instance)로 나눔
class와 instance, class와 object의 개념을 가지고 필요한 것을 프로그래밍 하는 것을 OOP 라고 한다.
파이썬에서 class 명 네이밍을 할 때는 CamelCase방식으로 사용해야 한다.
class SoccerPlayer(object):
def __init__(self, name, position, back_number):
self.name = name
self.position = position
self.back_number = back_number
class SoccerPlayer(object):
def __str__(self):
return "Hello, My name is %s. I play in %s in center" % \
(self.name, self.position)
SP = SoccerPlayer("Seungwoo", "MF",10)
print(SP)
def change_back_number(self, new_number):
print("선수의 등번호를 변경합니다 : From %d to %d" % \
(self.back_number, self.new_number))
self.back_number = new_number
객체의 정보를 볼 수 있는 레벨을 조절하는 것
누구나 객체 안에 모든 변수를 볼 필요가 없음
1) 객체를 사용하는 사용자가 임의로 정보 수정
2) 필요 없는 정보에는 접근 할 필요가 없음
3) 만약 제품으로 판매한다면? 소스의 보호
캡슐화 또는 정보 은닉 (Information Hiding)
Class를 설계할 때, 클래스 간 간섭/정보공유의 최소화
심판 클래스가 축구선수 클래스 가족 정보를 알아야 하나?
캡슐을 던지듯, 인터페이스만 알아서 써야함