01장 파이썬 시작하기
1. 이진숫자 (binary digit)
: 0과 1로 이루어진 수
2. 프로그래밍 언어 (programming language)
: 컴퓨터가 이해할 수 있는 이진 코드로 변환되는 것을 목표로 만들어진, 사람이 쉽게 이해할 수 있는 형태의 언어
# 대표적인 프로그래밍 언어로는 파이썬, C, C#, C++, 자바, 루비, 자바스크립트 등
3. 소스 코드 (source code)
: 사람들이 쉽게 읽고 이해할 수 있도록 프로그래밍 언어로 작성한 코드.
사람들은 이 코드로 작성하고 읽는 것이 힘들기 때문에 프로그래밍 언어로 소스 코드를 만들고, 이를 컴퓨터가 이해하는 이진 코드로 바꾼다.
4. 텍스트 에디터 (text editor)
: 글자를 입력할 수 있는 모든 종류의 프로그램.
메모장도 텍스트 에디터이며, 프로그래밍 작성 시 사용할 수는 있으나 최대한 프로그래밍 언어를 쉽게 작성할 수 있도록 도와주는 텍스트 에디터를 사용하면 좋다.
텍스트 에디터의 종류에는 비주얼 스튜디오 코드 (Visual Studio Code) 외에 서브라임 텍스트 (Sublime Text), 아톰(Atom)등이 있다.
5. 통합 개발 환경 (IDE; Integrated Development Environment)
: 텍스트 에디터와 코드 실행기, 이 두 가지를 모두 포함하고 있는 프로그램.
프로젝트 생성, 자동 코드 완성, 디버깅 기능을 제공하는 환경을 말한다.
# 디버깅: 프로그램 내의 코드 오작동을 찾아내는 것.
Ex) 자바의 이클립스, C언어의 Visual Studio
6. 개발 환경 (development environment)
: 컴퓨터, 텍스트 에디터, 파이썬 인터프리터 등과 같이 프로그래밍을 할 수 있는 환경, 텍스트 에디터를 포함해서 컴파일러 버전과 같은 개발 플랫폼을 말한다.
개발 환경이 달라지면 프로그램의 작동 결과가 달라질 수 있다.
7. 인터프리터 (Interpreter)
: 프로그래밍 소스 코드를 곧바로 실행해 주는 프로그램.
한 번에 코드 한 줄씩 읽어 실행.
파이썬 코드를 실행할 수 있는 도구는 파이썬 인터프리터.
8. 대화형 셀 (interactive shell)
: 컴퓨터와 상호 작용하는 공간이라는 의미에서 대화형 셀이라고 부른다.
프롬프트라고 불리는 >>>에 코드를 한 줄 한 줄 입력하면 곧바로 실행결과를 볼 수 있다.
9. 표현식 (expression)
: 어떠한 값을 만들어 내는 간단한 코드, 값이란 숫자, 수식, 문자열 등을 의미한다.
10. 문장 (statement)
: 표현식이 하나 이상 모인 것. 파이썬에서는 한 줄이 하나의 문장이 된다.
11. 키워드 (keyword)
: 의미가 부여된 특별한 단어.
언어 내에서 문법적인 용도로 사용되고 있는 단어.
식별자를 만들 때는 특별한 규칙을 따라야 한다.
# 스네이크 케이스(snake_case): 단어 사이에 _기호를 붙여 만든 식별자.
phone_number = "010-XXXX-XXXX"
# 캐멀 케이스(CamelCase): 단어들의 첫 글자를 대문자로 만든 식별자. 클래스 식별자를 만들 때 사용.
Class WorldMap:
pass
# 파스칼 케이스: 캐멀 케이스 중에서 첫 번째 글자가 대문자인 것.
Class Person:
pass
12. 변수 (variable)
: 값을 저장할 때 사용하는 식별자.
이름은 '변수'이지만 숫자뿐만 아니라 모든 자료형을 저장할 수 있다.
- 선언: 변수를 사용하려면 식별자는 무엇이고, 어떤 데이터를 가진다라는 것을 알려줘야 하는데, 이는 변수를 '선언한다'라고 한다.
- 할당: 변수에 값을 넣는 것을 '할당한다'라고 한다.
# 할당: 메모리에 변수의 값이 들어갈 공간을 할당해야 하므로
- 참조: 변수에 접근하는 것을 '참조한다'라고 한다.
# 참조: 결국 변수가 저장된 메모리에 접근하는 것인데, 이 메모리의 '주소'를 참조한다고 생각하면 된다.
13. 함수 (function)
: 코드의 집합.
식별자 뒤에 괄호가 붙어 있으면 해당 식별자는 함수.
- 함수 호출: 함수를 사용하는 것. 함수를 호출할 때는 괄호 내부에 여러 가지 자료를 넣게 되는데, 이러한 자료를 '매개변수'라 하고, 함수를 호출해서 최종적으로 나오는 결과를 '리턴값'이라고 한다.
- 함수 선언(정의): 함수가 어떤 매개변수를 받아 어떤 동작을 하고 어떤 값을 변환할지 기술하는 것.
def func(mylist):
return sum(mylist)
number = [1,2,3]
print(func(number)) #출력: 6
14. 주석 (comment)
: 프로그램 실행에는 영향이 없으며, 코드에 설명을 붙이기 위해서 사용하는 것.
15. 연산자 (operator)
: 연산에 사용되는 표시나 기호.
- 연산자 우선순위: 파이썬의 연산자 우선순위는 알고 있는 것처럼 곱셈과 나눗셈이 덧셈과 뺄셈보다 우선하고, 우선순위가 같을 때는 왼쪽에서 오른쪽 순서로, 우선순위를 무시하고 무조건 먼저 연산하고 싶은 게 있다면 괄호로 감싸준다.
- 사칙 연산자, //연산자, 나머지 연산자, 제곱 연산자, 대입 연산자, 복합 대입 연산자
16. 리터럴 (literal)
: 소스 코드 내에서 직접 입력된 값.
자료(data)라고도 한다.

