반응형

개요

조건문은 조건에 따라서 코드블록을 실행할지 말지를 결정한다. 덕분에 조건문으로 실행되는 소스 코드의 실행 분기를 나눌 수 가 있다. 조건문의 문법 키워드는 if, elif, else 키워드로 구성 된다. if, elif 뒤에 조건식이 오고 해당 줄에서 마지막에 :(콜론)이 온다음에 코드 블록을 작성하면 된다. else 의 경우 조건식 없이 :(콜론)으로 끝난다.

코드블록

일종의 코드 덩어리 혹은 구간으로 본다. C 와 같은 오래된 프로그래밍 언어에서는 코드 스택이라고도 한다. 파이썬에서는 들여쓰기로 구분을 한다. 들여쓰기 칸수는 2칸을 쓰거나 4칸을 사용할 수 있다. 파이썬 재단에서는 4칸 들여쓰기로 코드 블록을 구분하는 것을 권장한다. 2칸 들여 쓰기는 주로 구글에서 사용하고 있다.

코드 블록 안에 또 다른 코드 블록을 만들 수 도 있다. 다만, 파이썬에서는 단독으로 코드 블록을 만들 수는 없다. 반면 다른 중괄호로 코드 블록을 구분하는 언어들은 독립적으로 코드 블록을 만들 수 있다.

원칙적으로 코드 블록내에 새로운 변수를 정의 할 경우 코드 실행 흐름상 해당 코드 블록을 벗어나면 메모리에서 해당 변수를 제거한다. 다만 편의상 몇가지 예외가 있는데, for 문의 경우 코드 블럭을 벗어나도 바로 제거하지 않는다.

문법

if 키워드는 첫 조건문이며, if 다음에 오는 조건식이 True 경우 해당 if 줄 다음의 코드 블럭을 실행한다. 이 때 뒤에 나오는 elif 나 else 에 해당되는 코드 블럭은 실행하지 않고 건너 뛰게 된다. 만약 False가 있다면 바로 다음에 있는 elif 조건식을 검사하고 True 인 경우 elif 에 해당되는 코드 블럭이 실행된다. elif 는 if와 달리 첫번째 조건문만 아니면 여러개를 이어서 작성하는 것이 가능하다. 그리고 나무지 조건의 의미로 else 는 조건식이 없이 앞의 if 나 elif 조건들이 전부 False 일때 해당 코드 블록을 실행하게 된다.

여기서 elif는 else if 를 합쳐서 만들어진 키워드로 유닉스 쉘 스크립트 문법과 유사하다.

a = 1
if a > 0:
	print("a는 0보다 크다")
elif a < 0:
	print("a는 0보다 작다")
else:
	print("a는 0과 같다")

# a는 0보다 크다
# 나머지 print 함수는 실행되지 안고 건너 뛴다

참고 C의 if문

참고로 작성한 소스코드다 위와 동일하게 동작하는 if 문을 C로 표현한 코드 블록이다. C 에서는 코드 블록을 중괄호로 표시하니 표현의 다른점을 확인하자. 그리고 코드 블록을 명시 하지 않을 경우 한줄만 자동으로 코드 블록으로 인식하기도 한다.

int a = 1;
if (a > 0)
{
	printf("a는 0보다 크다\n");
}
else if (a < 0)
	printf("a는 0 보다 작다\n");
else { printf("a는 0과 같다\n"); }

성능과 가독성 좋은 조건문

조건문으로 보통 실행하는 코드 실행 분기를 나눈다는 것은 조건에 따라 실행하는 코드 즉, 논리적 자동화를 구현하는 부분이 있다. 때문에 복잡한 프로그램을 만들 수 록 조건문은 복잡해질 수 밖에없다.

성능을 조금이라도 높이기 위해서는 확률적으로 True 가 자주되는 조건식을 첫번째 if 에 넣는 것이 좋다. 이는 if의 조건식 검사후 elif 조건식을 검사하는 식으로 순차적으로 조건식을 검사히기 때문에 조건식 검사 횟수가 줄기 때문이다. 하지만 if와 else 밖에 없는 조건문은 차이가 없다.

가독성을 높이는 방법으로는 특정 조건을 기준으로 작성하는 것이 그나마 덜 복잡해 보인다. 특히 이중 조건문을 사용할 경우 차이가 크다. 그리고 해당 조건문에 대해서 주석을 달아주는 것도 좋다.

간단한 규칙이지만, 실무에서 잘 모르는 주니어 개발자들이 의외로 꽤 있었다.

반응형

'Python > 배경이 있는 파이썬' 카테고리의 다른 글

불(bool)과 연산  (0) 2024.04.29
딕셔너리(dict)  (0) 2024.04.29
튜플(Tuple)  (1) 2024.04.27
리스트(list)  (0) 2024.04.27
문자열(str)  (1) 2024.04.27
반응형

개요

 파이썬의 Bool 타입(자료형)을 이해하기 위해서는 bool 타입의 탄생 배경을 아는 것이 중요하다. bool 타입은 현재 사용되고 있는 프로그래밍 언어 대부분이 갖고 있다. 정의는 True 와 False 두 가지 값밖만 가질 수 있다.

 bool 타입이 생기기 이전에는 int 라는 정수형 자료로 0일 경우 False 이외의 값을 갖는 경우 True와 같은 결과로 간주를 했었다. 하지만, 오랫동안 프로그래머들이 사용해본 결과 가독성이 나쁘다고 판단이 되어서 만들어지게 되었다. 예를 들어 C 에서는 함수가 제대로 동작하지 않았을 때, 음수 혹은 -1을 반환하는 등 오류 코드들은 음수를 일반적으로 사용했다. 그러나 조건문의 정의상 0 이외에는 True가 되기 때문에 분명 오류로 자주 사용하는 -1 은 True로 판단이 되는 등 논리적으로 혼란을 주기 때문에 조건문과 같은 대응 용으로 bool 을 사용하도록 한 것이다.

이 때문에 논리 연산과 비교 연산을 하게 될 경우 항상 그결과는 bool 타입으로 반환하게 된다. 이 때문에 bool 타입과 논리 연산자, 비교 연산자를 함께 공부하는 것이 좋다고 생각한다.

여담으로 필자 기억으로는 초기 C++에서 bool 타입이 추가 되었을때 이에 대해서 불만을 제기하는 몇몇 개발자의 푸념의 글도 본적이 있었다. 아직 성능이 중요한 시절이었기 때문에 자신은 익숙한데 굳이 bool 타입을 사용해야 하다보니 번거롭다는 내용이었다.

논리 연산자

논리 연산은 수학에서 정의된 논리 연산들이 있다. 오늘날 컴퓨터가 있게 되는 기본이 되는 연산이 된다. 오늘날 반도체로 컴퓨터를 만들 수 있게 된 이유가 바로 논리 연산이 가능하기 때문이다.

