2주 : day7

daye·2023년 3월 9일

달성한 목표

강의 : ~중급32

정리할 파트

강의 : 중급 20~32 요약

20 객체와 메모리

  • 변수는 객체의 메모리 주소를 저장하고 이를 이용해서 객체를 참조한다.
  • class로부터 생성자를 호출해서 객체가 메모리에 생성됨
  • 변수는 따로 저장되는 것
  • 객체가 변수에 직접 저장되는 것이 아니니까, 변수에는 객체가 저장된 메모리의 주소가 저장되는 것
  • 변수를 이용해 객체를 조작해 봤는데, 실제로는 변수 안에 저장된 객체의 메모리 주소를 이용해서 변수에 명령을 내리면, 주소를 찾아가서 주소에 있는 객체에 있는 기능이 호출된다던가 속성이 변경될 수 있는 것
  • 그래서 이런 변수를 레퍼런스 변수(주소값을 가지고 객체를 참조한다)라고 한다.
  • 예시로 비교
class Robot:
     ~~~

rb1 = Robot(‘red’, 200, 80)
rb2 = Robot(‘blue’, 300, 120)
rb3 = rb1
  • 이 때 rb1과 rb3는 같은 객체 같은 주소값을 공유하고 있는 것임.

copy() 함수

enumerate() 함수

: 인덱스와 원소로 이루어진 튜플(tuple)을 만들어준다.
https://www.daleseo.com/python-enumerate/

21 객체 복사

얕은 복사

: 객체 주소를 복사하는 것. 객체 자체가 복사되는 것이 아니다.

깊은 복사

: 객체 자체를 복사하는 것. 또 하나의 객체가 만들어진다.

깊은 복사 하는 방법

	scores = [9, 8, 7, 1, 3, 10, 5]
	scoresCopy = []
    
for s in scores:					#1
	scoresCopy.append(s)
scoresCopy.extend(scores)			#2
scoresCopy = scores.copy()			#3
scoresCopy = scores[:]				#4
  • 리스트의 슬래시 기능 [:] : 리스트의 맨 앞에서부터 맨 뒤까지를 의미
  • id() 함수 : 객체의 주소를 알려줌

append()

array.append(x)

nums = [1, 2, 3]
nums.append(4)			# [1, 2, 3, 4]

nums.append([5, 6])		# [1, 2, 3, 4, [5, 6]]
						# 리스트가 하나의 객체로 추가됨

extend()

array.extend(iterable)

  • 괄호() 안에는 literable 자료형만 올 수 있다.
nums = [1, 2, 3]
nums.extend([4, 5])		# [1, 2, 3, 4, 5]
						# 리스트로 주어진 [4, 5]의 요소가 각각 추가됨
a = [10]
nums.extend(a)			# [1, 2, 3, 4, 5, 10]

pop()

: 지우고자 하는 리스트의 인덱스를 받아서 지우는 함수

a = [1,2,1,3,4,5,1]
removed = a.pop(1)		# [1, 1, 3, 4, 5, 1]
removed = a.pop()		# [1, 1, 3, 4, 5]

22 상속

  • 클래스는 또다른 클래스를 상속해서 내것처럼 사용할 수 있다.
class CalculatorChild(CalculatorSuper):

--> CalculatorSuper를 가져다 쓰겠다(상속하겠다.

23-24 생성자

  • 객체가 생성될 때 생성자를 호출하면 init()가 자동 호출된다.

init()

  • init() 이 속성을 초기화한다.

super()

  • 상위 클래스의 속성을 초기화하기 위해서 사용한다.

25 다중 상속

: 2개 이상의 클래스를 상속한다.

  • 다중상속을 너무 남발하지 않는 것이 좋다.

26 오버라이딩(override)

  • 하위 클래스에서 상위 클래스의 method를 재정의(override)한다.

27 추상 클래스

  • 상위 클래스에서 하위 클래스에 method 구현을 강요한다.
  • 추상클래스 존재 이유 : 각각의 클래스에 가져가서 용도에 맞게 구현하여 사용하라는 뜻.

28 예외

  • 에러 : 소프트웨어적으로 처리할 수 없는 문제.
    ex/ 소프트웨어적인 문법적 에러(syntax error; 아예 실행 자체가 안됨),
    네트워크 에러(외부에서 데이터를 받아야하는데 네트워크 불안정 또는 단절), 천재지변(전기가 나갔다)

  • 예외 : 프로그램은 잘 실행되고 있는데, 예상하지 못한 이유로 문제가 발생.
    ex/ ZeroDivisionError: division by zero

  • 예외 관련 클래스(하위)는 Exception 클래스(최상위)를 상속한다.

29 예외 처리

  • 발생된 예외를 별도 처리함으로써 프로그램 전체의 실행에 문제가 없도록 함
  • 프로그램이 실행되다가 중간에 예외가 발생하면 프로그램이 중단됨.(예외 처리하기 전)

try ~ except

: 예외 발생 예상 구문을 try ~ except 로 감싼다

n1 = 10; n2 = 0
try:
	print(n1 / n2)
except:
	print('예상치 못한 예외 발생')
    print('다르프로그램 실행에는 문제 없습니다.')

30 try ~ except ~ else

: 예외가 발생하지 않는 경우에 실행하는 구문

  • else는 꼭 try - except - else 세트로 함께 써야한다. (ex/ try - else 는 안됨)

31 finally

: 예외 발생과 상관 없이 항상 실행한다.

32 Exception 클래스

  • 어떤 에러인지 알고 싶을 때

raise

: 예외를 일부러 발생시킬 수 있다.

args (메모)

arguments
: 여러개의 인자를 함수로 받고자 할 때 쓰인다.
* ? 용례를 잘 모르겠다.

나머지 시간 예제 연습

0개의 댓글