그것이 알고 싶다!
상수와 리터럴이란?
사실 리터럴은 상수와 같은 의미지만, 프로그램에서는 상수를 '값을 한 번 저장하면 변경할 수 없는 변수'로 정의하기 때문에 이와 구분하기 위해 '리터럴'이라는 용어를 사용한다.
02장 자료형
1. 자료형 (data type)
: 자료의 형태
자료형에 따라 컴퓨터가 처리하는 방법이 달라진다.
파이썬의 기본 자료형.
- 숫자: 소수점이 없는 정수형과 소수점이 있는 실수형으로 구분.
사칙 연산자(+,-,*,/)와 정수 나누기 연산자(//), 나머지 연산자(%), 제곱 연산자(**)사용
- 문자열: 문자의 나열, 큰따옴표 혹은 작은따옴표로 입력.
문자열 연결 연산자(+), 문자열 반복 연산자(*), 문자열 선택 연산자([]), 문자열 범위 선택 연산자([:])사용
- 불: TRUE와 FALSE를 나타내는 값. 반드시 첫 글자는 대문자.
2. 이스케이프 문자 (escape character)
\(백슬래시) 기호가 붙은 특수한 문자 리터럴. 문자열 내부에서 특수한 기능을 수행.
3. 인덱스 (Index)
: 리스트, 문자열과 같은 자료형에서 자료가 메모리에 저장된 순서대로 매겨진 번호, 리스트 내부에서 값의 위치를 의미.
- 제로 인덱스: 숫자를 0부터 세는 인덱스. 파이썬은 제로 인덱스 사용.
- 원 인덱스: 숫자를 1부터 세는 인덱스.
mylist = [1,2,3]
print(mylist[0]) # 출력: 1
4. 부동 소수점 (floating point)
: 소수점이 있는 실수 데이터를 저장하는 방식.
'부동'은 '떠다니다'의 의미, 소수점이 떠다닌다는 의미에서 부동 소수점이라고 함.
이 방식에서는 최상위 비트(MSB: Most Significant Bit)를 부호로 결정.
최상위 비트가 0이면 양수, 1이면 음수.
5. 캐스트 (cast)
: 어떤 자료형을 다른 자료형으로 바꾸는 것.
특히 input() 함수의 입력 자료형은 항상 문자열이기 때문에 입력받은 문자열을 숫자로 변환해야 숫자 연산에 활용 가능.
# input 값으로 들어오는 문자열 형태의 숫자를 정수형으로 변환
n = int(input())
03장 조건문
1. 조건문 (conditional statement)
: 조건에 따라 코드를 실행하거나 실행하지 않게 만들고 (실행 흐름을 바꾸고) 싶을 때 사용하는 구문.
실행 흐름을 바꾸는 것.
- if문: 괄호 내의 조건식이 참이면 블록 내의 문장을 실행
- else문: if문의 조건식이 거짓이면 블록 내의 문장을 실행. 필요 없으면 안 써도 됨.
- else if문: is문의 조건식이 거짓일 때 실행시킬 코드에 추가 조건을 걸고 싶은 경우에 사용.
마찬가지로 필요 없으면 else if를 사용하지 않아도 됨.
2. 들여쓰기 (indent)
: 코드 앞에 사용하는 '띄어쓰기 4번', '띄어쓰기 2번', '탭'과 같은 것을 의미.
파이썬 개발에서는 일반적으로 '띄어쓰기 4번'을 많이 사용.

그것이 알고 싶다!
소프트 탭이란?
Tab키를 누르면 자동으로 띄어쓰기 네 개를 넣어주는 기능
3. 비교 연산자 (comparison operators)
: 불을 만드는 연산자.
숫자의 크기 비교나 문자열을 비교.
4. 논리 연산자 (logical operators)
: 비교 연산자로 만들어진 불끼리 연산할 수 있는 연산자.
- not: 불을 반대로 전환. True는 False로, False는 True로.
- and: 피연산자 두 개가 모두 참일 때 True를 출력하며, 나머지의 경우는 모두 False를 출력.
- or: 피연산자 두 개 중에 하나만 참이라도 True를 출력하며, 두 개가 모두 거짓일 때만 False를 출력.
04장 반복문
1. 반복문 (loop statement)
: 조건문과 같이 프로그램의 진행을 바꿀 때 사용하는 것.
매우 많은 횟수 또는 무한하게 반복 작업을 하고 싶을 때 사용하는 문법.
- for문: 반복 횟수가 정해졌거나 변수가 이터러블한 경우에 주로 사용.
# 반복 횟수가 정해진 경우, range()함수 사용
- while문: 반복 횟수를 모르거나 무한 루프를 만들 때 주로 사용.
- break문: 반복문, 조건문 블럭을 빠져 나오게 하는 키워드.
- continue문: 반복문 내에서 continue문을 만나면 아래에 있는 코드를 실행하지 않고 위로 돌아가 반복문 조건을 검사한 후 반복을 할지 말지를 결정. 주로 조건문 안에 넣어 사용.
# 리스트와 for 반복문
for n in mylist:
print(n) # 리스트의 요소 출력
# 딕셔너리와 for 반복문
for key in mydict: # key는 딕셔너리의 키!
print(key)
for value in mydict.values(): # value는 딕셔너리의 값!
print(value)
for key, value in mydict.items():
print('key: {}'.format(key))
print('value: {}'.format(value))
# range()를 사용한 반복문
for i in range(5): # 5회 반복
print(i)
# 리스트, 범위, for 반복문 조합하기
for i in range(len(array)):
print("{}번째 반복: {}".format(i, array[i]))
# while 반복문
i = 0
while i < 10:
print("{}번째 반복입니다.".format(i))
i += 1

그것이 알고싶다!
리스트와 딕셔너리의 차이점이란?
리스트는 각 요소를 인덱스로 접근하는 반면, 딕셔너리는 인덱스 대신 키를 사용해 요소에 접근한다.
2. 이터러블 (iterable)
: 반복을 적용할 수 있는 성질.
내부에 있는 요소들을 차례차례 꺼낼 수 있는 객체.
- 문자열, 리스트, 딕셔너리, 범위(range()함수)
3. 비파괴적 함수 (non destructive function)
: 원본을 변화시키지 않는 함수
# 종류: str 자료형의 lower(), upper(), split() 등
4. 파괴적 함수 (destructive function)
: 원본을 변화시키는 함수
# 종류: list 자료형의 append(), remove(), pop() 등
5. 리스트 내포 (list comprehension)
: 반복문의 요소를 삽입할 때, 한 줄로 작성할 수 있도록 제공하는 문법.
# 리스트를 선언합니다.
array = [i*i for i in range(0,20,21)]
# 출력합니다.
print(array)
6. 전개 연산자 (spread operator)
: 리스트 요소를 나열해 주는 연산자. 리스트 앞에 * 기호를 사용한다.
05장 함수
1. 리턴 (return)
: 함수를 실행했던 위치로 돌아가게 하는 것.
리턴값을 가지는 함수는 반드시 리턴할 때 반환하는 값이 있어야 한다.
# 리턴값: 함수의 실행 결과값
- 조기 리턴: 함수 내의 필요한 위치에서 return 키워드를 사용하는 것.
2. 매개변수 (parameter)
: 함수를 호출할 때 필요한 데이터를 외부로부터 받기 위해 사용하는 것.
- 가변 매개변수: 매개변수를 원하는 만큼 받을 수 있는 함수.
- 기본 매개변수: 매개변수를 입력하지 않았을 경우 들어가는 기본값.

그것이 알고싶다!
전달인자(argument)와 매개변수(parameter)
int mySum(arr):
return sum(arr)
myVar = mySum(myArray)
arr: 매개변수
myArray: 전달인자
3. 키워드 매개변수 (keyword parameter)
: 매개변수의 이름을 입력하는 매개변수.
print('you are not alone!!', end='')
# end=' ' : 키워드 매개변수
4. 재귀 (recusion)
: 함수 내부에서 자기 자신을 호출하는 것.
5. 매모화 (memorize)
: 재귀 호출에서 한 번 연산한 값을 중복해서 연산하지 않기 위해 새로운 값을 연산할 때마다 그 결과에 따른 값을 저장하는 것.
6. 팩토리얼 (factorial)
: n!로 표현.
1부터 n까지의 숫자를 곱하는 연산.
7. 파보나치 수열 (fibonacci numbers)
: 첫 번째와 두 번째 항이 주어지며, 세 번째 항부터 앞의 두 항을 더한 값을 갖는 수열.
8. 트리 (tree)
: 비선형 자료 구조의 일종.
노드끼리 연결된 모습이 나무 모양의 구조인 데에서 이름이 유래.
- 노드: 트리의 각 항목
- 리프: 자식 노드가 없는 노드
- 부모 노드: 자신의 바로 위에 연결된 노드
- 자식 노드: 자신의 바로 아래에 연결된 노드
- 루트: 해당 트리의 최상위 노드
9. 스트림 (stream)
: 프로그램의 외부 파일, 외부 네트워크 등과 통신할 때 데이터가 흐르는 길.
이때 외부는 같은 컴퓨터 내부라도 프로그램의 바깥에 별도로 존재하는 것을 말한다.
10. 람다 (lambda)
: 간단한 함수를 쉽게 구현할 수 있는 기능.
11. 튜플 (tuple)
: 리스트와 비슷한 자료형이나 리스트와 다르게 한번 결정된 요소를 바꿀 수 없다.
# 괄호가 없는 튜플
tuple_test = 10, 20, 30, 40 #tuple_test 변수는 튜플 자료형!
# 튜플을 사용헌 할당
(a, b) = (10, 20)
a, b = 10, 20
12. 스택(stack)
: 기본 자료형이 자곡자곡 정리된 공간.
# 기본 자료형: 숫자, 문자열, 불
13. 힙 (heep)
: 객체 자료형이 저장되어 있는 공간.
# 객체 자료형: 숫자, 문자열, 불을 제외한 자료형
06장 예외 처리
1. 구문 오류 (syntax error)
: 프로그램 실행 전에 발생하는 오류.
구문 오류가 있으면 프로그램 자체가 실행이 되지 않는다.
2. 예외 (exception)
: 런타임 오류 (runtime error)
프로그램 실행 중에 발생하는 오류를 의미.
try-except 구문으로 처리 가능.
try:
number_input_a = int(input("정수 입력> "))
except:
# 정수로 변환 불가능한 자료가 입력될 경우 실행됩니다.
print("무언가 잘못되었습니다.")
3. 예외 처리 (exception handling)
: 예외가 발생하지 않게 미리 예외가 발생할 수 있는 부분에 안전 장치를 설치하는 것.
# 예외를 처리하는 방법
1) 조건문 사용: 조건문 등을 사용해 예외를 처리하는 기본적인 방법
2) try 구문 사용: 예외 처리에 특화된 구문
4. 예외 객체 (exception object)
: 예외가 발생했을 때 예외에 관련된 정보가 저장되는 객체.
07장 모듈
1. 유닉스 타임 (unix time)
: 세계 표준시(UTC)로 1970년 1월 1일 0시 0분 0초를 기준으로 몇 초가 지났는지를 정수로 나타낸 것.
2. 모듈 (module)
: 코드를 분리하고 공유할 수 있도록 만들어 주는 문법.
- 표준 모듈: 파이썬에 기본적으로 내장되어 있는 모듈.
- 외부 모듈: 다른 사람이 만들어서 공개한 모듈.
3. 패키지 관리 시스템 (Package Management System)
: 파이썬의 외부 모듈을 설치할 때 사용하는 프로그램.
pip(Python Package Index)를 일컬음.
4. 엔트리 포인트 (entry point)
: 메인(main)이라고도 하며, 프로그래밍 언어에서 프로그램의 진입점을 이르는 말.
5. URL (Uniform Resource Locator)
: 네트워크의 자원이 어디에 위치하는지 확인할 때 사용하는 것.
6. 인코딩 (encoding)
: 특정한 방식을 기반으로 어떤 형식을 다른 형식으로 대응시키는 것.