일반적으로 논리연산은 사칙연산보다 늦게 연산이 된다. 하지만 가독성을 위해서 복잡한 논리 연산을 하게 될 경우 괄호를 사용하여 명시하는 것을 권장한다.

and

연산 기호가 키워드 and로 좌우에 있는 값이 True 가 되어야 True를 반환한다.

True and True
# True

True and False
# False

False and True
# False

False and False
# False

or

연산기호가 키워드 or 로 좌우에 있는 값 중 하나라도 True 가 있으면 True를 반환한다.

True or True
# True

True or False
# True

False or True
# True

False or False
# False

not

연산기호가 키워드 not 으로 키워드 뒤에 있는 값을 반전을 한다. True 인 경우 False, False 인 경우 True를 반환한다.

not True
# False

not False
# True

비교 연산자

일반적으로 비교 연산자의 좌우에는 수치 연산이 가능한 숫자 형태의 값 혹은 숫자 값인 변수가 있어야 한다.

>

직관적으로 연산자의 왼쪽이 오른쪽 보다 클 경우 True를 반환한다.

2 > 1
# True

1 > 1
# False

1 > 2
# False

>=

연산자의 왼쪽이 오른쪽 값 보다 크거나 같은 경우 True를 반환한다. 그 외는 False 를 반환한다.

2 >= 1
# True

1 >= 1
# True

1 >= 2
# False

<

연산자의 왼쪽 값이 오른쪽 값보다 작을 경우 True를 반환한다. 그 외는 False 를 반환한다.

2 < 1
# True

1 < 1
# False

1 < 2
# True

<=

연산의 왼쪽 값이 오른쪽 값 보다 작거나 같을 경우 True를 반환한다. 그 외는 False 를 반환한다.

2 <= 1
# False

1 <= 1
# True

1 <= 2
# True

==

연산자의 왼쪽 값과 오른쪽 값이 같아야 할 경우 True를 반환한다. 해당 연산자는 독특하게 python 고유 기능으로 문자열(str)에도 사용이 가능하다.

2 == 1
# False

1 == 1
# True

1 == 2
# False

"abc" == "ab"
# False

"abc" == "abc"
# True

!=

연산자의 왼쪽 값과 오른쪽 값이 다를 경우에만 True를 반환한다. 같은 경우 False를 반환한다.

is

== 연산자와 비슷하지만 다르다. is는 좌우에 오는 것이 동일한지(메모리에 할당된 주소가 같은지) 확인을 한다. 때문에 연산은 이론적으로 == 연산보다 약간 빠르다. 값의 다향성이 적어 사실상 상수에 해당되는 True, False, None과 비교 할 때 많이 사용한다. 즉 이말은 == 연산에서 True 이나 is 연산에서는 False 경우가 존재하다는 의미이다.

is 연산자는 어느 정도 파이썬으로 개발 경험이 있는 초보 개발자도 잘 모르고 지나가는 경우가 많다.

a = "hello"
# b는 a와 같은 값이 연결되어 있음
b = a
a is b
# True

# 메모리 주소 확인 해볼 것
id(a)
id(b)

b = a[:4] + "o"
# b는 a와 같은 값이지만 서로 다른 곳에 할당되어 있음
a is b
# False

# 메모리 주소 확인해 볼 것
id(a)
id(b)

 

반응형

'Python > 배경이 있는 파이썬' 카테고리의 다른 글

코드 블록, 조건문(if)  (1) 2024.05.01
딕셔너리(dict)  (0) 2024.04.29
튜플(Tuple)  (1) 2024.04.27
리스트(list)  (0) 2024.04.27
문자열(str)  (1) 2024.04.27
반응형

개요

딕셔너리(Dictionary)는 줄여서 dict 으로도 표현된다. 키(Key)와 값(Value)로 저장된다. 값의 경우 변수처럼 어떤 자료형이라도 담을 수 있다. 단, 키를 기준으로 중복을 허용하지 않는다.

 이름에서 추측되는 것과 같이 영어사전이나 국어사전에서 어떤 단어의 뜻을 찾을 때 단어 혹은 키워드를 기준으로 먼저 찾고 거기에 해당되는 정보를 보는 것처럼 딕셔너리 자료형도 키워드를 키로 사용하여 해당되는 값을 찾을 수 있는 구조이다.

이런 딕셔너리 자료형은 많은 정보를 사전에 만든다음에 키워드로 찾는 것처럼 검색하는 것에 특화 되어 있다. 그리고 실제로 검색도 빠른 편이다.

 리스트 같은 순차적으로 저장되어 있는 경우 순서대로 정보를 확인하면서 검색을 해야하지만, 딕셔너리는 이미 검색할 키워드와 해당 값이 구분 되어 있기에 검색에서 유리하다. 대신 딕셔너리 자료형을 메모리에 생성할 때(저장 할 때)는 느린 편이다.

다른 언어인 C, C++ 같은 프로그래밍 언에어서는 파이썬의 딕셔너리 자료형과 유사한 것으로 해쉬 테이블(hash table), 해쉬 맵(hash map)이 있다.

정의

중괄호를 열고 닫음으로 정의 할 수 있다. 키 값은 항상 문자열(str)로 정의 되어야 한다.

a = { "name": "홍길동", 'dob': 1990 }
a
# { "name": "홍길동", "dob": 1990 }

b = {}
b
# {}

읽기

딕셔너리가 정의 되어 있는 변수에 대괄호를 붙여서 대괄호 안에 문자열로 키 값을 적으면 해당 값이 있는 경우 값을 불러오고 값이 없는 경우 에러가 발생한다.

c = {"name": "홍길동", "dob": 1990 }
c["name"]
# "홍길동"

c['name']
# "홍길동"

tmp = "name"
c[tmp]
# "홍길동"

c["address"]
# error:

수정 및 추가

읽는 경우와 비슷하나 조금 다르다. 대입 연산의 왼쪽에 딕셔너리 변수가 있으면 오른쪽의 값이 대입된다. 이 때 해당 키와 값이 없는 경우 새로 추가된다.

d = {"name": "마동석", "dob": 1988 }
d["name"] = "마동탁"
d
# {"name": "마동탁", "dob": 1988 }

d["address"] = "성남"
d
# {"address": "성남", "name": "마동탁", "dob": 1988 }

d[0]
# Error

요소 삭제

한쌍의 키와 값을 삭제할 수 있다. 삭제시 키를 중심으로 삭제된다.

 

d = {"name": "마동석", "dob": 1988, "address": "성남" }
del d["address"]
d
# {"name": "마동석", "dob": 1988 }

key in dict

딕셔너리 자료형에서 키가 포함되어 있는지 확인할 수 있다. 해당 키가 포함되어 있다면 True 포합되지 않았다면 False를 반환한다.

