객체지향 프로그래밍
객체를 이용한 프로그램으로 객체는 속성과 기능으로 구성된다.
객체(Oject) = 속성(Attribute) + 기능(Function)
예시)
계산기 (Calculator) │ └─ 속성 : 숫자 └─ 기능 : 덧셈, 뺄셈 , … |
자동차 (Car) │ └─ 속성 : 색상, 길이, 가격 └─ 기능 : 전진, 후진, 정지 … |
객체 만들기 (생성)
객체는 클래스에서 생성된다.
클래스는 객체를 만들기위한 하나의 틀이다.
클래스(Class) |
───▷ |
자동차 (Car) |
자동차 (Car) 클래스 │ └─ 속성 : 색상, 길이, 가격 └─ 기능 : 전진, 후진, 정지 … |
객 체 생 성 |
─▶ 자동자(Car)객체 ─▶ 자동자(Car)객체 ─▶ 자동자(Car)객체 ─▶ 자동자(Car)객체 … … … |
객체 사용의 장점
코드 재사용, 모듈화에 좋다..
예시)
자동차 A (CarA) [배터리 일체형] |
자동차 B (CarB) [배터리 교체형] |
자동차 C (CarC) [배터리 충전형] |
│ ▼ 부품 결합도 높음 |
│ ▼ 부품 결합도 낮음 |
│ ▼ 부품 결합도 높음 |
|
│ ▼ 가장 이상적인 프로그램이 될 수 있다. |
|
클래스 만들기 (생성)
클래스는 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개를 생성해보자.
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' ] |