그것이 알고 싶다!
ASCII CODE란?
파이썬은 기본 인코딩 방식으로 아스키를 사용한다. 아스키(ASCII: American Standard Code for Information Interchange, 미국 정보 교환 표준 부호)는 7비트로 표현되는 영문자 기반 인코딩이며, 33개의 제어 문자들과 95개의 출력 가능한 문자들로 이루어져 있다.
7. 디코딩 (decoding)
: 인코딩된 데이터를 반대로 돌리는 것.
8. 라이브러리 (library)
: 개발자가 모듈의 함수를 실행하여 사용하는 것.
정상적인 제어를 하는 모듈.
9. 프레임워크 (framework)
: 모듈이 개발자의 함수를 실행하여 사용하는 것. (제어 역전이 발생하는 모듈)
10. 제어 역전 (IoC; Inversion of Control)
: 개발자가 모듈의 함수를 호출하는 것이 일반적인 제어 흐름인데, 이와 반대로 개발자가 만든 함수를 모듈이 실행하는 것.

그것이 알고 싶다!
라이브러리와 프레임워크를 구분하는 법
제어 역전이 발생하는 모듈이 프레임워크, 정상적인 제어를 하는 모듈이 라이브러리다. 즉, 흐름(flow)을 주도하는 쪽이 누구인가에 따라 라이브러리, 프레임워크로 구분한다.
11. 텍스트 데이터 (text data)
: 내부적으로 앞에서 언급한 이진수로 저장되지만, 우리가 쉽게 읽을 수 있는 텍스트로 변환될 수 있는 이진수 데이터.
12. 바이너리 데이터 (binary data)
: 텍스트 에디터로 열었을 때 의미를 이해할 수 없으며, 전용 에디터를 사용해서만 편집할 수 있는 데이터. (이미지, 동영상)
08장 클래스
1. 객체 지향 프로그래밍 (OOP; Object Oriented Programming)
: 프로그램을 개발하는 기법으로 부품에 해당하는 객체들을 먼저 만들고, 이것들을 하나씩 조립 및 연결해서 전체 프로그램을 완성하는 기법.
# 객체 지향 프로그래밍의 특징: 상속, 다형성, 캡슐화

