Chapter 10. 객체지향 기초

객체지향(Object-Oriented Programming, OOP)은 프로그램을 객체(Object) 단위로 개발하는 방법입니다. 객체는 데이터(속성)와 기능(메서드)을 하나로 묶은 것입니다.
예를 들어 학생은 다음과 같은 정보를 가지고 있습니다.
| 속성(데이터) | 기능(메서드) |
|---|---|
| 이름 | 공부한다. |
| 나이 | 출력한다. |
| 학년 | 시험을 본다. |
| 점수 | 점수를 계산한다. |
프로그램에서도 학생 한 명을 하나의 객체로 만들어 관리합니다. 객체지향은 현실 세계를 프로그램으로 표현하는 가장 대표적인 개발 방법이며, Python, Java, C++, C# 등 대부분의 프로그래밍 언어에서 사용됩니다.
객체는 다음 두 가지로 구성됩니다.
- 데이터(Data)
- 기능(Method)
예를 들어 자동차 객체는 다음과 같이 표현할 수 있습니다.
| 데이터 | 기능 |
|---|---|
| 색상 | 출발한다. |
| 속도 | 멈춘다. |
| 연료 | 가속한다. |
| 제조사 | 후진한다. |
| 절차지향 | 객체지향 |
|---|---|
| 순서대로 실행 | 객체 중심 개발 |
| 함수 중심 | 클래스 중심 |
| 데이터와 기능이 분리 | 데이터와 기능을 함께 관리 |
| 유지보수가 어렵다. | 유지보수가 쉽다. |
다음 중 객체(Object)가 될 수 있는 것을 모두 고르시오.
- ① 학생
- ② 자동차
- ③ 휴대폰
- ④ 강아지
- ⑤ 더하기(+)
정답
- ① 학생
- ② 자동차
- ③ 휴대폰
- ④ 강아지
객체지향 프로그래밍(Object-Oriented Programming, OOP)은 클래스(Class)와 객체(Object)를 이용하여 프로그램을 작성하는 방법입니다. 클래스(Class)는 객체를 만들기 위한 설계도입니다.
예를 들어 붕어빵을 만들기 위해서는 먼저 붕어빵 틀이 필요합니다.
붕어빵 틀 → 클래스(Class)
실제 만들어진 붕어빵 → 객체(Object)
class 클래스명:
내용
아직 작성할 내용이 없다면 pass를 사용합니다.
class Student:
pass
pass는 아무 동작도 하지 않는 예약어이며, 나중에 내용을 작성하기 위해 미리 클래스를 만들어 둘 때 사용합니다.
class Car:
pass
print("클래스 생성 완료")
클래스를 만들었다면 이제 객체(Object)를 생성할 수 있습니다. 객체는 클래스를 이용하여 실제 메모리에 만들어진 실체입니다.
객체 = 클래스명()
class Student:
pass
student = Student()
print(student)
객체는 여러 개 생성할 수 있습니다.
student1 = Student() student2 = Student() student3 = Student()
각 객체는 서로 다른 메모리 공간을 사용합니다.
객체가 생성될 때 자동으로 실행되는 메서드를 생성자(Constructor)라고 합니다.
파이썬에서는 __init__() 메서드를 사용합니다.
class Student:
def __init__(self):
실행할 내용
class Student:
def __init__(self):
print("학생 객체가 생성되었습니다.")
student = Student()
객체를 생성하면 생성자가 자동으로 실행됩니다.
self는 현재 생성된 객체 자신을 의미합니다.
클래스 안의 모든 메서드는 첫 번째 매개변수로 self를 사용합니다.
class Student:
def hello(self):
print("안녕하세요.")
student = Student()
student.hello()
다음 두 문장은 같은 의미입니다.
student.hello() ↓ Student.hello(student)
즉, self는 현재 객체를 가리킵니다.
객체마다 따로 저장되는 변수를 인스턴스 변수라고 합니다.
인스턴스 변수는 self를 이용하여 만듭니다.
class Student:
def __init__(self):
self.name = "홍길동"
self.age = 20
student = Student()
print(student.name)
print(student.age)
20
객체마다 서로 다른 값을 저장할 수 있습니다.
메서드는 클래스 안에 작성하는 함수입니다. 메서드는 객체가 수행하는 기능(동작)을 의미합니다.
class 클래스명:
def 메서드(self):
실행할 내용
class Student:
def hello(self):
print("안녕하세요.")
student = Student()
student.hello()
class Student:
def hello(self, name):
print(name + "님 안녕하세요.")
student = Student()
student.hello("홍길동")
class Calculator:
def add(self, a, b):
return a + b
cal = Calculator()
print(cal.add(10, 20))
지금까지 배운 클래스, 객체, 생성자, self, 인스턴스 변수, 메서드를 하나의 예제로 만들어 보겠습니다.
class 붕어빵:
# 생성자
def __init__(self):
# 인스턴스 변수
self.반죽 = 0.0
self.팥 = 0.0
self.기름 = 0.0
self.결과 = 0.0
# 메서드
def set(self, 반죽, 팥, 기름):
self.반죽 = 반죽
self.팥 = 팥
self.기름 = 기름
# 메서드
def 만들기(self):
self.결과 = self.기름 + self.반죽 + self.팥 + self.반죽
# 메서드
def 꺼내기(self):
print("붕어빵 완성 :", self.결과)
# 객체 생성
붕어빵1 = 붕어빵()
# 메서드 호출
붕어빵1.set(10, 2, 1)
붕어빵1.만들기()
붕어빵1.꺼내기()
| 객체지향 개념 | 붕어빵 예제 |
|---|---|
| 클래스(Class) | class 붕어빵: |
| 객체(Object) | 붕어빵1 = 붕어빵() |
| 생성자(Constructor) | __init__() |
| self | 현재 객체 자신 |
| 인스턴스 변수 | 반죽, 팥, 기름, 결과 |
| 메서드(Method) | set(), 만들기(), 꺼내기() |
- 객체지향 프로그래밍은 객체 단위로 개발하는 방법이다.
- 클래스는 객체를 만들기 위한 설계도이다.
- 생성자는 객체가 생성될 때 자동으로 실행되는 메서드이다.
- self는 현재 객체 자신을 가리킨다.
- 인스턴스 변수는 객체마다 따로 저장되는 변수이다.
- 메서드는 클래스 안에 작성하는 함수로, 객체의 기능을 의미한다.