반응형
클래스란? |
- 객체 지향 프로그래밍 언어를 구현하는 방법입니다.
- 객체를 기반으로 변수와 함수를 묶어서 구분하는 것을 객체 지향 프로그래밍입니다.
▶ 클래스? 1. 함수와 변수를 묶어 놓은 것 2. 객체를 만들어내개 위한 설계도 객체 = 인스턴스 |
▶ 객체 지향 프로그래밍이란? - 객체를 우선으로 생각해서 프로그래밍한다는 의미입니다. - 클래스 기반의 객체 지향 프로그래밍 언어는 클래스라는 것을 기반으로 객체를 만들고, 그러한 객체를 우선으로 생각해서 프로그래밍하는 것을 의미합니다. |
[ 클래스 - 문제1 ] 학생들의 성적을 저장해두고 평균과 합계를 출력하는 프로그램입니다.
학생들 = [
{"이름":"정올", "국어":87, "영어":99, "수학":96, "과학":67},
{"이름":"본선", "국어":69, "영어":88, "수학":49, "과학":82},
{"이름":"민석", "국어":98, "영어":90, "수학":76, "과학":79}
]
print("이름", "총점","평균", sep="\t")
for 학생 in 학생들:
총점 = 학생["국어"]+학생["영어"]+학생["수학"]+학생["과학"]
평균 = 총점/4
print(학생["이름"], 총점, 평균, sep="\t")
[ 생각해볼문제 ]
1. 학생수가 적다면 문제가 없지만 학생수가 많아진다면?
- 학생을 추가할 때 오타가 날 수 있습니다.
- 총점이나 평균을 구하는 코드가 여러번 사용될 수 있습니다.
2. 만약, 또 다른 과목이 추가 된다면?
- 총점을 구하는 코드를 일일이 찾아서 변경해야 합니다.
- 변경 누락이 생길수 있고 시간이 오래 걸립니다.
[ 해결 방법 1 - 함수로 해결하기 ]
def create_student(이름, 국어, 영어, 수학, 과학):
return {"이름":이름, "국어":국어,"영어":영어,"수학":수학,"과학":과학}
def sum_student(학생):
return 학생["국어"]+학생["영어"]+학생["수학"]+학생["과학"]
def average_student(학생):
return sum_student(학생) / 4
학생들 = [
create_student("정올", 87, 99, 96, 67),
create_student("본선", 69, 88, 49, 82),
create_student("민석", 98, 90, 76, 79)
]
print("이름", "총점","평균", sep="\t")
for 학생 in 학생들:
총점 = sum_student(학생)
평균 = average_student(학생)
print(학생["이름"], 총점, 평균, sep="\t")
▶ 함수 때문에 코드길이는 늘어났지만 수정이 용이해졌습니다.
[ 생각해볼문제 ]
1. 규모가 더~~ 더 커진다면 함수가 너무 많아져서 어떤 함수가 있는지 알수가 없습니다.
[ 해결 방법 2 - 클래스로 해결하기 ]
class 학생:
def 초기화(self, 이름, 국어, 영어, 수학, 과학): #매개변수
self.이름 = 이름
self.국어 = 국어
self.영어 = 영어
self.수학 = 수학
self.과학 = 과학
#객체(인스턴스)
st = 학생()
#함수 호출 방법 1
학생.초기화(st,"정올", 87, 88, 98, 95)
print(st.이름, st.국어)
#함수 호출 방법2
st.초기화("정올", 87, 88, 98, 95)
print(st.이름, st.국어)
※ 함수 호출 방법2를 더 많이 사용합니다.
[ 해결 방법 3 - 클래스로 해결하기 ]
class Student:
def __init__(self, 이름, 국어, 영어, 수학, 과학):
self.이름 = 이름
self.국어 = 국어
self.영어 = 영어
self.수학 = 수학
self.과학 = 과학
def sum(self):
return self.국어 + self.영어 + self.수학 + self.과학
def average(self):
return self.sum() / 4
def print(self):
print(self.이름, self.sum(), self.average(), sep="\t")
StudentList = [
Student("정올", 87, 99, 96, 67),
Student("본선", 69, 88, 49, 82),
Student("민석", 98, 90, 76, 79)
]
print("이름", "총점","평균", sep="\t")
for 학생s in StudentList:
학생s.print()
# 클래스 이름 정의하는 방법
- 스네이크 케이스 : 단어와 단어 사이를 _ 연결하는 방법 예) create_student
- 대문자 캐멀 케이스 : 단어의 첫 자를 대문자로 바꾸고 연결하는 방법 예) CreateStudent
→ 파이썬은 대문자 캐멀 케이스를 사용하여 클래스 이름을 정의 합니다.
※ 클래스를 사용하는 이유 1. 함수와 변수를 모았으므로 가독성이 좋아지고 2. 코드 변경과 유지 보수 대 확인해야 하는 범위가 줄어듭니다. 3. 캡슐화 : 변수 앞에 __를 붙이면 코드 밖에서 수정이 불가능합니다. - 인스턴스 변수의 중복 사용을 막을 수 있습니다. |
반응형
'파이썬' 카테고리의 다른 글
34. 파이썬 클래스 - 겟터(getter) 와 셋터(setter) (0) | 2024.04.01 |
---|---|
33. 파이썬 클래스 - 캡슐화 - 1 (0) | 2024.03.29 |
31. 파이썬 리스트 컴프리헨션 (0) | 2024.02.21 |
30. 파이썬 map함수 - 2 (0) | 2024.02.04 |
29. 파이썬 iterable 객체와 iterator 객체 (0) | 2024.01.31 |