혼공파 78 ~ 79강
1. 객체지향 프로그래밍
# 객체 지향 프로그래밍
"어떻게 하면 프로그램을 더 좋게 만들 수 있을 것인가?" 라는 이념 중 하나
# 프로그래밍 이념
"더 좋은 프로그램" 으로 향해서 다가가는 접근 방법
## 명령형 프로그래밍
명령문을 사용해서 프로그램이 어떠한 동작을 할지 순서대로 나열해서 프로그램을 만들자!
주어 + 동사 + 목적어 (I love you)
동사 + 목적 (love you) → love(you)
print("문자열")
input("문자열")
## 선언형 프로그래밍
<h1>제목</h1> html 같은 것
## 절차적 프로그래밍
서브루틴, 프로시저, 함수
- 같은 코드를 여러 번 작성하지 말고 함수를 만들어서 사용하자!
- GOTO 구문, JUMP 구문을 사용하지 말고 함수를 사용하자!
## 함수형 프로그래밍
함수는 수학적 개념
순수 함수를 사용해야 한다!
## 객체 지향 프로그래밍
- 더 좋은 프로그램 : 규모가 큰 프로그램
- 변수와 함수를 묶어서 하나의 묶으로 만들면 더 좋은 프로그램을 만들 수 있을 것이다.
# 함수가 너무 많아서 발생한 폐해
- 무엇이 무엇을 하는 함수 인지 모름
- 어떤 함수가 존재하는지 찾기도 힘듦
- 함수를 변경하려는데, 영향 범위를 추적하는 것이 힘듦
>>> 대규모의 프로그램을 만드는 것이 힘들었다.
# 함수를 카테고리로 묶으면 어떨까?
## 관심사로 카테고리 구분
Math.PI()
Math.abs()
Math.sin()
Math.cos()
## 객체 지향 프로그래밍
I Love (You)
주어를 다시 살려서 주어(객체)를 기반으로 변수/함수를 모으면 어떨까?
현대의 프로그래밍에서는 이러한 주어(객체)를 클래스로 만든다.
파이썬에서는 아래 모두를 사용한다.
### 명령형 프로그래밍
### 절차적 프로그래밍
### 함수형 프로그래밍
### 관심사로 카테고리 구분
→ [파이썬] 모듈
### 객체 지향 프로그래밍
→ [파이썬] 클래스
2. 클래스 등장 이전
# 학생들의 성적을 저장해두고
# 평균과 합계를 출력하는 프로그램
학생들 = [
{"이름": "인성", "국어": 87, "영어": 88, "수학": 98, "과학": 95},
{"이름": "구름", "국어": 92, "영어": 98, "수학": 97, "과학": 98},
{"이름": "별이", "국어": 76, "영어": 96, "수학": 95, "과학": 90}
]
print("이름", "총점", "평균", sep="\t")
for 학생 in 학생들:
총점 = 학생["국어"] + 학생["영어"] + 학생["수학"] + 학생["과학"]
평균 = 총점 / 4
print(학생["이름"], 총점, 평균, sep="\t")
# 문제점 발생
# 학생 생성 때 실수가 발생할 수 있으므로 생성을 획일화하면 좋을 것 같음
# 총점과 평균을 구하는 사양에 변경이 발생하면 코드를 수정하는데 오래 걸림
# 1. 함수를 사용해서 해결해 보기
# (1) 학생 생성 때 실수가 발생할 수 있으므로 생성을 획일화하면 좋을 것 같음
def create_student(이름, 국어, 영어, 수학, 과학):
return {"이름": 이름, "국어": 국어, "영어": 영어, "수학": 수학, "과학": 과학}
학생들 = [
create_student("인성", 87, 88, 98, 95),
create_student("구름", 92, 98, 97, 98),
create_student("별이", 76, 96, 95, 90)
]
## Ctrl + Alt + 방향키 위아래로 여러줄을 한꺼번에 선택하여 한번에 수정가능
# (2) 총점과 평균을 구하는 사양에 변경이 발생하면 코드를 수정하는데 오래 걸림
def sum_student(학생):
return 학생["국어"] + 학생["영어"] + 학생["수학"] + 학생["과학"]
def average_student(학생):
return sum_student(학생) / 4
print("이름", "총점", "평균", sep="\t")
for 학생 in 학생들:
총점 = sum_student(학생)
평균 = average_student(학생)
print(학생["이름"], 총점, 평균, sep="\t")
## 문제점 발생
# (1) 함수가 너무 많아져서 합계를 구하는 함수가 있는지 + 평균을 구하는 함수가 있는지 자체를 모름
# (2) "학생들"이라는 변수에 직접적으로 접근할 수 있다는 것
# (3) 함수가 분산되어 있어 구분이 되지 않는다
## 이를 해결하기 위해 클래스가 탄생!!!!
'Base > Python' 카테고리의 다른 글
25. 특수한 이름의 함수, 값 객체 (0) | 2023.06.29 |
---|---|
24. 클래스 문법 기본 (0) | 2023.04.20 |
22. 예외 처리의 else finally 구문 / 예외 객체와 예외 구분 / 예외 강제 발생 (0) | 2023.03.25 |
21. 구문 오류와 예외 / 기본적인 예외처리 방법 / 예외처리 구문 (0) | 2023.03.24 |
20. 파이썬 설치 및 환경설정 (0) | 2023.03.23 |
댓글