그것이 알고 싶다!
캡슐화 (encapsulation)
캡슐화는 객체 지향 프로그래밍의 특징 중 하나로, 객체의 필드, 메소드 클래스 외부에서 실행할 수 없게 감추는 것을 말한다. 외부의 잘못된 사용으로 인해 객체가 손상되지 않도록 필드와 메소드를 캡슐화하여 보호하는 것이다.
2. 상속 (inheritance)
: 상위(부모) 객체를 기반으로 하위(자식) 객체를 생성하는 관계를 말한다.
상위 객체는 자기가 가지고 있는 변수와 함수를 하위 객체에게 물려주어 하위 객체가 사용할 수 있도록 한다.
- 부모(parent class, super class, 상위 클래스): 해당 클래스에 선언된 변수와 함수를 물려주는 클래스.
- 자식(child class, sub class, 하위 클래스): 다른 클래스로부터 물려받고자 하는 클래스.
게임 캐릭터를 만들 때, 캐릭터 이름과 같은 속성은 모든 캐릭터가 같지만 각각의 직업은 다르기 때문에 다른 스킬을 사용한다. 이 때 공통된 속성을 갖는 클래스를 상속받아 스킬만 다르게 구현할 수 있다.
3. 클래스 (class)
: 객체에 포함할 변수와 함수를 미리 정의한 것.
객체의 설계도에 해당.
4. 추상화 (abstaction)
: 프로그램에서 필요한 요소만을 사용해서 객체를 표현하는 것.
복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것을 의미.
5. 객체 (object)
: 여러 가지 속성을 가질 수 있는 대상.
6. 인스턴스 (instance)
: 클래스 기반으로 만들어진 객체.

