객체지향 프로그래밍
객체를 이용한 프로그램으로 객체는 속성과 기능으로 구성된다.
객체(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 ) : ]
[ 실행영역 ]
객체 생성
객체는 클래스의 생성자를 호출한다.
객체가 생성될 때 생성자를 호출하면 __init__()가 자동 호출된다.
생성자는 자동으로 __init__ 메소드를 호출하며, 인수를 매개변수에 전달해서 객체의 변수를 초기화한다.
Calculator __init__() 호출 ▲ │ Calculator() 생성자 호출 ▲ │ cal = Calculator() |
Class Calculator: def __init__(self): print('[ Calculator ] __init__() called~!')
cal = Calculator() |
[실습] 비행기 클래스를 만들고, 비행기 객체 5개를 생성해보자.
객체 속성 변경
객체의 속성은 변경할 수 있다.
- 객체 속성 변경 [ 객체명 . 객체의 변수명 = 값 ]
[실습] 계산기 클래스를 만들고, 사칙연산을 실행해보자
객체와 메모리
변수는 객체의 메모리 주소를 저장하고 이를 이용해서 객체를 참조한다.
레퍼런스 변수 : 메모리 주소를 가지고 객체를 참조하는 변수
Stack Memory (스택 메모리) |
|
Heap Memory (힙 메모리) |
|
|
객체(Object) 생성 [ Car ] |
변수 [ car1 ] |
── 참조 ──▶ |
객체(Object) [ Car ] |
변수 [ color ] |
── 참조 ──▶ |
[ 'red' ] |
self (객체를 가리키는 참조자 역할) |
── 참조 ──▶ |
객체(Object) |
|
|
객체(Object)의 변수 [ color ] │ 참조 ▼ [ 'red' ] |