4-1. Python Object Oriented Programming

유승우·2022년 5월 2일
0

Python Object Oriented Programming.html

example_note.html

class_note.py

클래스와 객체


  • 객체지향 프로그램 : Object-Oriented Programming, 일명 OOP

  • 객체 : 실생활에서 일종의 물건 속성(Attribute)와 행동(Action)을 가짐

  • OPP는 이러한 객체 개념을 프로그램으로 표현

  • 속성은 변수(variable), 행동은 함수(method)로 표현됨

  • 파이썬 역시 객체 지향 프로그램 언어


  • 인공지능 축구 프로그램을 작성한다고 가정하면,

  • 객체 종류 : 팀, 선수, 심판, 공

  • Action : 선수 - 공을 차다, 패스하다,

               심판- 휘슬을 불다, 경고를 주다.
  • Attribute : 선수 - 선수 이름, 포지션 , 소속팀,

                   팀 - 팀 이름, 팀 연고지, 팀소속 선수

  • OOP는 설계도에 해당하는 클래스(class)와 실제 구현체인 인스턴스(instance)로 나눔

  • class와 instance, class와 object의 개념을 가지고 필요한 것을 프로그래밍 하는 것을 OOP 라고 한다.

class 구현하기 in python


  • class 선언, object는 python3에서 자동 상속
  • 변수와 class명, 함수명은 짓는 방식이 존재
  • snakecase : 띄어쓰기 부분에 ""를 추가 뱀 처럼 늘여쓰기, 파이썬 함수/변수명에 사용 ex ) Professor_name
  • CamelCase : 띄어쓰기 부분에 대문자 낙타의 등 모양, 파이썬 class명에 사용 ex ) ProfessorName

파이썬에서 class 명 네이밍을 할 때는 CamelCase방식으로 사용해야 한다.


  • Attribute 추가는 "init" , "self"와 함께 사용
class SoccerPlayer(object):
	def __init__(self, name, position, back_number):
		self.name = name
		self.position = position
		self.back_number = back_number

  • "__"는 특수한 예약 함수나 변수 그리고 함수명 변경(맨글링)으로 사용 ex ) "main", "add", "str" , "eq"
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)

  • method(Action) 추가는 기존 함수와 같으나, 반드시 self를 추가해야만 class 함수로 인정됨
def change_back_number(self, new_number):
        print("선수의 등번호를 변경합니다 : From %d to %d" % \
             (self.back_number, self.new_number))
        self.back_number = new_number

  • self 는 생성된 instance를 의미한다.

객체 지향 언어의 특징


  • 실제 세상을 모델링 하기 위해 필요한 것들

상속(Inheritance)


  • 부모 클래스로 부터 속성과 Method를 물려받은 자식 클래스를 생성 하는 것

다형성(Polymorphism)


  • 같은 이름 메소드의 내부 로직을 다르게 작성
  • Dynamic Typing 특성으로 인해 파이썬에서는 같은 부모클래스의 상속에서 주로 발생함
  • 중요한 OOP의 개념 그러나 너무 깊이 알 필요 X

가시성(Visibility)


  • 객체의 정보를 볼 수 있는 레벨을 조절하는 것

  • 누구나 객체 안에 모든 변수를 볼 필요가 없음

    1) 객체를 사용하는 사용자가 임의로 정보 수정

    2) 필요 없는 정보에는 접근 할 필요가 없음

    3) 만약 제품으로 판매한다면? 소스의 보호

  • 캡슐화 또는 정보 은닉 (Information Hiding)

  • Class를 설계할 때, 클래스 간 간섭/정보공유의 최소화

  • 심판 클래스가 축구선수 클래스 가족 정보를 알아야 하나?

  • 캡슐을 던지듯, 인터페이스만 알아서 써야함

Decorator


  • first-class objects
    • 일등 함수 또는 일급 객체
    • 변수나 데이터 구조에 할당이 가능한 객체
    • 파라미터로 전달이 가능 + 리턴 값으로 사용
    • 파이썬의 함수는 일급함수
  • inner function
    • 함수 내에 또 다른 함수가 존재
    • closures : inner function을 return 값으로 반환
  • decorator
    • 복잡한 클로져 함수를 간단하게 구현

0개의 댓글