[ 오늘의 수업 내용 요약 ]
006_ 지역변수와 전역변수
1. 전역변수
: 함수 밖에 선언된 변수로 어디에서나 사용은 가능하지만 함수 안에서 수정할 수는 없다.
-
지역변수
: 함수 안에 선언된 변수로 함수 안에서만 사용 가능하다.
-
global 키워드
: global을 사용하면 함수 안에서도 전역변수의 값을 수정할 수 있다.
num_out = 10
def printNumbers():
global num_out
num_out = 20
print(f’num+out : {num_out}’)
printNumbers()
print(f’num_out : {num_out}’)
=> num_out = 20
num_out = 20
007_ 중첩함수
- 함수 안에 또 다른 함수가 있는 형태이다.
- 내부 함수를 함수 밖에서 호출할 수 없다.
008_ lambda 함수
- lambda 키워드를 이용하면 함수 선언을 보다 간단하게 할 수 있다.
009_ 모듈
- 모듈은 이미 만들어진 훌륭한 기능으로 사용자는 쉽게 사용할 수 있다.
- 계산 모듈
- 난수 모듈
- 날짜/시간 모듈
사용자는 마치 내 것처럼 사용할 수 있다.
- 파이썬 모듈은 내부 모듈, 외부 모듈, 사용자 모듈로 구분할 수 있다.
내부 모듈 -> 파이썬 설치 시 기본적으로 사용할 수 있는 모듈
외부 모듈 -> 별도 설치 후 사용할 수 있는 모듈
사용자 모듈 -> 사용자가 직접 만든 모듈
010_ 모듈 제작
- 모듈은 특정 기능을 가지고 있는 파이썬 파일을 말한다.
011_ 모듈 사용
- import 키워드를 이용해 모듈을 임포트 한다.
- as키워드를 이요해 모듈 이름을 단축시킬 수 있다.
- from~as 키워드를 이용해서 모듈의 특정 기능만을 사용할 수 있다.
ex from calculator import add
ex from calculator import * (모든 기능을 다 불러올 수 있다.)
배열 형태로도 가져올 수 있다.
012-013_ 실행(메인)파일
1. name전역변수
- name에는 모듈 이름이 저장되거나 main이 저장된다.
addModule.py : name = addModule
module.py : name = main 실행(메인)파일/ 시작파일이 된다.
- 메인일 때 실행해라
=> if name == ‘main’:
014_ 패키지
- 패키지를 이용하면 관련 있는 모듈을 그룹을 관리할 수 있다.
ex) CalculatorForInt
- addCal.py
- subCal.py
- mulCal.py
- divCal.py
015_ site-package
- site-package에 있는 모듈은 어디서나 사용할 수 있다.
- sys모듈 : 시스템의 간단한 정보들을 가지고 있는 모듈
- path : 정보들의 경로를 알려준다.
016_ 자주 사용하는 외부 모듈
- 수학, 난수, 시간 모듈은 코딩할 때 유용하게 사용된다.
math 모듈 : 수학관련 모듈
random 모듈 : 난수 관련 모듈
time 모듈 : 시간 관련 모듈
017_ 객체지향 프로그래밍
-
객체를 이용한 프로그램으로 객체는 속성과 기능으로 구성된다.
-
객체 = 속성 + 기능
계산기 = 속성 : 숫자
기능 : 덧셈, 뺄셈 등
자동차 = 속성 : 색상, 길이, 가격
= 기능 : 전진, 후진, 정지 등
-
객체 만들기( 생성 )
-
객체는 클래스에서 생성된다.
- 자동차 클래스
속성: 색상, 길이, 가격 등
기능: 전진, 후진, 정지 등
=> 2. 객체 생성 -> 3. 자동차 객체가 생성됨
- 객체 사용 장점
- 코드 재사용, 모듈화에 좋다.
=> 객체 결합도가 낮을수록 좋은 소프트웨어다.
018_ 클래스와 객체 생성
- 클래스는 class 키워드와 속성(변수) 그리고 기능(함수)를 이용해서 만든다.
class Car: -> 클래스선언
def init(self, clolr, length): -> 생성자, 속성
self.color = color
self.length = length
def doStop(self): -> 기능
print(‘STOP’)
def deStop(self): -> 기능
print(‘START’)
- 객체는 클래스의 생성자를 호출한다.
- 초기화 된다 = 속성의 값이 초기화된다.
019_ 객체 속성 변경
- 객체 속성은 변경할 수 있다.
- 도트 접근 연산자를 이용해 속성을 변경할 수 있다.
020_ 객체와 메모리
- 변수는 객체의 메모리 주소를 저장하고 이를 이용해서 객체를 참조한다.
- 레퍼런스 변수
- 얕은복사는 같은 메모리 주소를 공유한다.
021_ 얕은 복사와 깊은 복사
1. 얕은 복사
: 얕은 복사란 객체 주소를 복사하는 것으로 객체 자체가 복사되지 않는다.
2. 깊은 복사
: 깊은 복사란 객체 자체를 복사하는 것으로 또 하나의 객체가 만들어진다.
3. 리스트 얕은 복사 하는 방법
import copy
scores = [9 8, 5, 7, 6, 10]
scoreCopy = []
socresCopy = scores
print(f’scores): {id(scores)}’)
print(f’id(scoresCopy): {id(scoresCopy)}’)
4. 리스트 깊은 복사 하는 방법
import copy
scores = [9 8, 5, 7, 6, 10]
scoreCopy = []
for s in scores:
scoresCopy.appedns(s)
print(f’id(scores) : {id(scores)}’)
print(f’id(scoresCopy) : {id(scoresCopy)}’)
혹은
scoresCopy = scores[:]
print(f’id(scores) : {id(scores)}’)
print(f’id(scoresCopy) : {id(scoresCopy)}’)
022_ 클래스 상속
- 클래스는 또 다른 클래스를 상속해서 내 것처럼 사용할 수 있다.
023-024_ 생성자
- 객체가 생성될 때 생성자를 호출하면 init()가 자동 호출된다.
cal = Calculator() -> Calculator()생성자 호출 ->Calculatorinit()
- init()가 속성을 초기화 한다.
- 상위 클래스의 속성을 초기화하기 위해서 super()를 이용한다.
025_ 다중상속
- 2개 이상의 클래스를 상속한다.
- 다중상속을 남발하면 안된다.
026_ 오버라이딩
- 하위 클래스에서 상위 클래스의 메서드를 재정의한다.
027_ 추상 클래스
- 상위 클래스에서 하위 클래스에 메서드 구현을 강요한다.
from abc import ABCMeta
from abc import abstractmethod
- 특정기능을 상속 받았을 때 알맞게 쓰기 위해 추상 클래스 사용
028_ 예외란 ?
- 문법적인 문제는 없으나 실행 중 발생하는 예상하지 못한 문제다.
- 에러 : 소프트웨어적으로 처리할 수 없는 것
- 예외 : 문법적 문제도 없고 천재지변이 아닌 상황에 예상하지 못한 문제
- 예외 관련 클래스는 Execption 클래스를 상속한다.
029_ 예외처리
- 예상하지 못한 예외가 프로그램 전체 실행에 영향이 없도록 처리함
=> 발생한예외에 대해서 별도 처리함
- 예외 발생 예상 구문을 try~except로 감싼다.
- 예외가 발생할 것 같은 구간에 정확히 try~except로 감싸야 한다.
030_ try~except~else
- ~else : 예외가 발생하지 않은 경우 실행하는 구문이다.
- except를 제외한 try else만 사용하면 에러가 난다.
031_ finally
032_ exception class
- exception 은 예외 담당 클래스
- raise 키워드를 이용하면 예외를 발생시킬 수 있다.