그것이 알고싶다!
클래스, 객체, 인스턴스
속성을 가진 대상인 개게는 클래스를 이용하여 가공하기 쉬운 인스턴스로 구현할 수 있다. 클래스는 갹체가 가지는 기능을 메소드와 속성을 정의하고, 필요할 때마다 생성자 호출로 같은 기능과 속성을 가지는 인스턴스를 만들 수 있도록 한다. 때문에 흔히 객체와 인스턴스라는 용어는 혼용되어 사용된다. 인스턴스는 갹체를 프로그래밍으로 구현한 개념이기 때문이다.
7. 생성자 (constructor)
: 클래스 이름과 같은 함수.
클래스 내부에 __init__이라는 함수를 만들면 객체가 생성할 때 처리를 작성할 수 있다.
Class Student:
def __init__(self, name):
self.name = name
Student("윤인성") # name 속성에 "윤인성" 문자열을 저장
8. 소멸자 (destructor)
: 인스턴스가 소멸될 때 호출되는 함수.
9. 메소드 (method)
: 클래스가 가지고 있는 함수 (멤버 함수, 인스턴스 함수)
10. 프라이빗 변수 (private variable)
: 캡슐화를 위해 만들어진 문법.
파이썬은 클래스 내부의 변수가 외부에서 사용하는 것을 막고 싶을 때, 인스턴스 변수 이름을 __<변수 이름> 형태로 선언한다.

그것이 알고 싶다!
게터(getter)와 세터(setter)
외부에서 마음대로 읽고 변경할 수 없도록 제어하는 메소드, 만약 외부에서 필드값을 읽을 수만 있고 변경하지 못하도록 하려면(읽기 전용) getter 메소드만 선언하면 된다.
11. 가비지 컬렉터 (garbage collector)
: 더 이상 사용할 가능성이 없는 데이터를 메모리에서 제거하는 프로그램.
12. 오버라이드 (override)
: 부모에게서 상속받은 메소드를 자식 클래스에서 다시 정의하는 것.