오늘의 한 일
- python 강의 1일차
- 효율적인 코딩 공부법 특강
- 백준 알고리즘 문제 풀이 - 정리 및 복습
python 강의 1일차
파이썬 언어의 특징
- 컴파일 언어인 C, Java와는 다르게 Python은 인터프리터 언어이다.
- 컴파일러 - 어떤 프로그래밍 언어로 쓰여진 소스 파일을 다른 프로그래밍 언어로 바꾸어주는 번역기
- 인터프리터 언어의 특성 상 코드를 컴파일 하는 단계가 없기 때문에 코드가 실행되기까지의 속도는 빠르지만, 런타임에서 코드가 동작하는 시간은 비교적 느린 편이다.
- 동적 타입 언어로 C, Java와 다르게 변수를 할당할 때 자료형을 지정해 주지 않아도 됩니다.
- 문법이 쉽고 간결합니다. 때문에 생산성이 좋으며 코드의 가독성이 좋습니다.
코드 컨벤션
- 코드 컨벤션은 팀 프로젝트등의 협업시 내가 짠 코드를 남들이 보기 쉽게, 타인의 코드를 내가 보기 쉽게 코딩 스타일을 통일하자는 '약속' 으로, 파이썬에서는 PEP-8이라는 컨벤션 가이드를 제공하고 있다.
- 코드 컨벤션은 언어에 따라 요구하는 내용이 다르기 때문에, 내가 개발하는 언어에 맞는 컨벤션 스타일에 맞춰 코드를 작성할 필요가 있다.
- 파이썬에서 요구하는 코드 컨벤션
- 네이밍 컨벤션 : Pascal, Snake, Camel
- Pascal : PythonIsVeryGood / 각 단어를 대문자로 구별.
- Camel : pythonIsVeryGood / Pascal과 동일하지만, 첫 문자가 소문자로 시작합니다.
- Snake : python_is_very_good / 각 단어를 언더바( _ )로 구분.
- 네이밍 컨벤션 : Pascal, Snake, Camel
- 클래스, 함수, 변수 등을 네이밍할 때는 이름만 보고 해당 코드가 어떤걸 의미하는지 추측할 수 있어야 한다.
- PIE = 3.14 상수를 표현할 때는 예외적으로 모든 문자를 대문자 표현.
- numbers = [1,2,3,4] list를 표기할 때는 복수로 표현한다. 혹은 number_list와 같이 표현.
- for number in numbers: 반복문 사용 시 가독성을 늘릴 수 있다.
- def add(a, b): return a + b 함수를 네이밍할 때는 해당 함수가 어떤 역할을 하는지 표현해야 합니다.
네이밍 컨벤션은 가능하다면 snake로!
python 기초
변수 선언하기
- 선언할 변수 명 = 변수에 넣고 싶은 값 과 같은 형태로 변수를 선언한다.
description = “변수를 선언 하는 방법입니다.”
- 변수를 선언할 때에는 두 개 이상의 변수를 한번에 선언할 수도 있다.
a, b, c = 1, 2, 3
- 변수의 가장 첫 번째 문자에는 숫자를 사용할 수 없다.
- I(대문자 i), l(소문자 L), O(대문자 o)와 같은 문자를 단일 문자 변수로 선언하는 것을 권장하지 않는다. (폰트에 따라 I, l, 1 혹은 0, O 문자를 구분하지 못할 수 있기 때문.)
- list, type, class와 같이 python에서 이미 선언 되어 있는 단어를 변수 명으로 선언하고 싶을 때는 중복을 피하기 위에 변수 명 뒤에 언더바( _ )를 추가하여 선언한다.
list_ = [1,2,3,4]
자료형의 종류와 특징
- integer(int)
- 정수 자료형
- number = 10 과 같이 사용되며, 정수 자료형이기 때문에 소수점은 지원하지 않는다.
- 사칙연산과 같은 계산식을 지원한다.
- float
- 실수 자료형
- number = 10.3 과 같이 사용되며, 소수점을 지원한다.
- integer와 마찬가지로 사칙연산과 같은 계산식을 지원한다.
- ※ 실수 계산시에 오차가 생기는 이유 : 실수를 컴퓨터상에서 근사하여 표현할 때 소수점의 위치를 고정하지 않고 그 위치를 나타내는 수를 따로 적는 부동 소수점 방식을 사용하기 때문에 십진수 소수가 정확하게 표현되지 않아 문제를 일으킬 수 있다. - 정리각!
- string
- 문자열 자료형
- hello = "world!!" 와 같이 사용되며, 변수에 문자를 저장할 수 있습니다.
- 파이썬에서는 따옴표( ‘ )와 쌍따옴표( “ )를 구분하지 않습니다.
- 따옴표 혹은 쌍따옴표를 세개를 묶어 문장 혹은 주석을 표현할 수 있습니다.
- list
- numbers = [1, 2, 3, 4, 5] 와 같이 사용되며 1개 이상의 값을 한 변수에 담아 사용할 수 있습니다.
- list 요소에는 integer, float, string, dictionary, list 등 다양한 자료형을 담을 수 있습니다.
- tuple
- numbers = (1, 2, 3, 4, 5)와 같이 사용되며 리스트와 동일한 방법으로 선언할 수 있습니다.
- tuple 자료형은 값을 선언한 후 요소들을 변경하거나 삭제할 수 없습니다.
- set
- numbers = {1, 2, 3, 4, 5}와 같이 사용되며 리스트와 동일한 방법으로 선언할 수 있습니다.
- set 자료형은 중복 된 데이터를 담을 수 없습니다. -> 백준 알고리즘 3052번 set함수를 이용한 중복 거르기
- dict
- members = {”1”: “lee”, “2”: “park”, “3”: “kim”} 과 같이 사용되며 {key: value} 쌍으로 이루어져 있습니다.
- key에는 integer, float, string 자료형이, value에는 integer, float, string, dictionary, list 등 다양한 자료형을 담을 수 있습니다.
- boolean
- flag = True 와 같이 사용되며 True 혹은 False 두 값만 사용할 수 있습니다.
- 주로 분기문(if) 혹은 합격 / 불합격과 같은 상태를 나타낼 때 사용됩니다.
변수 유효 범위(variable scope)에 대한 이해
- 변수 유효 범위란?
python을 포함한 대부분의 언어에는 "변수 유효 범위"라는 개념이 있습니다.
변수가 선언된 위치나 키워드에 따라 변수를 사용할 수 있는 범위가 달라지게 되는데,
이를 변수 유효 범위 혹은 variable scope라고 부릅니다.
파이썬에서 변수는 유효 범위에 따라 지역 변수(local variable)와
전역 변수(global variable)로 나뉘게 됩니다.
지역 변수는 함수 내부에서 선언되며 다른 함수에 영향을 끼치지 않습니다.
반대로 전역 변수는 함수 밖에서 선언되며 어디서든 접근할 수 있습니다.
함수 내에서 선언된 변수의 경우 지역 변수 속성을 가지게 되며 global 키워드를 사용해
전역 변수로 재선언할 수 있습니다.
- 지역 변수(local variable)
def func1():
number = 10 # 함수 내에서 number라는 지역 변수를 선언
def func2():
print(number) # func1에서 생성된 지역 변수는 funt2에서 접근할 수 없다.
func1()
func2()
"""
Traceback (most recent call last):
File "sample.py", line 8, in <module>
func2()
File "sample.py", line 5, in function2
print(number)
NameError: name 'number' is not defined
"""
- 전역 변수(global variable)
number = 10 # 함수 밖에서 number라는 전역 변수 생성
def func():
print(number) # 전역 변수는 자유롭게 접근할 수 있다.
func() # 함수를 실행하면 10이 정상적으로 출력된다.
- 전역 변수 사용 시 주의할 점
- 함수 내에서 전역 변수의 값을 바꾸려 할 경우
number = 10
def func():
number = 5 # 전역 변수의 값이 바뀌는 것이 아닌, 지역 변수로 다시 선언됩니다.
func()
# 함수 내에서 재할당 된 지역 변수는 전역 변수에 영향을 끼치지 않습니다.
print(number) # 10
-
- 전역 변수 사용과 지역 변수 할당을 같이 하는 경우
number = 10
# 전역 변수인 10을 출력하고 지역 변수로 다시 선언하는 코드 작성
def func():
print(number)
number = 5
# 실행시켜 보면 에러가 발생한다.
func()
"""
Traceback (most recent call last):
File "sample.py", line 7, in <module>
func()
File "sample.py", line 4, in func
print(number)
UnboundLocalError: local variable 'number' referenced before assignment
"""
왜 에러가 발생할까?
함수 내부에서 전역 변수와 동일한 이름으로 지역 변수를 할당할 경우 함수에서는
해당 변수를 지역 변수로 간주하게 됩니다. 때문에 print(number)에서는 number라는
지역 변수가 선언되기 전 출력하려 했기 때문에 이와 같은 에러가 발생합니다.
- 함수 내에서 전역 변수를 바꾸려면? - global 키워드를 사용
number = 10
def func():
global number # 함수에서 number 변수를 다시 할당할 수 있도록 해줍니다.
number = 5 # global 키워드를 사용했기 때문에 전역 변수의 값이 변경됩니다.
func()
print(number) # 5
-
- 전역 변수를 권장하지 않는 이유 : 코드가 길어질수록 전역 변수로 선언 된 값은 어디서 값이 변했는지 추적하기 어렵고, 문제가 생겼을 때 디버깅을 하기 어려워 지기 때문. 같은 이유로 PIE = 3.14와 같은 전역 상수를 선언하는 것을 제외하면 전역 변수를 사용하지 않는 것이 좋은 코드를 만드는 방법이다.
전역 변수를 사용하지 권장하지 않는 이유 추가 - Why are global variables evil?
효율적인 코딩 공부법 특강
기억에 남는 한마디 : 프로그래밍 언어를 학습한다는 것은 절대로 수험 공부가 아니다!
프로그래밍 언어를 학습하는것 = 외국어 공부 = 일단 무작정 외국인과 말하다보면 자연스레 는다 = 꾸준한 코드 작성이 답이다.
코딩 학습의 순서
- 프로그래밍 언어 (언어학자 전직 X 익숙해지기 O)
- 프레임워크/라이브러리 (프레임워크는 기계! “사용법을 익히자”는 마음가짐으로)
- 프로젝트 (완벽하게, 면접관 앞에서 설명할 수 있을 정도로)
프로젝트에 사용된 기술을 깊게 알기에 앞서
왜 프로젝트에 이 라이브러리/코드를 사용했는지를 설명할 수 있어야 한다.
(e.g. 구구단 코드: for문의 내부 동작을 알기보다는 왜 for문을 썼는지 설명할 수 있어야 한다)
- 프로젝트 발전 (배포하기, 사용자 피드백 받고 유지보수하기, 테스트하기) + 코딩 테스트 대비 (개념 잡기, 그림 그리기, 코드로 옮기기)
※ 구글링도 실력!
https://makemoneyskills.com/googling-31-tips/
파이참 단축키 모음
앞으로의 공부방식에 대한 비전이 보인것 같아 아주 알찬 수업이였다.
백준 문제풀이 정리 및 복습
문제 풀이를 하면서 함수의 적용법이나 처음 보는 방식의 문제들을 구글링 한 부분도 많았기 때문에, 내 것으로 만들기 위해 풀이를 정리해서 백준 알고리즘 카테고리에 게시하고 복습해보는 시간을 가졌다. 복습을 하면서 당시에는 이해하기 힘들었던 부분도 바로바로 어떤 방식으로 적용시켜야 하는지 먼저 그려져 시야가 넓어진 느낌이다!