객체 지향 언어를 사용하는 이유? 구조화!
다른 사람이 만들어놓은 코드 또는, 여럿이서 공동 개발할 때, 혼자서 개발할 때도 객체 지향적으로 하는 것이 좋다.
객체란? 실생활 속 일종의 물건, 속성(attribute)와 행동(action)을 가진다
ex) 인공지능 축구 프로그램에서 객체는 팀, 선수, 심판, 공 등
OOP는 클래스와 인스턴스로 나뉜다.
ex) 클래스 - 붕어빵 틀, 인스턴스 - 붕어빵
-> 도커에서 이미지와 컨테이너의 차이와 비슷하다!
OOP 설계 방법
1. class 선언
-> class + 이름 + (상속받을 클래스) + :
※ naming rule은 snake_case와 CamelCase가 있다.
주로 클래스명에서는 대문자를 사용하고, 변수명에서는 언더바("_")를 사용한다.
2. __init__ 함수 선언
-> 이 함수는 객체 초기화 예약 함수로, 속성 정보를 넣어준다.
-> 다른 언어에서 생성자의 개념와 유사하다고 생각하면 좋을 것 같다.
※ 이 함수에서는 꼭 첫번째 파라미터로 self를 가져야한다!
※ 언더바 2개 __ 는 특수한 예약 함수나 함수명 변경등에 사용된다!
ex) __str__ 함수는 객체를 print 했을 때, 객체의 메모리 주소가 아닌 return 값으로 지정한 것이 출력된다!
그리고 init 함수는 객체 생성 시에 자동 호출된다. 앞서 말했던 생성자의 개념을 떠올리면 이해가쉬울 것이다.
※ 모든 class 내부의 함수는 첫번째 파라미터로 self를 가져야한다!
※ self란? 해당 함수를 호출한 객체를 가리킨다!
ex) beomseok.join()을 하면
def join(self, 파라미터들...) 함수의 self는 함수를 호출한 beomseok를 가리킨다!
3. 객체 선언
변수명 = 클래스명(파라미터들)
위처럼 선언하면 객체가 하나 생성된다!
OOP의 특성 : 실제 세상을 모델링!
1. 상속 : 부모 클래스의 속성과 method를 물려받는 것!
자식 클래스는 물려받은 것을 사용가능!
※ super()는 자식클래스에서 사용하는데, 부모클래스의 속성을 사용할 수 있게 하는 기능을 한다.
2. 다형성 : 같은 이름의 메소드의 내부 로직을 다르게 작성 = 개념적으로 같은 일을 하는데 세부적으로는 다른 일을 하는 것!
다형성에 대해 자세히 알고 싶다면 자바 언어의 다형성에 대해 찾아보자
Override의 개념과 업캐스팅(부모클래스 변수 = 자식클래스 변수)을 알아야 할 듯!
파이썬에서는 주로 Overrride를 다형성이라고 하는 것 같다.
3. 캡슐화 : 누구가 객체 안의 정보를 볼 수 없도록 하자!
정보 보호 및 코드를 잘못 건드렸을 때 오류 방지!
private 변수는 선언 시에 __ (언더바 2개)를 붙여주면 된다.
외부에서 private 변수를 접근하고자 하면, private 변수를 반환하는 함수를 하나 생성한 후, @property을 붙여준다. 이는 함수명을 변수처럼 사용가능하게 하는 것인데, 이를 통해 private 변수에 접근이 가능하다.
그리고 보통 반환할 땐 복사본을 준다!
※ First-class objects (일급함수)
-> 변수나 데이터 구조에 할당이 가능한 객체, 파라미터로 전달하거나 리턴 값으로 사용가능하다
파이썬의 모든 함수는 일급 함수!
def square(x):
return x*x
f = square // 함수를 변수로 사용!
f(5)
※ Inner function : 함수 안에 또 다른 함수
def print_msg(msg): // 2번
def printer(): // 4번
print(msg) // 5번
return printer // 3번 : return문 실행하는데 value가 printer 함수니까 호출
another = print_msg("hello, python") // 1번 : 함수 호출
another() // 6번 : another는 이제 hello, python 출력
※ decorator : 복잡한 함수를 간단하게!
def star(func):
def inner(*args, **kwargs):
print("*" * 30)
func(*args, **kwargs)
print("*" * 30)
return inner
@star --------------------> 아 데코레이터가 달려 있는 함수는 def star(func)의 func로 들어감!
def printer(msg):
print(msg)
printer("hello")
데코래이터는 몇번 써봐야 감이 올 것 같다..
이해는 하겠지만 실전에 써먹을 수 있을까?
'파이썬' 카테고리의 다른 글
파이썬 - data handling (0) | 2022.09.27 |
---|---|
파이썬 - File / Exception / Log Handling (0) | 2022.09.27 |
파이썬 - 모듈과 패키지 (0) | 2022.09.27 |
[AI프로그래밍] 파이썬의 여러 라이브러리 (0) | 2022.09.25 |
[AI프로그래밍] Python의 기초 (0) | 2022.09.25 |