d = {"name": "마동석", "dob": 1988, "address": "성남" }
"name" in d
# True

"phone" in d
# False

주의할점

딕셔너리는 하위 단계(level)에 같은 이름의 키와 값을 정의 할 수 있다. 그러나 같은 단계(Level)에서 키가 중복으로 정의 할 수 없다. 만약 시도할 경우 덮어 써진다.

d = { "name" : "홍길동", "출신": {"출신": "서울"} }
# Error 아님

e = { "name" : "홍길동", "출신": "서울", "출신": "부산" }
# 마지막 꺼로 덮어 써짐

파이썬의 딕셔너리는 키가 문자열이면 대부분 사용이 가능하다. 심지어 공백문자(White space: 띄어쓰기나 줄바꿈)를 키로 사용이 가능하다. 그러나 가능하면 공백문자를 사용하지 않을 것을 권장한다. 이는 다른 프로그래밍 언어간 호환성을 위해서 이다.

a = {" ": "hello"}
a
# {" ": "hello"}

a[" "]
# "hello"
반응형

'Python > 배경이 있는 파이썬' 카테고리의 다른 글

코드 블록, 조건문(if)  (1) 2024.05.01
불(bool)과 연산  (0) 2024.04.29
튜플(Tuple)  (1) 2024.04.27
리스트(list)  (0) 2024.04.27
문자열(str)  (1) 2024.04.27
반응형

개요

튜플은 파이썬에서 사용하는 독특한 자료형 중 하나다. 리스트와 유사하지만 다르다. 그리고 튜플의 존재로 직관적인 코딩이 가능해지는 것도 있다.

튜플도 리스트처럼 복수의 자료형이나 값을 담기 위해 만들어 졌다. 그리고 튜플은 여러개의 값이 하나의 변수에 넣게 되는 경우 자동으로 만들어지는 자료형이다. 또는 해당 자료형을 활용해서 범용 함수나 클래스를 만드는 것이 가능해진다.

 리스트와 가장 큰 차이점은 튜플 자체 자료형 내부 값을 수정(삭제 포함) 할 수 없다. 이 의미는 튜플 자료형을 한번 쓰면 메모리에 영원히 남아 있다는 의미는 아니다.

정의

튜플의 자료형은 소괄호로 정의할 수 있다. 다만, 한개의 원소일 경우에만 특이하게 쉼표로 구분해줘야 한다.

a = ()
b = (1,)
c = (1, 2)
d = 1, 2
e = (1, '2', (3, '4'))

연산자

인덱싱[int]

리스트와 동일하게 원소들의 순서를 구분하며 대괄호로 그 순서를 지정하여 읽을 수 있다.

#    0  1  2  3
a = (1, 2, 3, 4)
a[1]
# 2

슬라이싱

역시 리스트와 동일하게 범위를 지정하여 반환한다. 슬라이싱이라는 단어 때문에 혼란이 있을 수 있는데, 원본 변수에 다시 대입하지 않은 이상 원본은 보존 된다.

#    0  1  2  3
a = (1, 2, 3, 4)
b = a[:2]
b
# (1, 2, 3)

len()

리스트와 동일하게 사용이 가능하다.

#    0  1  2  3
a = (1, 2, 3, 4)
len(a)
# 4

 

반응형

'Python > 배경이 있는 파이썬' 카테고리의 다른 글

불(bool)과 연산  (0) 2024.04.29
딕셔너리(dict)  (0) 2024.04.29
리스트(list)  (0) 2024.04.27
문자열(str)  (1) 2024.04.27
문자 code  (0) 2024.04.24
반응형

개요

리스트는 프로그래머들의 경험이 잘 녹아있는 자료형이다. 오래된 프로그래밍 언어인 C++ 에서는 vector<> 라는 자료형과 같으며, 그외에는 동일한 list 라는 자료형을 사용하고 있다.

리스트형은 내부에 같은 리스트를 포함한 자료형들 즉 데이터를 담을 수 있다. 이렇게 담는 의미가 강한 자료형을 container 자료형으로 불리기도 한다. 그리고 리스트내에 담긴 데이터를 원소라고 부른다.

또한 리스트는 순서가 있는 자료형이다. 이러한 순서(혹은 순번)을 index라고 표현하며, 첫 원소의 index는 0이다.

list 의 index가 0부터 시작하는 이유

현재 대부분의 프로그래밍 언어의 문법들은 C 에서 많은 영향을 받았다. 이 때 C 에서는 list와 같은 연속적인 데이터를 저장하기 위해서 array 자료형을 제공하였다. 이 array는 연속적인 데이터가 시작되는 메모리의 위치를 의미했다.

그리고 array의 작동원리는 메모리의 특정 시작지점으로 부터 얼만큼(방향은 부호) 떨어진 곳을 읽느냐는 의미로 설계 되어있다보니 자연스럽게 메모리에서 시작지점에 저장된 데이터를 읽으려면 0 부터 시작하게 되었다.

그리고 기존의 많은 프로그래머들은 이 방식이 익숙해졌다. 결국 대부분의 연속형 자료형의 인덱스는 0 부터 시작하도록 만들어지고 사용되고 있다.

정의

리스트는 대괄호로 정의할 수 있다. 리스트에 원소(혹은 요소)로 담기는 자료형은 제약이 없다. 심지어 리스트도 담길 수 있다.(그러나 좋은 코드는 규칙성이 있게 담거나 특정 자료형을 모아서 담는 것이 좋다.)

a = []
a
# []

b = [1, 2, 3]
b
# [1, 2, 3]

c = ["1", "hello", 'world']
c
# ["1", "hello", "world"]

d = [1, 'hello', b]
d
# [1, "hello", [1, 2, 3]]

연산

리스트간 연산이 가능하다. 다만 자세히 관찰하면 문자열의 연산과 유사점이 있다.

list + list

두 개의 리스트 덧셈을 할 경우 연산자의 좌측 리스트에 이어서 연사자의 우측 리스트가 연결이 된 리스트를 반환한다. 문자열의 덧셈 연산과 유사하다. 다만, 문자열의 덧셈과 차이점은 문자열의 경우 동일한 문자열 자료형만 덧셈이 가능하다. 반면 리스트는 어떤 원소가 있어도 상관이 없다.

a = [1, 2]
b = [3, 4]
c = a + b
c
# [1, 2, 3, 4]

list += list

할당 연산자와 동일하게 동작한다. 연산자 좌측 리스트와 우측 리스트의 덧셈 연산을 한 결과를 좌측 리스트 변수에 대입하게 된다.

a = [1, 2]
b = [3, 4]
a += b
a
[1, 2, 3, 4]

list * int

앞의 list를 뒤에 있는 정수 만큼 더한 것과 같다. 문자열의 곱연산과 같다.

a = [1, 2]
b = a * 3
b
# [1, 2, 1, 2, 1, 2]

