728x90
반응형
객체 지향 프로그래밍이란?
- Object-Oriented Programming, OOP
- 객체: 실생활에서 일종의 물건 - 속성과 행동을 가짐
- OOP는 이러한 객체 개념을 프로그램으로 표현 → 속성은 변수(variable), 행동은 함수 (method)로 표현됨
- 파이썬 역시 객체 지향 프로그래밍 언어임
객체지향 프로그래밍이란?
- OOP는 설계도에 해당하는 클래스(Calss)와 이의 실제 구현체인 인스턴스(instance)로 나눔
- 인스턴스마다 속성이 바뀔수도 있음
- 하지만 이는 적용 케이스에 따라 구현 시 달라짐
❗ 참고 ❗
파이썬 함수 및 변수명에는 띄어쓰기 부분에 "-"를 추가하는 snake_case 사용 (예: professor_name)
파이썬 클래스명에는 띄어쓰기 부분에 대문자로 작성하는 CamelCase 사용 (예: ProfessorName)
파이썬을 이용한 객체지향 프로그래밍 구현
- __init__() : 객체 초기화 함수
- init 말고도 __를 이용하여 맹글링을 통해 다양한 매직 메소드 사용 가능
- self는 현재 생성된 인스턴스 자신을 가리킴
- self.변수명 = 값 → 이를 통해서 객체의 속성값을 저장 가능
class SoccerPlayer:
def __init__(self, name : str, position : str, back_number : int):
self.name = name
self.position = position
self.back_number = back_number
def check_info():
print("현재 선수의 이름은", self.name, "번호는", self.back_number, "포지션은", self.position)
a = SoccerPlayer('A', "FW", 7)
b = SoccerPlayer('B', "M", 10)
c = SoccerPlayer("C", "GK", 3)
객체 지향 언어의 특징 → 실제 세상을 모델링
- 상속 (Interitance) : 부모 클래스로부터 속성과 method를 물려받은 자식 클래스를 생성하는 것
- 상속받을 클래스를 소괄호 내에 적어주어야 함
- 입력받는 초기화 함수의 파라미터도 상속받음! 따라서 해당 파라미터들도 초기화 함수에 적어주어야 함
- super.__init__(부모클래스 파라미터)
- 다형성 (Polymorphism) : 같은 이름 메소드의 내부 로직을 다르게 작성
- Dynamic Typing 특성으로 인해 파이썬에서는 같은 부모클래스의 상속에서 주로 발생함
- 중요한 OOP의 개념임
- 각각의 목적에 따라 내부구현이 달라지는 것
- 가시성 (Visibility) : 객체의 정보를 볼 수 있는 레벨을 조절하는 것
- 누구나 객체 안에 모든 변수를 볼 필요가 없음
- 객체를 사용하는 사용자가 임의로 정보 수정
- 필요없는 정보에는 접근할 필요가 없음
- 제품으로 판매한다면 소스의 보호를 위해!
- 캡슐화 및 정보은닉 (Encapsulation, Information Hiding) -- 인터페이스만 알면 사용 가능!
- 언더바 두개를 넣어주면 외부에서 접근하지 못하는 private 상태로 바뀜 (예: number → __number)
- 혹은 @property 와 같은 property decorator을 사용할 수도 있음 : 함수명을 변수명처럼 사용 가능하도록 해줌
- 값 (특히 리스트!) 등을 반환할 때는 원형이 변경되지 못하도록 copy를 해서 반환해주는 것이 일반적
Decorator
- First-Class Object : 변수나 데이터 구조에 할당이 가능한 객체
- 파라미터로 전달이 가능하고, 리턴값으로도 사용될 수 있음
- 파이썬의 함수는 일급 함수
- Inner Function : 함수 내에 또 다른 함수가 존재하는 것
- 파라미터로 전달이 가능하고, 리턴값으로도 사용될 수 있음
- 파이썬의 함수는 일급 함수
- closures: inner function을 return 값으로 반환
- Decorator Function: 복잡한 클로져 함수를 간단하게 사용할 수 있도록 해주는 것!
본 포스트는 부트코스 내 네이버 부스트캠프 AI Tech 5기 강의를 토대로 작성되었습니다
728x90
반응형