인공지능 AI 기초 다지기 강의와 객체 지향 프로그래밍 과목 학습 후 정리한 포스팅 입니다.
이번 포스팅에서는 파이썬 객체 지향 프로그래밍에 대해 학습힙니다.
I) 객체 지향 프로그래밍
- Object-Oriented Programming, OOP
- 객체: 실생활에서 일종의 물건
속성(Attribute)와 행동(Action)을 가짐
- OOP는 이러한 객체 개념을 프로그램으로 표현
속성은 변수(variable), 행동은 함수(method)로 표현됨
- 파이썬 역시 객체 지향 프로그램 언어
- OOP는 설계도에 해당하는 클래스(class)와 실제 구현체인 인스턴스(instance) 로 나눔
ex)인공지능 축구 프로그램을 작성한다고 가정
- 객체 종류: 팀, 선수, 심판, 공
- Action : 선수 – 공을 차다, 패스하다.
심판 – 휘슬을 불다, 경고를 주다.
- Attribute : 선수 – 선수 이름, 포지션, 소속팀
팀 – 팀 이름, 팀 연고지, 팀소속 선수
class는 설계도로 함수를 선언할 때와 동일하다. (붕어빵의 틀)
class명은 함수명과 달리 CamelCase로 작성한다.
class SoccerPlayer():
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):
print("선수의 등번호를 변경합니다 : from %d to %d" %(self.back_number, nnew_number))
self.back_number = new_number
Eon = SoccerPlayer("EON", "FW", 11)
EON.change_back_number(9)
Attribute(속성)의 추가는 __init__, self와 함께 사용한다. (__init__는 객체 초기화 예약 함수)
self는 생성된 instance 자신을 의미한다.
II) OOP characteristic (상속, 다형성, 가시성)
i) 상속
- 부모 클래스로 부터 속성과 Method를 물려받은 자식 클래스를 생성 하는 것
class Employee(Person): # 부모 클래스 Person으로 부터 상속
def __init__(self, name, age, gender, salary, hire_date):
super().__init__(name, age, gender) # 부모객체 사용
self.salary = salary
self.hire_date = hire_date # 속성값 추가
def do_work(self): # 새로운 메서드 추가
print("열심히 일을 합니다.")
def about_me(self): # 부모 클래스 함수 재정의
super().about_me() # 부모 클래스 함수 사용
print("제 급여는 ", self.salary, "원 이구요, 제 입사일은 ", self.hire_date, " 입니다.")
ii) 다형성
- 같은 이름 메소드의 내부 로직을 다르게 작성
- Dynamic Typing 특성으로 인해 파이썬에서는 같은 부모클래스의 상속에서 주로 발생함
- 중요한 OOP의 개념 그러나 너무 깊이 알 필요X
iii) 가시성 (캡슐화)
-객체의정보를볼수있는레벨을 조절하는것
- 누구나 객체 안에 모든 변수를 볼 필요가 없음
1) 객체를 사용하는 사용자가 임의로 정보 수정
2) 필요 없는 정보에는 접근 할 필요가 없음
3) 만약 제품으로 판매한다면? 소스의 보호
<Summary>
- OOP는 설계도에 해당하는 클래스(class)와 실제 구현체인 인스턴스(instance) 로 나눔
*유의사항
- 파이썬을 공부 중인 인공지능공학과 학부생이 공부하여 남긴 정리입니다.
- 정확하지 않거나, 틀린 점이 있다면 댓글로 알려주시면 감사하겠습니다.
댓글