인덱싱[int]

리스트는 순서 즉 index가 있기때문에 처음 원소를 0번으로 정의하고 이후부터는 순서대로 번호를 붙일 수 있다. 이러한 번호로 읽거나 수정이 가능하다. 이런 대괄호 기호를 인덱싱 연산자라 부른다.

주의할 점은 인덱싱 연산자 내에 들어가는 숫자는 반드시 정수가 되야 한다. 그리고 인덱싱 연산자내에 범위를 벗어나는 index가 들어간 경우 에러가 발생한다.

# IDLE Shell
#    0  1  2  3
a = [1, 3, 5, 7]
a[0]
# 1

a[2]
# 5

a[2] = 0
a[2]
# 0

a[4] = 1
# Error: indexError

a[1.1]
# Error

파이썬의 독특한 점은 인덱싱에 음수를 사용할 수 있다. 인덱스에 -1 이 들어갈 경우 리스트의 가장 마지막 원소를 반환한다. 그리고 음수에서 작아질 수록(숫자가 커질 수록) 역순으로 반환하게 된다.

# IDLE Shell
#     0        1        2
a = ["hello", "world", "??"]
a[-1]
# "??"

a[-2]
# "world"

리스트 속에 있는 리스트에 접근할 경우 가장 좌측 인덱스가 가장 바깥부터 접근을 한다.

# IDLE Shell
#     0        1        2
a = ["hello", "world", "??"]
a[-1]
# "??"

a[-2]
# "world"

위의 예시의 경우 리스트 문법의 동작 원리를 설명하기 위한 것으로 실무에서는 이러한 복합적인 구조를 거의 사용하지 않는다. 완전한 2차원 리스트 혹은 완전한 3차원 형태로 사용하는 경우는 있다. 이는 프로그래밍을 할때 최대한 단순한 구조로 하는 것이 유지 보수에 유리하기 때문이다.

슬라이싱

리스트의 특정 구간을 자를 수 있다. 범위를 지정할 때는 기호 콜론(:)을 사용한다. 만약 처음이나 끝을 의미할 경우 해당 인덱스 값을 굳이 안넣어도 된다. 직관적으로 1:3은 마치 1~3 과 같은 의미가 된다.

# IDLE Shell
#    0  1  2  3  4
a = [1, 3, 5, 7, 9]

b = a[1:3]
b
# [3, 4, 7]

c = a[:3]
c
# [1, 3, 5, 7]

d = a[2:]
d
# [5, 7, 9]

대입

리스트의 대입 연산은 일반적인 숫자 대입과 다르다. 일반적인 숫자를 대입할 경우에는 값이 복사되어 변수에 담긴다. 이렇나 자료들은 immutable이라 한다. 하지만 리스트와 같은 자료형은 mutable로 구분되어 대입연산으로 다른 변수에 대입을 해도 값을 복제하지 않고 값을 공유한다.

만약 C를 공부한적이 있다면, mutable은 얕은 복사, immutable은 깊은 복사와 거의 같은 개념이다. immutable과 mutable 자료형에 대해서는 클래스 이후에 다시 살펴 보도록 하자.

# immutable
va = 1
vb = va
va = 3
va
# 3
vb
# 1

# mutable
la = [1, 2, 3]
lb = la
la[1] = 4
lb
# [1, 4, 3]

# 아래의 경우 la에 새로운 리스트가 할당되고
# lb는 기존의 리스트가 유지 된다
la = [4, 5, 6]
lb
# [1, 4, 3]

언박싱(unboxing)

파이썬의 독특한 문법으로 복수의 변수에 리스트를 대입 연산을 시도할 경우 변수명의 개수와 리스트의 원소 개수가 같은 경우 각각의 원소가 순서대로 변수에 들어가게 된다. 이때 리스트 자료형이 풀어지는 것과 같다(그래서 언박싱이라 이름을 지은 듯하다).

a = [1, 2, 3]
b, c, d = a
b
# 1

c
# 2

d
# 3

element in list

리스트 내에 동일한 원소가 있을 경우 True, 없을 경우 False를 반환한다.

a = [1, 2, 3, 4]
1 in a
# True

0 in a
# False

함수

len()

리스트의 길이를 반환해준다. 리스트의 길이는 리스트에 들어 잇는 원소의 개수이다. 리스트와 유사한 문자열에서도 사용된다.

a = [1, 2, 3, 4]
len(a)
# 4

len([1, 2, 3, 4, 5])
# 5

del

리스트에 있는 원소를 삭제해준다. 인덱싱과 슬라이싱을 응용하여 사용이 가능하다. 주의해야 할 점은 index로 삭제할 경우 기존 index가 삭제되면서 index가 바뀌게 되는 점이다. index가 바뀌면서 발생하는 문제를 피하기위해서 역순으로 삭제하는 요령이 있다.

#    0  1  2  3  4
a = [1, 2, 3, 4, 5]
del a[1]
a
# [1, 3, 4, 5]

del a[2:]
a
# [1, 3]

 

반응형

'Python > 배경이 있는 파이썬' 카테고리의 다른 글

딕셔너리(dict)  (0) 2024.04.29
튜플(Tuple)  (1) 2024.04.27
문자열(str)  (1) 2024.04.27
문자 code  (0) 2024.04.24
숫자형(int, float)  (0) 2024.04.24
반응형

개요

 문자열은 최소한 문자 한개 이상이 보여 있는 것을 의미한다. 물론 프로그래밍 언어에서는 열(array)형태의 자료형 안에 한 글자라도 들어 있어도 문자열로 취급한다. 문장의 개념과 혼동이 가능하겠으나 문장의 단위는 인간의 언어에서 구분하는 기준이고, 문자열은 여러 문장도 담을 수 있기 때문에 좀 더 다른 개념으로 이해하는 것이 좋다.

 컴퓨터를 사용한 이후 오랜 시간 동안 프로그래머들은 경험상 문자 기준으로 글자를 다루는 것 보다 문자열 단위로 다루는 것이 편리 하다는 것을 알게 되었다. 이러한 흔적으로 C 같은 오래된 언어에는 문자열을 다루는 기본 자료형이 없다. 문자열은 기본적으로 순서가 있는 문자들을 다루기 때문에 파이썬의 리스트 자료형과 비슷한 특징을 가지고 있다.

(해당 예제들은 IDLE Shell 혹은 python shell 에서 실행하는 것이 편하다)

문자열 정의

 문자열을 정의 하는 방법은 쌍따옴표로 시작해서 쌍따옴표로 끝나거나 따옴표로 시작해서 따옴표로 끝나면 된다. 쌍따옴표로 시작한 문자열 내에서의 따옴표는 단순한 문자 기호로 인식이 되며, 반대로 따옴표로 시작한 문자열 내에서 쌍따옴표는 문자 기호로 인식된다.

 만약 쌍따옴표 내에서 쌍따옴표를 문자 기호로 인식을 시키기 위해서는 앞에 역 슬래스(혹은 한국원화 기호)를 해주면 된다. 이는 쌍따옴표로 시작한 문자열 중간에 쌍따옴표를 그냥 넣게 되면, 앞에서 정의한 문자열 문법에 의해서 해당 위치까지 문자열이 끝나는 것으로 인식 되기 때문이다.

