본문 바로가기

Dev/AI 인공지능

[AI] 파이썬과 객체 지향 프로그래밍 (Object Oriented Programming, OOP)

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
반응형