객체지향 프로그래밍
객체지향 프로그래밍이란?
절차적 프로그래밍
- 주어진 문제를 해결을 위하여 일련의 절차를 따르는 프로그래밍
- 기능을 수행하는 데 있어 필요한 경우 함수를 정의하고 적절한 상황에 호출
객체지향 프로그래밍
- 프로그램을 구성하는 중추적 개념을 객체로 두는 형태의 프로그래밍
- 각각의 객체는 데이터를 가지고 있으며, 특정한 절차를 수행할 수도 있음
클래스와 인스턴스 생성
선거 상황을 하나의 클래스로 표현할 수 있을까?
✅<서울 성북 병> 지역구에 출마한 여러 후보들
✅후보들은 성별, 이름, 기호, 나이 등의 개인정보를 가지고 있음
✅후보들의 지지율은 판세에 따라 변화
Class (클래스)
- 객체지향 프로그래밍을 구현하기 위한 Python에서의 핵심 개념
- 각각의 객체에 대한 설계도라고 표현할 수도 있음
인스턴스
: 클래스로부터 생성되는 각각의 개체를 부르는 명칭
Ex) 후보1, 후보2, 후보3 등 입후보자 개개인이 클래스의 인스턴스
속성
: 각각의 인스턴스가 가질 수 있는 데이터 값
Ex) 후보자의 나이, 후보자의 지지율, 후보자의 성별 등
메소드
: 클래스 내에서 정의되고 사용되는 함수를 구분하여 일컫는 용어
# 클래스 정의
class Candidate :
# 클래스 속성 : 인스턴스 모두가 공유하는 속성
region = '서울 성북 병'
# 생성자 : 어떠한 객체가 새로 만들어질 때 함께 호출되는 메소드
def __init__(self, name, gender, age, number, rating) :
self.name = name
self.gender = gender
self.age = age
self.number = number
self.rating = rating
클래스명과 속성 값을 활용하여 개변 인스턴스를 하단 코드와 같이 생성할 수 있다
kim = Candidate('김안암', 'M', 47, 1, 20.5)
choi = Candidate('최고려', 'M', 52, 2, 17.4)
park = Candidate('박호랑','F', 37, 3, 19.2)
lee = Candidate('이정보', 'M', 61, 4, 21.2)
son = Candidate('손대학', 'F', 39, 5, 16.6)
인스턴스명.속성명 을 이용하여 속성 값을 곧장 확인할 수 있다
: region은 클래스 속성이므로 어떤 후보자든 그 값이 동일하나, age나 rating등은 인스턴스 속성이므로 후보자마다 값이 다르다.
print(kim.region)
print(park.age)
print(son.rating)
소멸자 : 이미 존재하는 어떠한 객체가 사라질 때 함께 호출되는 메소드
def __del__(self) :
print(self.name, '후보가 사퇴하였습니다.')
del(kim) # 소멸자의 print가 수행됨과 동시에 만들어두었던 kim 객체가 사라짐
del kim # 둘다됨
메소드와 클래스의 활용
메소드
: 클래스 내에서 정의되고 사용되는 함수를 구분하여 일컫는 용어
def print_info(self) :
print('후보자 정보 공개')
print('성명 :', self.name)
if self.gender == 'M':
print('성별 : 남성')
else:
print('성별 : 여성')
print('연령 :', self.age, '세')
- self 와 함께, 필요한 인자를 투입해 메소드 정의 가능
- 객체 스스로를 지칭하기 위해서는 self를 활용
- 객체 속성을 지칭하기 위해서는 클래스 밖 문법과 유사하게 객체지칭명.속성명 을 활용
메소드의 호출
→ 객체명.메소드명 을 활용해 메소드 호출 가능
후보자 지지율의 변화, 메소드로 구현하기
# 지지율을 출력하는 메소드
def print_rating(self) :
print('기호', self.number, '번', self.name, '후보자 지지율입니다.')
print(self.rating, '%')
# 유세를 통해 지지율을 올리는 메소드
def campaign(self, num) :
print('유세를 총', num, '회 실시하였습니다.')
print('기호', self.number, '번', self.name, '파이팅!')
print('지지율이', num, '%p 상승하였습니다.')
self.rating = self.rating + num
self.rating = self.rating + num 과 같이 속성 값을 변경 및 제어할 수 있음
def bad_news(self, num) :
print('아이고! 악재가', num, '개 터지고 말았습니다.')
print('지지율이', num, '%p 하락하였습니다.')
self.rating = self.rating - num
반대 메소드도 구현할 수 있음
객체 간 상호작용의 구현
- 클래스 내에서 메소드를 정의할 때, 인자로는 정수나 실수 뿐 아니라 객체도 지정될 수 있음
- 메소드의 인자에 객체가 투입됨으로써, 객체 간 상호작용을 구현할 수 있음
def unite(self, other) :
print(self.name, '후보와', other.name, '후보가 단일화하였습니다.')
sum_rating = self.rating + other.rating
print('단일화 결과', self.name, '후보의 지지율은', sum_rating, '% 입니다.')'Python' 카테고리의 다른 글
| [Python] 군집화를 통한 데이터 특성 파악 (0) | 2025.10.02 |
|---|---|
| [Python] BeautifulSoup를 이용한 웹 크롤링 (0) | 2025.10.01 |
| [Python] 데이터 전처리 후 Matplotlib로 시각화 방법 (0) | 2025.09.30 |
| [Python] Pandas를 이용한 데이터 처리 방법 정리 (0) | 2025.09.30 |
| [Python] 재귀 호출과 그 응용 (0) | 2025.09.30 |