"min: hello"
'han: hello'
# 둘다 동일한 문자열

"min: 'hello'"
# 따옴표는 문자 기호로 인식됨

'han: "hello"'
# 쌍따옴표는 문자 기호로 인식됨

"min: \"hello\""
# 문자열 내에서 \기호 뒤에 있는 따옴표는 문자 기호로 인식됨

역슬래시 특수문자

 문자열 내에서 특정한 기호를 사용하기 위해서는 역슬러시를 사용하여 표현할 수 있다. 앞의 쌍따옴표나 따옴표의 경우 상황에 따라서 특수문자로 사용된 경우이다.

 즉, 줄바꿈, 탭, 앞줄 부터 시작을 표시하는 특수기호가 존재한다. 이러한 특수 문자를 표현할 경우 '\'(역슬러시)를 사용하여 표현한다. 이러한 표기법은 오래전부터 사용되었기 때문에 다른 프로그래밍 언어에서도 비슷하게 사용된다.

string 표기 이름 의미
\n 개행문자(Line Feed) 한줄 아래로 이동
\t 탭(tab) 탭키를 누른 것 만큼 이동
(일반적인 탭은 7, 8칸을 뛴 것과 같다)
\r 개행문자
(Carriage Return)
커서(글자를 쓰는 칸)를 현재 줄 앞으로 이동(윈도우즈 내부에서 사용함)
\' 작은 따옴표 작은 따옴표 표기
\" 큰 따옴표 혹은 쌍따옴표 큰 따옴표 표기
\\ 역 슬러시 역슬러시 표기

 여담으로 윈도우즈에서는 파일 경로를 표기하기 위한 구분자로 역슬러시를 사용하다 보니 해당 경로를 문자열로 받게 될 경우 역 슬래시가 2번 표기되는 것을 볼 수 있다. 하지만, 실제로 print() 로 화면에 출력하거나 파일로 저장할 경우에는 하나만 보이게 된다.

Formatter

 초기 프로그램들이 사람과 소통하는 가장 간단한 방법은 문자열을 화면에 보여주는 것이다. 특히 세금 계산서나 은행에서 사용하는 공문서들은 형식(Format)이 정해진 경우가 많다. 이처럼 형태가 정해진 문자열을 다룰 경우 많이 사용되는 방식이다.

 기본적으로 포맷 형식에는 샘플이 되는 문장이 있고 이를 어떻게 처리하느냐는 이후 문법 방식에 따라서 다르다.

%

 파이썬에서 가장 초기에 사용되던 방식이다. C 의 printf() 함수의 방식과 비슷하여 printf 방식 포멧팅이라고도 한다. python 2 에서 주로 사용된 방식으로 오래된 소스코드를 보면 쉽게 볼 수 있다. 샘플이 되는 문장에 변형이 가능한 자리에는 %d, %f, %s 와 같은 미리 정의 되어 있는 특수문자를 넣고 해당되는 값에 순서대로 넣는 것이 가능하다.

a = "%s님의 잔액은 %d원 입니다.\n이자율 %f\%" % ("오리", 101, 3.3)
print(a)
# 오리님의 잔액은 101원 입니다
# 이자율 3.300000100%

실수인 숫자의 경우 자리수를 제한 해야하는 경우에는 자리수에 해당하는 값도 추가 해줘야 한다.

a = "%s님의 잔액은 %d원 입니다.\n이자율 %.2f\%" % ("오리", 101, 3.3)
print(a)
# 오리님의 잔액은 101원 입니다
# 이자율 3.30%

format()

 권장하는 방식 중 하나이다. str 형에는 내부에 format() 함수가 들어 있어 해당 함수를 호출하여 문자열 내에 들어간 변수를 넣어주면 된다. 순서를 명시해 줄 수 도 있고 안해 줄 수도 있다.

 가장 많은 고민이 들어간 문법이기 때문에 공식 문서에서 내용이 방대한 편이다.

a = "{}님의 잔액은 {}원 입니다.\n이자율 {}%".format("오리", 101, 3.3)
print(a)
# 오리님의 잔액은 101원 입니다
# 이자율 3.30000001%
b = "{1}님의 잔액은 {0}원 입니다.\n이자율 {2}%"
b = b.format(101, "오리", 3.3)
print(b)
# 오리님의 잔액은 101원 입니다
# 이자율 3.3%

f-string

 python 3.6 부터 지원한 방식이다. 직관적인 편이기 때문에 권장하고 있다. 문자열의 시작전 f로 시작하여 중괄호 안에 변수가 되는 값 혹은 수식을 직접 삽입할 수 있다.

a1 = "오리"
a2 = 101
a3 = 3.3
a = f"{a1}님의 잔액은 {a2}원 입니다.\n이자율 {a3}%"
print(a)
# 오리님의 잔액은 101원 입니다
# 이자율 3.30000001%

 포멧이 되는 표현식(expression)의 경우 키워드가 아닌 중괄호를 표현하고 싶은 경우 중복해서 사용하면 기호로 인식된다.

이렇게 포멧 문자를 간단히 확인했는데, 자신이 초급 이상으로 좀 더 자세한 것을 알기 위해서는 공식문서를 확인해보면 된다.

문자열과 연산

문자열을 편의상 string 혹은 str로 표현을 한다.

str + str

 문자열과 문자열을 더 할 수 있다. 이 경우 두 문자열이 합쳐진 하나의 문자열이 된다.

a = "ba"
b = "poo"

c = a + b
# c == "bapoo"

str += str

 연산자의 좌측 문자열과 우측 문자열을 합친다음에 왼쪽 변수에 대입을 한다.

a = "hello"
b = "world"
a += b
a
# "helloworld"

str * int

문자열에 숫자를 곱한 경우 해당 문자열을 반복해서 더한다.

a = "-" * 8
a
# "--------"

str *= int

연산자의 좌측 문자에 우측 숫자만큼 반복한 문자열로 대입한다.

a = "-"
a *= 8
a
# --------

 

문자열 함수

문자열에 사용이 가능한 내장형 함수이다. 함수에 대한 설명은 이후 함수 항목에서 설명한다.

str()

숫자 타임의 int, float ㅎ여태로 자료형을 문자열로 변환 해준다.

a = 10
b = str(a)
b
# "10"

len()

