[Basic] 클래스, 객체 지향 프로그래밍

고보·2024년 1월 29일

Python 기초 강의 정리

목록 보기
11/15

1 용어와 개념

  • 객체(object): 속성(attribute, field)과 method를 갖는 데이터 구조체. 메모리상에 존재하는 데이터.
  • 클래스(class): 객체를 만드는 주형. 속성 + 기능으로 구성.
    • 속성(attribute, field): 객체가 가진 데이터. 보통 객체.~로 () 없이 표현 가능하다.
    • method: 객체가 갖는 기능. 함수와 비교하자면 클래스에 포함된 함수를 메서드라고 한다.
  • 인스턴스(instance): 객체와 같은 말이지만 특정 클래스로부터 만들어진 실체의 측면을 강조
  • self: 클래스 호출 시 인스턴스 자기 자신이 들어갈 매개변수.
  • 객체지향(object oriented) 프로그래밍: 복잡한 문제를 잘게 나누어 객체로 만들고, 그것들을 조합해 문제 해결하는 방식
    • 현존하는 프로그래밍은 대부분 객체 지향 프로그래밍
    • 객체 사용하면 장점은 코드 재사용, 모듈화에 용이

1-1 객체와 메모리

  • 변수는 객체의 메모리 주소를 저장하고, 이를 이용해 객체를 참조한다.
  • 변수 지정 없이도 객체를 생성할 수 있지만, 메모리 주소가 없으니 접근해서 사용할 수가 없다.
  • 얕은 복사: 객체 주소를 복사하는 것. b = a를 하고, a에 변동을 주면 b도 바뀐다. 왜냐하면 b가 a의 주소를 그대로 복사한 것이라서 하나의 객체를 공유하는 것.
  • 깊은 복사: 객체 자체를 복사하는 것. b = a[:] b = [i for i in a] b =[].expend(a) b=copy()

2 클래스 선언

class Car:
	def __init__(self, color, length):
    	self.color = color
        self.length = length
        self.default = default
        self.__hide = "숨김"
    def doStart(self): 
    	print('start')
  • init: 클래스로 인스턴스 생성되는 최초에만 실행되어, 속성(attribute)을 만드는 method
  • method들은 처음에 init으로 가서 self를 먼저 받고, 이후에 parameter들이 지정된다. parameter가 없어도 속성을 그냥 설정할 수 있다.
  • self의 앞에 __로 표시되는 것은 비공개 속성. 외부에서 접근, 변경 못하는 속성으로, 클래스의 메서드 안에서만 접근, 변경 가능.

2-1 객체 생성(클래스 호출)

car1 = Car('red', 200)
  • 여기 있는 'red'가 color에, length가 200으로 들어간다.
  • 속성은 변경 가능. car1.color = 'green' 이렇게

3 클래스 상속

  • 부모 클래스의 속성과 메소드를 상속받아 자식 클래스에서 추가, 재정의(override)해서 사용 가능.
  • 다중 상속 가능
  • 예제로는 게임 캐릭터. 부모 클래스는 모든 캐릭터의 특성, 자식 클래스는 직업별 특성.
class character:
	def __init__(self, name, HP):
    	self.name = name
        self.HP = HP
    def attack(self):
    	print("공격합니다.")
        
class warrior(character): 
	def __init__(self, name, HP, passive) #passive 추가
    	super().__init__(name, HP) # name, HP는 부모 클래스 속성 그대로 인계
        self.passive = passive
    def attack(self): # 같은 이름의 method를 override(재정의)
    	print("스턴 공격을 합니다.") 
    def skill(self, AP): #새로운 메서드 추가
    	print(f"{self.name}이 후려치기를 사용합니다. {AP} 데미지를 부여합니다.") 
        #속성 self.name 사용, AP라는 인자 들고오기
  • class 자식클래스명(부모클래스명):
  • super(): 부모 클래스의 속성 그대로 들고온다

4 추상 클래스

  • 상위 클래스에서 매서드를 만들지만 기능은 비워놓고, 하위 클래스에서 이 기능을 구현하지 않으면 에러가 발생해서, 기능을 강요.
  • 사용하는 이유는 부모 클래스를 다양하게 상속해서 쓴다고 하면, 그 아래에서 핵심 기능이 다를 일이 많아져서, 비워두지만 핵심 기능이기에 꼭 만들어서 써라.
from abc import ABCMeta
from abc import abstractmethod

class Airplane(metaclass = ABCMeta)
	@abstract method
    def flight(self):
    	pass

class Airliner(Airplane):
	def flight(self):
    구현
profile
일본에서 일하는 게임 기획자. 시시해서 죽어버리지 않게, 재밌고 의미 있는 컨텐츠에 관심 있습니다. 그 도구로 데이터, AI도 찝적댑니다.

0개의 댓글