새소식

데이터분석/둘째주

파이썬 Python : 객체, Class

  • -
728x90

 

객체지향 프로그래밍

객체를 이용한 프로그램으로 객체는 속성과 기능으로 구성된다.

 

    객체(Oject) = 속성(Attribute) + 기능(Function)     

예시)

계산기 (Calculator)

└─  속성 : 숫자
└─  기능 : 덧셈, 뺄셈 , …
자동차 (Car)

└─  속성 : 색상, 길이, 가격
└─  기능 : 전진, 후진, 정지 …

 

 

 

객체 만들기 (생성)

객체는 클래스에서 생성된다.

클래스는 객체를 만들기위한 하나의 틀이다.

클래스(Class) ───▷ 자동차 (Car)
자동차 (Car) 클래스

└─  속성 : 색상, 길이, 가격
└─  기능 : 전진, 후진, 정지 …
객  
체  
생  
성  
─▶  자동자(Car)객체                                             
─▶  자동자(Car)객체
─▶  자동자(Car)객체
─▶  자동자(Car)객체


 

 

 

객체 사용의 장점

코드 재사용, 모듈화에 좋다..

예시)

자동차 A (CarA)
[배터리 일체형]
자동차 B (CarB)
[배터리 교체형]
자동차 C (CarC)
[배터리 충전형]


부품 결합도 높음


부품 결합도 낮음


부품 결합도 높음
 

가장 이상적인 프로그램이 될 수 있다.
 

 

 

 

728x90

 

클래스 만들기 (생성)

클래스는 class 키워드와 속성(변수) 그리고 기능(함수)를 이용해서 만든다.

클래스 명은 첫글자를 대문자로 사용한다.

 

  • 클래스 선언         [  class  클래스명  ]
  • 생성자, 속성        [  def __init__ ( self, 변수명, 변수명 ) :  ]
                              [          self.변수명 = 값                           ]
                              [          self.변수명 = 값                           ]
  • 기능                     [  def  함수명 ( self ) :                            ]
                              [          실행영역                                      ]
class Car:
	def __init__(self, color, length):
		self.color = color
		self.length = length
        
	def doStop(self):
		print("STOP")

	def doStart(self):
		print("START")
        
	def printInfo(self):
		print(f'self.color: {self.color}')
		print(f'self.length: {self.length}')

 

 

반응형

객체 생성

객체는 클래스의 생성자를 호출한다.

객체가 생성될 때 생성자를 호출하면 __init__()가 자동 호출된다.

생성자는 자동으로 __init__ 메소드를 호출하며, 인수를 매개변수에 전달해서 객체의 변수를 초기화한다.

 

    Calculator __init__() 호출    


    Calculator() 생성자 호출    


    cal = Calculator()    
Class Calculator:
        def __init__(self):
                 print('[ Calculator ] __init__() called~!')




cal = Calculator()

 

class Car:
	def __init__(self, color, length):
		self.color = color
		self.length = length
        
	def doStop(self):
		print("STOP")

	def doStart(self):
		print("START")
        
	def printInfo(self):
		print(f'self.color: {self.color}')
		print(f'self.length: {self.length}')
        
# 생성자 호출
# Car()

car1 = Car('red', 200)
car2 = Car('blue', 200)
## 객체 2개 생성됨

car1.printInfo()
car2.printInfo()

print(f'car1.color : {car1.color}')
print(f'car1.length : {car1.length}')

 

[실습] 비행기 클래스를 만들고, 비행기 객체 5개를 생성해보자.

 

 

  • __init__ 메소드가 속성을 초기화한다.
Class Calculator:
	def __init__(self, num1, num2):
		print('[ Calculator ] __init__() called~!')
		self.num1 = num1
		self.num2 = num2

cal = Calculator(10, 30)
print(f'cal.num1 : {cal.num1}')
print(f'cal.num2 : {cal.num2}')

 

Class Calculator:
	def __init__(self):
		print('[ Calculator ] __init__() called~!')
		self.num1 = 50
		self.num2 = 200

cal = Calculator()
print(f'cal.num1 : {cal.num1}')
print(f'cal.num2 : {cal.num2}')

 

 

 

객체 속성 변경

객체의 속성은 변경할 수 있다.

  • 객체 속성 변경       [  객체명 .  객체의 변수명  =  값  ]
class NewGenerationPC:
	def __init__(self, name, cpu, memory, ssd):
		self.name = name
		self.cpu = cpu
		self.memory = memory
		self.ssd = ssd
	
	def doExcel(self):
		print('EXCEL RUN')

	def doPhotoshop(self):
		print('PHOTOSHOP RUN')

	def printPCInfo(self):
		print(f'self.name: {self.name}')
		print(f'self.cpu: {self.cpu}')
		print(f'self.memory: {self.memory}')
		print(f'self.ssd: {self.ssd}')
        
myPC = NewGenerationPC('myPC', 'i5', '16G', '256G')
myPC.printPCInfo()

frindPC = NewGenerationPC('frindPC', 'i7', '32G', '512G')
frindPC.printPCInfo()

#객체 속성 변경
myPC.cpu = 'i7'
myPC.memory = '64G'
myPC.ssd = '1T'

myPC.printPCInfo()

 

[실습] 계산기 클래스를 만들고, 사칙연산을 실행해보자

 

 

 

 

객체와 메모리

변수는 객체의 메모리 주소를 저장하고 이를 이용해서 객체를 참조한다.

레퍼런스 변수 : 메모리 주소를 가지고 객체를 참조하는 변수

class Car:
	def __init__(self, color):
		self.color = color
        
car1 = Car('red')
Stack Memory (스택 메모리)   Heap Memory (힙 메모리)
    객체(Object) 생성  [ Car ]
변수 [ car1 ] ── 참조 ──▶ 객체(Object)   [ Car ]
변수 [ color ] ── 참조 ──▶ [ 'red' ]
self (객체를 가리키는 참조자 역할) ── 참조 ──▶ 객체(Object)
    객체(Object)의 변수 [ color ]
   │ 참조
  ▼
[ 'red' ]

 

 

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.