문자열이 들어 잇는 문자열의 길이를 반환한다. 공백이나 줄 바꿈 문자도 하나의 문자로 인식한다. 문자열 뿐만 아니라 길이가 있는 list 형에서도 사용이 가능하다. 다만, list 자료형에 대해서는 나중에 다룬다.

a = "hello"
len(a)
# 5

b = "안녕"
len(b)
# 2

주의할 점

문자의 경우 이전에 공부한 문자 code 에 의해서 문자 종류에 따라서 한 문자를 저장하는 바이트 크기가 다르다. 즉, 문자열이 차지는 하는 메모리 용량과 문자의 길이는 다른 개념임을 인지해야 한다. 그리고 임베디드 같은 저수준 프로그래밍 하는 환경에서는 적은 메모리를 사용해야 하는 경우가 있기 때문에 이에 대해서도 주의 해야 한다. Python 에서 문자열이 차지하는 바이트 크기를 알기 위해서는 문자열을 bytes로 형변환을 하여 len() 함수를 사용하면 된다.

 

반응형

'Python > 배경이 있는 파이썬' 카테고리의 다른 글

튜플(Tuple)  (1) 2024.04.27
리스트(list)  (0) 2024.04.27
문자 code  (0) 2024.04.24
숫자형(int, float)  (0) 2024.04.24
변수(variable)와 상수(constant)  (0) 2024.04.23
반응형

개요

 어떠한 값에 대해서 약속한 값을 코드라고 표현 한다. 컴퓨터에서 문자 즉, 글자를 표현 할 경우 실제로 글자를 그리는 것이 아니라 이미 각 문자에 대한 그림 즉, 폰트에 해당하는 코드 값을 이미 약속해서 컴퓨터에 저장해 놓고 문장은 숫자 코드들을 보내서 대응 되는 문자를 표시하는 방식으로 동작한다.

이는 모르스 부호 같은 초기 신호 체계에서도 2가지 신호(연결됨과 끊어짐)를 가지고 알파벳으로 치환하여 메시지를 보내는 것과도 같다.

 영어에 익숙하다면, 코드로 축약하는 것을 인코딩 코드를 문자 등으로 해석하는 것을 디코딩의 의미와도 동일하다.

 문자열을 언급하기 전에 문자 코드에 대해서 언급하는 이유는 파이썬과 같은 고도화 된 프로그래밍 언어를 처음 접한 입문자들은 종종 글자를 그대로 사용되는 것으로 생각하는 사람이 있기 때문에 이러한 문자 code 에 대해서 다루게 되었다.

역사

초기 코드

전자 기기로 구성된 컴퓨터의 상용화는 미국에서 먼저 진행 되었다. 때문에 미국 기업(IBM) 입자에서 글자를 표현하기 위해 코드를 구성했을 때 7개의 bit(비트)로 구성이 가능했다. 이는 특수기호까지 포함한 코드였다.

ASCII 코드

컴퓨터와 각종 통신장비의 제작으로 각 제조사별로 코드를 만드는 것보다는 표준을 정의하여 사용하게 되었다. 이를 America Standard Code for Information Interchange(미국 정보 교환 표준 부호)로 각 글자머리를 따서 ASCII가 되었다. 이 ASCII는 7 bits로 구성이 되어 있다.

Byte의 탄생

 사실상 초기 문자 하나를 표현할 수 있는 단위로 비트와 구분하기 위해 사용되었다. 용어의 최초의 사용은 1956년 IBM에서 설계과정에서 표기한 것이 오늘날 정착 되었다고 한다.

오늘날은 1 Bytes 는 8 bits로 정착이 되었지만, 초기에는 7 bits, 8bits 등 여러개의 bit를 묶어서 혼용하여 사용하였다. 하지만 오늘날에도 종종 저수준 기기 제어시 신호가 7 bit로 된 회로를 볼 수 있다.

 정보 통신 분야에서는 bytes의 이러한 모호성을 배제하기 위해 정확하게 8 bits를 의미하는 옥텟(octet)이라는 단위를 사용한다.

UNICODE

컴퓨터의 사용이 전세계로 확산됨에 따라서 전세계의 모든 문자와 기호를 표현하기 위한 표준 작업이 진행이 되었고 이를 표현한 것이 UNICODE라 한다. UNICODE 포멧으로 UTF-8, UTF-16, UTF-32 등이 있다. 이중 현재 널리 사용되고 있는 것은 가변형인 UTF-8 이다.

UTF-8이 널리 사용되기 이전에는 각 회사별로 독자적인 국가 언어 코드를 만들어서 사용했었다. 예를 들어 일본어로 발매된 Windows 용 소프트웨어의 경우 따로 한글화를 지원하지 않는다면, 한글 Windows에서 사용할 수 없다.

유니코드가 정착화 되기 이전의 경우 영문으로 발매된 게임 소프트웨어를 동아시아 계열의 한자나 한글로 번역하는 것이 결코 쉽지 않음을 예상할 수 있다. MS사의 Windows 10 이전의 경우 국가별로 독자적인 방식으로 2 bytes로 영어와 혼용을 표기하였기 때문에 해당 운영체제 내에서 응용프로그램을 개발을 할 경우 다른 나라 언어로 번역을 지원할 때 지금보다 더 많은 어려움이 따랐었다. 과거(Windows 10 이전)에 윈도우즈에서 프로그래밍을 하신분은 EUC-KR 이라는 포멧을 들어 본적이 있을 것이다.

UTF-8

 인터넷 브라우저 등 가장 널리 사용되고 있는 가변형 유니코드이다. ASCII 코드에서는 7 bits만 사용하기 때문에 사용하지 않는 비트를 사용해서 하나의 문자를 인식하는 크기를 가변으로 지정한다. 아래와 같은 방식을 통해서 최대 4 bytes를 한문자로 인식을 하기로 규약되어 있다.

[0][x][x][x] [x][x][x][x] --> 아스키 코드

[1][1][0][x] [x][x][x][x], [1][0][x][x] [x][x][x][x] --> 2 bytes

[1][1][1][0] [x][x][x][x], [1][0][x][x] [x][x][x][x], [1][0][x][x] [x][x][x][x] --> 3 bytes

[1][1][1][1] [0][z][z][z], [1][0][z][z] [x][x][x][x], [1][0][x][x] [x][x][x][x], [1][0][x][x] [x][x][x][x] --> 4 bytes

4 bytes 에서 z로 표현된 영역은 서로게이트라는 UTF-16 에서 등장한 개념이다. 이는 글자를 BMP 라는 맵형태로 관리하는데, 충분하지 않기 때문에 보조값을 의미한다. 보조문자 영역으로도 불린다.

이 문자 코드로 인간이 사용하는 다양한 문자가 등록 되어 있고, 심지어 현재 인간이 사용하지 않는 문자도 포함되어 있다. 여담이지만, 코드중 가장 점유율이 높은 문자는 한자이다. 그 다음이 한글이다. 한글의 점유율이 높은 이유는 하나의 문자 즉, 조합된 문자들을 코드로 넣어놓았기 때문이다.

