OOP characteristics

wldnjswldnjs·2023년 1월 2일
0

python

목록 보기
5/8

객체 지향 언어의 특징 : 실제 세상을 모델링

1. Inheritance (상속)

Inheritance Polymorphism Visibility

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

object

  • 초기의 상속은 object가 기본 / 써주지 않아도 상속을 받는다.

  • 파이썬3에서의 object 상속은 표기상의 차이 이외에 상속 관계가 없는 클래스 선언과 아무런 차이가 없다.

  • 파이썬 2 (정확히는 2.2 이상) 에서는 클래스에 object를 명시적으로 상속시켜 줘야 비로소 우리가 파이썬 3에서 흔히 쓰는 클래스가 된다.

  • 파이썬 3 코드에서 굳이 object를 상속시켜 주는 이유는 대개 파이썬 2와의 호환성 혹은 작성 취향 때문이다.

  • 출처 : https://jh-bk.tistory.com/24

  • super() : 부모 클래스를 받아온다.

2. Polymorphism (다형성)

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


3. Visibility (가시성)

  • 객체의 정보를 볼 수 있는 레벨을 조절하는 것
  • 누구나 객체 안에 모든 변수를 볼 필요가 없음

1) 객체를 사용하는 사용자가 임의로 정보 수정
2) 필요없는 정보에는 접근할 필요가 없음
3) 만약 제품으로 판매한다면? 소스의 보호 -> 요즘은 의미있는 것은 아님

= Encapsulation (캡슐화 또는 정보 은닉)

Example1

  • Product 객체를 Inventory 객체에 추가
  • Inventory에는 오직 Product 객체만 들어감
  • Inventory에 Product가 몇 개인지 확인이 필요
  • Inventory에 Product items는 '직접 접근이 불가'

해결방법

Example2

  • Product 객체를 Inventory 객체에 추가
  • Inventory에는 오직 Product 객체만 들어감
  • Inventory에 Product가 몇 개인지 확인이 필요
  • Inventory에 Product 'items 접근 허용'
class Inventory(object):
    def __init__(self):
        self.__items = []
        
    @property # property decorator 숨겨진 변수를 반환하게 해줌
    def items(self):
        return self.__items
  • 외부에서는 접근이 안되지만 내부에서는 접근이 돼서 반환하게 해줌


4. Decorate

1. First-class objects

  • 일등함수 또는 일급 객체
  • 변수나 데이터 구조에 할당이 가능한 객체
  • 파라메터로 전달이 가능 + 리턴 값으로 사용

-> 파이썬은 일급함수

ㄴ square 함수를 변수로 사용

def square(x):
    return x * x

def cube(x):
    return x * x * x

def formula(method, argument_list):
    return [method(value) for value in argument_list]
  • formula 함수를 두 개 만드는 것보다 method에 두 함수를 넣어서 사용할 수 있음

2. closures : inner function을 return값으로 반환
def print_msg(msg):        #(2)
    def printer():         #(4)
        print(msg)
    return printer         # 일급함수이기 때문에 함수 자체가 return 가능
    
another = print_msg('Hello, Python')
another()

  • 일급함수이기 때문에 함수 자체가 return 가능

3. 복잡한 클로져 함수를 간단하게

5. 궁금한 것

def star 함수안의 def inner 함수의 활용

  1. printer 함수의 msg,mark가 왜 inner 함수에 들어가는가
    튜플 (msg,mark)

이거 보고 이해하기!

  1. inner 함수에 args를 선언해주고 print('' * 30)
    **kwargs는 필요없어 보인다. dict를 받지 않고 있으므로

0개의 댓글