클래스로 들어가면서 개념이 조금씩 이해 안 가는 것들이 생겼다. 이전엔 내가 먼저 풀어보고 해설을 보는 게 가능했었는데 지금은 그게 좀 힘들다. 그래서 시간도 너~무 많이 걸리고 스트레스를 많이 받았는데, 일단 마음을 좀 가볍게 가지기로 했다. 수영할 때 그랬던 것처럼, 연습해야 늘지 않겠어? 강의 한 번 듣고 내 걸로 만들면 난 지금쯤 알파벳이나 MS에 있겠지.
객체object = 속성attribute + 기능function으로 구분
클래스 = class 키워드 + 속성(변수) + 기능(함수)
calculator1 = Calculator()
class Car: # 객체를 만들기 위해 클래스를 만듦
# Car() <- 이라는 생성자가 숨어있는 것 호출하면 자동으로 __init__함수를 호출
def __init__(self, col, len):
self.color = col # self는 Car를 말함
self.length = len
# 얘는 기능. 함수와 같음. 클래스 안에 있을 때는 매개변수로 self를 받아야 함
def doStop(self):
print('stop!')
# 여기까지 선언했다고 결과가 출력되진 않음. 클래스를 만든 것 뿐
def doStart(self):
print('start!')
def printCarInfo(self):
print('색: {}'.format(self.color))
print('길이: {}'.format(self.length))
# 서로 관계 없는 객체 2개를 메모리에 생성
# 유저가 넣은 속성값으로 초기화됨, 객체가 가진 기능도 사용 가능
# car1을 레퍼런스 변수라고 함
car1 = Car('red', 300)
car2 = Car('black', 350)
# 레퍼런스 변수를 통해, 클래스 기능에 접근 가능
car1.printCarInfo()
car2.printCarInfo()
car1.doStop()
car1. doStart()
<result>
색: red
길이: 300
색: black
길이: 350
stop!
start!
calculator = Calculator() # Calculator 클래스로 객체 생성
calculator.number1 = 10 # 속성값 변경
calculator.number2 = 20
print(f'calculator.add(): {calculator.add()}')
print(f'calculator.sub(): {calculator.sub()}')
print(f'calculator.mul(): {calculator.mul()}')
print(f'calculator.div(): {calculator.div()}')
<result>
calculator.add(): 30
calculator.sub(): -10
calculator.mul(): 200
calculator.div(): 0.5
robot1 = Robot('red', 200, 80)
robot2 = Robot('blue', 300, 120)
robot3 = robot1
scores = [int(input('국어 점수 입력: ')),
int(input('영어 점수 입력: ')),
int(input('수학 점수 입력: ')) ]
copyScores = scores.copy()
for idx, score in enumerate(copyScores):
score = int(score * 1.1) # 스코어에 10% 가산
# 가산된 값을 copyScore 리스트에 대체해서 넣어주기 위해 copyScore[idx] 사용
# 100점이 최대치이므로 if ~ else 사용
copyScores[idx] = 100 if score > 100 else score
print('평균: {}'.format(round(sum(scores) / len(scores),2)))
print(f'10% 가산 후 점수: {copyScores}')
print('10% 가산 후 평균: {}'.format(round(sum(copyScores) / len(copyScores),2)))
<result>
국어 점수 입력: 77
영어 점수 입력: 82
수학 점수 입력: 91
평균: 83.33
10% 가산 후 점수: [84, 90, 100]
10% 가산 후 평균: 91.33
# 리스트 복사해보자
scores = [1, 4, 7, 9, 15]
scoresCopy = []
# 얕은 복사하기
scoresCopy = scores
print(id(scores))
print(id(scoresCopy)) //id() 객체 주소 출력 함수
# for문으로 깊은 복사하기
for s in scores:
scoresCopy.append(s)
print(scoresCopy)
print(id(scores))
print(id(scoresCopy))
# extend로 깊은 복사하기
scoresCopy.extend(scores)
print(scoresCopy)
print(id(scores))
print(id(scoresCopy))
# 리스트 자체의 copy함수로 깊은 복사하기
scoresCopy = scores.copy()
print(scoresCopy)
print(id(scores))
print(id(scoresCopy))
# 리스트를 슬라이싱[:]해서 깊은 복사하기
scoresCopy = scores[:]
print(scoresCopy)
print(id(scores))
print(id(scoresCopy))
<result>
//얕은 복사 결과
1878895517376
1878895517376
//깊은 복사들 결과
[1, 4, 7, 9, 15]
1841062239936
1841063940544