문자는 코드

 이로써 컴퓨터는 숫자 값 뿐만 아니라 문자를 저장 할 때 문자를 직접 저장하는 것이 아니라 미리 정의 되어 있는 코드로 저장을 한다. 때문에 우리가 지금 이 글도 눈으로 디코딩된 문자를 보고 있으나 실제로 저장되어 있는 것은 숫자로 된 코드이다. 그리고 이러한 코드 덕에 적은 용량으로 많은 정보를 저장하고 표기할 수 있다.

반응형

'Python > 배경이 있는 파이썬' 카테고리의 다른 글

리스트(list)  (0) 2024.04.27
문자열(str)  (1) 2024.04.27
숫자형(int, float)  (0) 2024.04.24
변수(variable)와 상수(constant)  (0) 2024.04.23
개발 환경 만들기  (0) 2024.04.22
반응형

개요

 자료형은 프로그램에서 값을 다루기 위해서 정의된 것이다. int와 float는 기본적으로 정의 되어 있는 기본 자료형이다. 내부에서는 숫자도 구분하고 문자열도 구분 한다. Python 에서는 대입하는 결과를 문법이 유추해서 변수의 자료형을 정의하여 값을 대입한다.

 이 때문에 코드를 작성했을 때 숫자 자료형을 명확히 구분하지 않는 것 같으나 내부적으로는 구분을 하고 있다. 정수형은 int, 실수형은 float로 구분하고 있다. 실수형이 표현 가능한 숫자의 범위가 더 크기 때문에 소수점이 포함된 수치와 정수형 수치를 연산하게 되면 python은 자동으로 실수형으로 자료형을 바꿔서 연산을 한다.

 int 형은 정수형만 표현하여 내부적으로 0과 1을 하나씩 카운트 하는 방식이라 비교적 정확한 연산이 가능하다. 반면 float  는 소수를 포함한 실수형이라 내부적으로 실수부 자리 표기를 분리해서 사용하기 땜누에 비교적 큰 범위의 숫자 표현이 가능하지만 연산 횟수가 많으면 오차가 발생한다. 이 이유는 진법에 의한 수학적인 이유 때문이다. float 형은 잦은 연산을 하지 않는 것이 좋고 유효숫자를 정해 놓는 것이 오차를 줄일 수 있다.

 float 형에서 많은 연산을 하면 왜 오차가 발생하는지는 기회가 되면 정리하도록 하자.

산수 연산자(Arithmetic Operators)

숫자형은 기본적인 사칙연산을 사용할 수 있다. 이외 기본적인 연산자에 대해서 살펴보자. 만약 C 나 다른 언어를 알고 있다면 Python 만의 독특한 연산자도 보일 것이다. 반대로 python 에서는 없어진 연산자도 있을 것이다.

+

더하기 연산자이다. 이 연산자를 기준으로 좌우의 값을 더한다. int 형 값과 float 형의 값을 연산하게 될 경우 최종적으로 float 값으로 반환이 된다.

1 + 1.1
# 2.1 (float)

1.1 + 1
# 2.1 (float)

1 + 1
# 2 (int)

*

 곱 연산자이다. 연산자의 좌우의 값을 곱한다. 왼쪽이나 오른쪽 값 중에 float 형이 있는 경우 결과는 float 형이 된다.

1 * 1
# 1

2 * 2
# 4

2 * 1.1
# 2.2

-

빼기 연산자이다. 연산자의 오른쪽에 있는 값을 왼쪽에 있는 값에서 뺀다. 마찬가지로 int와 float 값을 연산할 경우 최종 결과는 float 형이 된다.

3 - 1
# 2

1 - 3
# -2

1.1 - 2
# -0.9

/

나누기 연산자읻다. 일반적으로 타 프로그래밍 언어에서는 연산자의 좌우가 int 형일 경우 몫만 반환한다. 그러나 파이썬에서는 몫으로 딱 나눠떨어지지 않으면 float 형으로 변화해서 소수점으로 결과를 반환한다.

3 / 2
# 1.5

10 / 2
# 5

//

몫 연산, 일반적인 타 프로그래밍 언어에서 나누기 연산자를 사용한 결과와 같다. 나누었을 때 나머지가 있어도 무시하고 몫만 반환한다.

3 // 2
# 1

10 // 2
# 5

%

나머지 연산. 연산자의 오른쪽 값으로 나누었을 때 나머지만 반환한다. 이때 나머지는 int 형으로 반환한다. 프로그래밍에서 은근히 많이 쓰이는 연산이다.

3 % 2
# 1

10 % 2
# 0

**

제곱 연산자이다. 파이썬의 독특한 문법이다. 실제로는 여러번 곱하는 걸 코드상 간당하게 작성한 것이기 때문에 여러번 곱연산 한것과 성능차이는 크지 않다.

2 ** 3
# 8

할당 연산자(Assignment Operators)

축약된 형태의 연산자로 연산자의 왼쪽 값과 오른쪽 값을 연산한 결과를 다시 왼쪽 변수에 대입하라는 의미이다. 대입 연산자처럼 왼쪽은 변수가 되어야 한다.

+=

 왼쪽의 값에 오른쪽에 있는 값을 더한 뒤에 다시 왼쪽 변수에 대입을 한다. 만약 왼쪽이 int 형이고 오른쪽이 float 형인 경우 왼쪽도 float 형이 된다.

a = 1
a += 1
a
# a 는 2

a += 1.1
a
# a 는 3.1

*=

 연산자의 왼쪽 변수값에 오른쪽 값을 곱 연산한 결과를 왼쪽 변수에 대입을 한다.

a = 1
a *= 3
a
# a 는 3

a *= 3
a
# a 는 9

-=

연산자의 왼쪽 변수 값에 오른쪽 값을 빼기 연산한 결과를 왼쪽 변수에 대입을 한다.

a = 10
a -= 2
a
# 8

/=

연산자의 왼쪽 변수 값에서 오른쪽 값을 나누기 연산한 결과를 왼쪽 변수에 대입을 한다.

a = 10
a /= 2
a
# 5

a /= 2
a
# 2.5

//=

 연산자 왼쪽 변수 값에 오른쪽 값으로 나누기 연산한 몫을 왼쪽의 변수에 대입한다.

a = 5
a //= 2
a
# 2

%=

연산자의 왼쪽 변수 값에 오른쪽 값으로 나눈 나머지를 왼쪽 변수에 대입한다.

a = 5
a %= 2
a
# 1

**=

연산자의 왼쪽 변수값에 대한 오른쪽 값 만큼 제곱하여 왼쪽 변수에 대입한다.

a = 2
a **= 3
a
# 8

a **= 2
a
# 64

 

반응형

'Python > 배경이 있는 파이썬' 카테고리의 다른 글

문자열(str)  (1) 2024.04.27
문자 code  (0) 2024.04.24
변수(variable)와 상수(constant)  (0) 2024.04.23
개발 환경 만들기  (0) 2024.04.22
파이썬 3 설치  (0) 2024.04.22
반응형

개요

프로그램에서 가장 기본적이면서 중요한 개념이다.

흔히 프로그램에서 주 메모리를 사용한다는 것은 변수에 값이 담기거나 변수가 있을 때와 동일하다.

변수 정의

 파이썬에서는 미리 동작이 지정되어 있는 키워드인 예약어를 제외하고 문자로 시작하는 대부분의 단어를 변수명으로 사용할 수 있다. 그리고 변수명은 가장 맨앞의 문자가 숫자가 와서는 안된다. 대입 연산자를 기준으로 앞(좌항)의 문자들이 변수명으로 인식된다. 여기서 대입 연산자는 일반 수학에서 등호(=)를 대입 연산자라 한다.

 대부분의 다른 프로그래밍 언어들은 변수를 지정할 때 변수의 형(type) 또는 변수임을 알리는 키워드를 사용한다. 파이썬의 경우 변수를 정의 할 때 별도의 타입 키워드를 사용하지 않는다.

 파이썬(3부터)에서는 기본 스크립트 문자 인코딩을 UTF-8 코드를 지원하기 때문에 변수명에 영문 + 숫자 외의 다른 언어를 사용할 수 있다. 문자 인코딩에 대해서는 향후에 설명을 한다.

상수의 정의

상수는 코드상 직접 숫자나 문자열(문장)을 작성한 것을 상수로 취급한다.

수학시간의 방정식에서 항상 정해진 값을 상수라고 한다. 파이썬에서의 상수는 숫자나 문자열을 적은 것 자체를 상수로 취급한다. 이는 문자도 내부적으로는 숫자 코드로 작성되었기 때문이다.

True, False, None 과 같은 예약 키워드도 상수로 취급한다.

상수는 대입연사자의 좌항, 즉 왼쪽에 있을 수 없다. 이는 상수의 정의상 변하면 안되기 때문이다.

# 상수
1
3
44
"hello"
False
True
None

대입 연산자(=)

대입 연산자는 오른쪽에 있는 값을 왼쪽에 넣는 것을 의미한다.

앞에서도 잠시 언급했지만, 해당 연산자의 왼쪽에는 상수가 올 수 없다. 예를 들어 (1 = 2)라고 하면 1은 이제부터 2이다 라는 말인다. 논리적으로도 말이 안된다.

다른 연산자들보다 우선순위가 가장 낮아 가장 나중에 연산된다.

a = 1
# a는 1의 값을 갖게 됨

1 = 2
# 문법 에러

뭘보누 = 3
# 뭘보누 라는 변수는 3이라는 값을 갖게 됨

print(뭘보누)
# 3
반응형

'Python > 배경이 있는 파이썬' 카테고리의 다른 글

문자 code  (0) 2024.04.24
숫자형(int, float)  (0) 2024.04.24
개발 환경 만들기  (0) 2024.04.22
파이썬 3 설치  (0) 2024.04.22
배경이 있는 파이썬  (0) 2024.02.22
반응형

개요

 메모장과 python만 있어도 충분히 프로그램을 만들 수 있다(어셈블러는 지금도 이렇게 하기도 한다). 하지만, 프로그램 언어에 대해서 검사를 해주는 많은 개발 도구들이 있는데, 굳이 이를 사용하지 않고 개발할 이유가 없다. 특히 숙련된 프로그래머 조차도 오타로 인해서 버그나 에러가 발생하는 경우가 많다.때문에 이를 방지하기 위해서 문법 검사, 문법 하이라이트 및 디버그 도구를 사용할 수 있는 통합개발환경(IDE)를 사용하는 것을 권장한다.

 윈도우 환경에서 Python을 설치한 경우 기본적으로 제공되는 Python IDLE이 있고, 가장 강력한 PyCharm, 가벼우나 확장기능으로 범용으로 사용되는 Visual Studio Code 등 다양한 개발 도구들이 있다.

함수나 class 를 배우기 전까지는 IDLE(유닉스 환경에서는 터미널에서 python을 입력하여 보이는 화면을 사용하면 된다.) 를 사용하여 실습을 진행해도 충분하다. class 이후부터는 개발 툴을 사용하는 것을 권장하는데, 여기서는 가벼운 Visual Studio Code(줄여서 VS Code)를 사용할 것이다.

IDEL Shell

Windows OS에서는 IDEL Shell 이라는 별도의 간단한 인터프리터 환경을 제공한다. 물론 다른 유닉스 환경에서는 터미널에서 'python' 혹은 'python3' 명령어를 입력하여 진입이 가능하다. Windows 역시 IDEL Shell 없이 명령프롬프트 혹은 Power Shell을 통해서 진입이 가능하다.

문법에 대해서 바로 확인이 가능한 환경이기 때문에 소스코드를 작성하다가 간단한 문법이 생각 안날 경우 사용해도 괜찮다. 다만, 복잡한 함수와 클래스를 다루게 될 경우 오히려 불편하므로 초기 파이썬 입문할때 주로 많이 사용하게 된다.

VS Code 설치

웹 브라우저에 구글로 vs code를 검색하거나 code.visualstudio.com 을 접속하면 된다. 보통은 웹 브라우저가 사용자의 컴퓨터의 OS를 인식하여 알맞는 VS Code 버전을 보여준다. 설치 과정은 특별한 것은 없다.

VS Code Extension

VS Code는 기본적으로 확장 가능한 간단한 텍스트 편집기이다. 개발도구로 사용하기 위해서는 확장 기능을 설치하면 된다. 그리고 확장 기능들은 MS외에도 다양한 개발사 혹은 개인 개발자들이 만들었다. 만약 원하는 기능이 없는 경우 관련 문서를 참조하여 자신이 직접 만들 수 도 있다.

Python을 위한 기본 확장기능으로 python(microsoft), Pylance(microsoft), isort(microsoft) 를 최소한을 설치하면 된다. 이외 관련된 추가 기능은 어떤 기능인지 확인하고 나서 추가를 하면 된다.

그 외 디버깅을 위해서는 code runer(jun Han)을 추가로 설치하면 좋다. 디버깅 과정은 .py 파일로 프로그램을 만들었을 경우 에러를 찾는 용도로 용이하다.

반응형

'Python > 배경이 있는 파이썬' 카테고리의 다른 글

문자 code  (0) 2024.04.24
숫자형(int, float)  (0) 2024.04.24
변수(variable)와 상수(constant)  (0) 2024.04.23
파이썬 3 설치  (0) 2024.04.22
배경이 있는 파이썬  (0) 2024.02.22

+ Recent posts