우리는 아직 이 직장에서 탈출하지 못했고, 교실 관리 프로그램의 개발자로 일하고 있다. 우리의 교실에는 "김철수", "윤철수" 등 다양한 개성의 학생들이 있지만, 이번에 새로운 전학생을 받게 되었다. 그런데 이런! 새 학생의 이름이 "김철수"이다. 

>> students=["김철수","윤철수","박철수"]
## 이렇게 잘살고 있는 철수교실에

>> students.append("김철수")
## 한명의 김철수가 더 들어오게 된다.

>> print(students)
["김철수","윤철수","박철수","김철수"]

문제가 있다. 우리는 공부를 잘하는 기존의 김철수와 공부를 못하는 김철수의 점수를 프로그램이 헷갈려하는 결과를 주고 싶지 않다. DB를 배운 사람이라면 당연하게 알 수 있는 문제이지만, 유일성을 부여할 수 있는 번호가 필요하다 (가령 학생 번호, 사원번호나 사람의 경우 주민번호가 될 수 있겠다.) 

 

아 좋다! 2차원 배열이 있었다. 그래서 자신있게 [학생 번호, 학생 이름]의 배열을 students에 추가하기로 하였다.

>> students=list()

>> students.append([1,"김철수"])

>> students.append([2,"윤철수"])

>> students.append([3,"박철수"])

>> students.append([4,"김철수"])

>> print(students)
[[1,"김철수"],[2,"윤철수"],[3,"박철수"],[4,"김철수"]]

뭐 좋다.  이렇게 관리해도 되지만 조금 더 안정적인 유일성 부여방법이 Python엔 존재한다.(이런 경우 휴먼에러로 4번이 중복 등록될 수도 있다.) 그 자료구조가 Dictionary 다른 말로는 Dict라고 한다.


Dictionary의 정의와 사용

Dictionary란 Key의 중복을 허용하지 않는 Key, Value 형태의 순서없는 자료구조이다.  생성은 [Dict로 사용할 변수명] = dict()로 생성하거나 문법적으로 {Key1 : Value1, Key2 : Value2 ... }을 사용하여 초기화까지 할 수 있다.

 

Key와 Value 

Dict에서 특정한 Value는 Key를 통해서만 얻을 수 있다.

>> students={1:"김철수",2:"윤철수",3:"박철수",4:"김철수"}

>> print(student[1])
"김철수"

>> print(student[3])
"박철수"

특이한점은 LIST와 다르게 대괄호[] 안에 들어가는 값이 인덱스가 아니라는 점이다.(0에서 시작하는 그 값들이 아니다! Dict는 순서가 없는 자료구조라는 걸 기억하자) 대괄호 안에 들어가는 값은 Key이며 그 Key에 상응하는 Value가 리턴이 된다는 특징이 있다. 

 

또한 변화하지 않는 값이라면 Key로 사용할 수 있다. 이게 무슨 소리냐

>> students={"학생1":"김철수","학생2":"윤철수","학생3":"박철수","학생4":"김철수"}

>> print(student["학생1"])
"김철수"

>> print(student["학생3"])
"박철수"

이것도 된다는 이야기이다. 변화하지 않는 값이기에 값을 추가 / 삭제할 수 있는 LIST는 Dictionary의 Key로 사용할 수 없다. 잘 알아두자 

>> students={["학생1"]:"김철수","학생2":"윤철수","학생3":"박철수","학생4":"김철수"}
## 이건 안된다!

다음은 자주사용되는 DICT의 메서드(함수)이다.

[DICT의 변수명].clear() : DICT의 초기화

[DICT의 변수명].items() : DICT의 (key, value) 쌍을 복사한다.

[DICT의 변수명].keys() : DICT의 Key들을 LIST로 반환한다.(정말로 LIST로 사용하려면 LIST()로 캐스팅 필요)

[DICT의 변수명].value() : DICT의 Value들을 LIST로 반환한다.(정말로 LIST로 사용하려면 LIST()로 캐스팅 필요)

>> students={"학생1":"김철수","학생2":"윤철수","학생3":"박철수","학생4":"김철수"}

>> students.items()
dict_items([('학생1', '김철수'), ('학생2', '윤철수'), ('학생3', '박철수'), ('학생4', '김철수')])

>> students.keys()
dict_keys(['학생1', '학생2', '학생3', '학생4'])

>> students.values()
dict_values(['김철수', '윤철수', '박철수', '김철수'])

>> students.clear()
>> print(students)
{}

* 여담으로 dict으로 정의된 students를 강제로 list(students)해서 강제로 list로 캐스팅하면 key만 list로 바뀐다.

* dict에 새로운 아이템을 추가하는 방법은 새로운키로 변수를 저장하면 된다. (ex : students["학생5"] = "심철수")


SET의 정의와 사용

SET란 Python 2.3부터 지원하는 기능이며, 집합 연산을 수월히 처리하기 위해 생성된 자료구조이다. Dictionary와 비슷하게 중복을 허용하지 않으며, 순서가 없지만 Value 만 존재하는 것이 특징이다.  [SET로 사용할 변수명] = set()로 빈 SET자료구조를 만들 수도 있고, 문법적으로 {1,2,3,4}로 해서 초기화까지 할 수 있다.

>> my_set={4,3,2,1}

>> print(my_set)
{1,2,3,4}

>> a="hello"
>> my_set = set(a)
>> print(my_set)
{'h', 'e', 'l', 'o'}

중간에 문자열 a를 set로 캐스팅한 my_set는 print결과 "l"의 중복을 허용하지 않고 "h", "e", "l", "o"만을 원소로 가짐을 알 수 있다.

 

Set는 집합연산을 위해 만들어진 것 답게 집합 연산과 같은 Union, isdisjoint, difference부터 단순 원소 추가 연산자인 add까지 지원한다. 

 

* 뭐 사실 난 set를 많이 안쓴다. 개인적인 생각으론 중요도도 다른 자료구조에 비해서 중요해 보이지 않고, 다른 자료구조로 처리될 수 있으면 set를 쓸 이유가 없다고 본다. 굳이 비슷한 자료구조가 필요하다면 만들어 쓰는 게 현명하다고 본다.

* set과 list는 상호 set()와 list()를 통해서 캐스팅이 가능하다 단 list > set으로 변환되었을 때 순서는 뒤죽박죽이 된다.


이렇게 이번시간에는 유일성 문제를 해결해주는 자료구조인 DICTIONARY와 SET에 대해서 알아보았다. 다음 시간은 기본자료구조의 마지막인 튜플에 대해서 알아보도록 하자

우리는 지금까지 상수 / 실수 / 문자열 변수의 사용과 그 연산을 자유자재로 할 수 있게 되었다.(할 수 있음 아무튼 그럴 거임). 커지는 프로그램은 필연적으로 많은 변수를 생성하게 되어있다. 예를 들어 교실 관리를 하게 된 우리가 프로그램을 만들고 있는데, 학생의 이름을 변수에 배정한다고 가정하자 우리는 늘 하던 대로 30명의 학생을 관리하기 위해

>> student1="김철수"
>> student2="배철수"
>> student3="윤철수"
>> student4="남궁철수"

...

>>> student30="독고철수"

 

이러한 변수를 만들었다. 그런데 뭔가 이상하다. 더 좋은 방법이 있을 거 같은데... 변수 이름이 너무 많이 생성되는 기분이 든다. 어쩌면 한 변수 안에 많은 것을 담을 수 있지 않을까??

 

이러한 문제는 LIST를 사용함으로써 완벽히 해결된다.. 


LIST의 정의와 사용

LIST는 변수를 일렬로 담아둔 선형구조(일자 구조)의 자료구조이다.

LIST는 지정할 변수명 = list()와 같은 식으로 list를 생성할 수 있고, Python의 문법에 따라 대괄호[ ]로 지정을 하게 되는데, 지정할 변수명 = [(변수 1), (변수 2), (변수 3)... ]의 식으로 초기화까지 진행할 수 있다.

>> student = ["김철수","배철수","윤철수"]

이제 우리는 student를 30번 치는 멍청한 행동을 하지 않아도 된다! 그런데... 어떻게 student변수의 "김철수"를 사용할 수 있을까? 다음과 같이 print를 하면 LIST전체가 출력된다.

>> print(student)
["김철수","배철수","윤철수"]

본격적으로 LIST를 사용하기 위해서 인덱스의 개념을 알아야 한다.

 

인덱스(index)

인덱스란 순서이다. 즉 student의 몇 번째 순서(인덱스)에 있는 변수를 사용할 것이다 처럼 특정한 자료구조의 위치를 집어주는 역할을 해준다. 사용법은 변수명[인덱스]으로 사용한다.

>> print(student[0])
"김철수"

>> print(student[1])
"배철수"

>> print(student[2])
"윤철수"

* 인덱스는 항상 0으로 시작한다. 따라서 "김철수"는 student의 0번째 원소인 것이다. >> 이렇게 1번째부터 만들지 않은 이유는 메모리 구조로 설명할 수 있다. 변수를 만든다는 행위는 메모리에 크기를 할당한다는 행위이며, 배열을 만드는 것은 연속적인 크기를 할당하는 의미인데, 변수의 이름 그 자체가 0번째 자리하는 원소를 의미하기 때문에. 관례적으로 0번째를 첫 번째 원소로 사용한다. 이는 C언어나 메모리를 공부하면 더 깊이 알 수 있다.

 

LIST는 여러 가지 메소드(함수)를 제공하는데 다음과 같은 기능이 많이 사용된다.

[LIST형 변수명].append(원소) : 리스트에 원소를 추가한다.

[LIST형 변수명].insert(위치, 원소) : 리스트에 특정한 위치에 원소를 삽입한다.

[LIST형 변수명].clear() : 리스트의 원소를 전부 제거한다.

[LIST형 변수명].sort() : 리스트의 원소를 정렬한다.

[LIST형 변수명].count(원소) : 리스트의 원소 개수를 셈한다.

[LIST형 변수명].index(원소) : 특정한 원소의 인덱스를 출력한다. 

다음은 자주 사용하는 메소드의 예시이다.

>> my_list = [3,2,1,5,4]

>> my_list.append(6)
## my_list는 [3,2,1,5,4,6]

>> my_list.insert(2,5)
## my_list는 [3,2,5,1,5,4,6] 2번째인덱스에 5를 집어넣었다.(인덱스는 항상 0부터!)

>> my_list.sort()
## my_list는 [1,2,3,4,5,5,6]

>> my_list.count(5)
2

>> my_list.index(4)
3

>> my_list.clear
## my_list는 []

* 개발도구에 따라 다르지만, my_list와 점(.)까지 입력을 하고 탭[Tab]을 하거나 가만히 있으면, 사용할 수 있는 기능들의 목록을 보여준다. 이것을 메서드(함수)라고 부르는데, 지금은 ① 이것은 메서드라고 부른다는 것 ② 자료구조에 따라 사용할 수 있는 메서드가 다르다는 것 ③ 메서드는 사용할 때 0개 이상의 괄호 안에 들어갈 매개변수가 필요하다는 것

이렇게만 알아두도록 하자

 

Python의 LIST에는 서로 다른 자료형을 담을 수 있다. 즉 a=[1,2, "bbb", "ccc"]도 가능하고, 담을 수 없어 보이는 람다 함수(나중에 배울 예정이다.)이나 다른 자료구조 또한 담을 수 있다. 이해의 확인을 위해서 다음의 코드를 보도록 하자

>> my_list = [1,2,3]
>> new_my_list = [4,5,my_list]

>> print(new_my_list"네모")
2

여기서 "네모"에 들어갈 값은 무엇일까? 일단 2는 my_list [1]이다. new_my_list에서 my_list는 2의 인덱스에 존재하니

new_my_list [2]가 곧 my_list가 되는 것이고 우리는 my_list [1]를 출력하고 싶은 것이니 정답은 [2][1]이 된다.

>> my_list = [1,2,3]
>> new_my_list = [4,5,my_list]

>> print(new_my_list[2][1])
2

이것과 같이 배열이 2번 중첩된 것을 2차원 배열이라고 한다. 눈치 빠른 사람들은 알겠지만, 3번 중첩되면 3차원 배열, n번 중첩되면 n차원 배열이라고 한다.(물론 4차원 이상의 배열을 쓰는 경우는 드물다.)

* 차원이라고 부르는 이유는 이것이 곧 축과 상응되기 때문이다. 1차원 배열의 원소들이 일자로 쭉 이어진 상자라면, 2차원 배열의 원소들은 사각형에 존재하는 상자들이고, 3차원 배열은 직육면체에 존재하는 상자들이다.(인덱스로 접근하는 방식을 추상화하면 그렇다는 것이다. 컴퓨터에 저장되는 메모리가 직육면체로 있지는 않다.)

 

 

캐스팅 - LIST <> 문자열

 

LIST가 제공하는 강력한 메서드(함수) 들을 보았으면 이제 LIST 없이는 살 수 없는 몸이 돼버렸을 가능성이 있다. 가령 문자열로 만든 a="Hello World"의 a[3]은 "l"이라는걸 Python은 알려주겠지만, a[3] = "n"로 만들어 "Henlo World"를 만드는 일은 문자열 자료형에서는 불가한 일이니 말이다. 그래서 우리는 LIST로의 캐스팅을 자유자재로 할 줄 알아야 한다. 다음은 문자열과 리스트의 상호 변환 방법이다.

>> a="hello world"
>> a=list(a)
## a를 list로 캐스팅

>> print(a)
['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']

>> a = ''.join(a)
## ?? 단순한 캐스팅이 아니다. a=str(a)를 하게되면 "['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']"
## 로 통째로 문자열이 되버린다.

>> print(a)
"hello world"

이번 시간에는 Python의 강력한 자료구조 중 하나인 LIST에 대해서 알아보았다. 2차 3차의 자료구조가 되면서 어려워지는 것이 이 LIST이지만, 기초가 단단하면 어떠한 LIST를 만나더라도 자유자재로 다룰 수 있을 것이라고 자신할 수 있다. 아직 어려운 부분은 아니지만 이해가 안 된다면 몇 번이고 다시 읽어보자. 다음 시간에는 다른 자료구조인 DICTIONARY와 SET에 관하여 알아보자

 

변수던 상수던 그 외의 무엇인가이던가, 프로그래밍에서 사용되는 무수한 자료에는 자료형 이라는게 존재한다.

흔히 볼 수 있는 자료형으로는 정수 / 실수 / 문자 등이 있고 우선 이 자료형들을 알아보자.

 

 

기본 자료형

정수(Integer, Int) : 소수점을 사용하지 않는 n진 상수 (ex : 0,-12,15,0xfe 등)
실수(float) : 부동 / 고정 소수점을 사용하는 상수 (ex : 3e-2, 0.774 등)
문자(str) : 큰따옴표(") 혹은 작은따옴표로 둘러싸인 고정 수(ex : "asdf","23","BB")(리터럴이라고 한다.)

 

같은 타입의 자료형은 연산이 가능하다.

>> a=3
>> b=7
>> my_str = "10"

>> print(a+b)
10

>> print(my_str+a)
## 오류 발생! my_str은 문자이고 a는 정수이다

그럼 여기서 my_str을 정수 10으로 만들 수 있는 방법은 무엇이 있을까? 다행이도 Python을 포함한 대부분의 프로그래밍 언어는 Casting을 통해서 이를 해결한다.

Casting : 변수를 다른 형태로 변환하는 것
>> a=3
>> b=7
>> my_str = "10"

>> print(a+b)
10

>> my_str = int(my_str)
## int()를 이용해서 이제 my_str은 "10"이 아닌 10이 된다. 

>> print(my_str+a)
13

* 상수나 실수를 문자열로 캐스팅하는것도 가능하다(str(a)를 하면 결과는 "3"이다.)

* 실수를 정수로 강제 캐스팅하면 소수점은 강제로 짤린다.

 


이번시간은 자료형과 형변환에 대하여 알아보았다. 다음시간에는 Python 자료형인 LIST에 대해서 알아보도록 하자

변수란

변수(variable)는 컴퓨터 프로그래밍에서 아직 알려지지 않거나 어느 정도까지만 알려져 있는 양이나 정보에 대한 상징적인 이름이다.

 

프로그래밍에서 변수의 정의는 위와 같다. <변하는 값>이라고도 말할 수 있으며, 사실상 코드는 작성하면서 사용하게 될 상수를 제외한 모든 값들을 변수라고 보면 좋을 거 같다.

 

예를 들어 '어떠한 값의 3을 더하는 프로그램을 만드시오' 라는 과제가 있으면, 이 어떠한 값은 정해지지 않은 것이니, 변하는 값 즉 변수라는 것을 알 수 있다. 그러면 Python의 변수는 어떻게 만들고, 사용할 수 있을까?

 

 

변수의 정의와 사용

 

우선은 어떠한 값을 담고 있는 변수의 이름부터 지어주어야한다. 이름을 짓는 데는 다음과 같은 규칙이 사용된다.

변수의 이름은 영어, 숫자, 언더바로만 구성된다.(단 숫자와 언더바는 영어와 조합하여야 한다.)

즉 a, _REDUCTO, ABC_123 등이 가능한 변수의 이름이 된다. 

 

또한 Python에서 변수는 다른 프로그래밍 언어에서 보면 생성과 동시에 초기화(initialize)된다. 풀어 설명하면 변수의 이름이 생성되는 동시에 특정한 값을 할당받는다는 것을 의미한다. 아래는 변수의 정의의 예시이다.

>> a = -3

>> _REDUCTO = "ddd"
## Python에서 변수는 어떠한 형태도 담을 수 있다

>> ABC_123 = _REDUCTO
## 위와같은 이유로 변수에 다른 변수를 담는것도 허용된다.

 * ##는 주석(Comment)을 의미한다. 주석은 프로그램 동작에 포함이 되지 않는 프로그래머의 설명문으로 코드의 생성일, 저작권, 사용법 등이 적힌다. 주석에 대한 자세한 내용은 추후 포스팅하겠습니다.

 

이렇게 변수를 정의했으면 우리는 변수를 사용할 수 있다. 앞서 사용했던 print("Hello World")의 "Hello Worlds"(정해진 상수)를 우리 변수로 바꾸어 작성해보자

>> print(a)
-3

>> print(_REDUCTO)
"ddd"

>> print(ABC_123)
"ddd"

 

사칙연산

 

Python은 다양한 사칙연산을 지원한다. 전 글에서 보았던 간단한 +,-,/,* 뿐만 아니라 다음과 같은 연산자를 지원한다.

연산자 설명 예시
+ 더하기 10+3 = 13
- 빼기 10-3 = 7
* 곱하기 10*3 =30
/ 나누기 10/3 = 3.33...
% 나머지 10%3 = 1
** 제곱 10**3 = 1000
// 10//3 = 3

다음과 같은 코드를 통해서 사칙연산을 조금 더 깊게 알아보자. 바로 위의 변수의 내용까지 담고 있으니, 직접 코딩해보는 것을 추천한다.

>> a=3
>> b=5
>> c=a*b
## 여기서 a=3, b=5, c=15가 된다.

>> print(a+b)
8

>> print(c*b+a)
78

>> a = a+3
## 여기서 a는 기존 a에 3이 더해진 6이 된다.

마지막 a=a+3을 보자. 수학에서 "="은 같다를 의미하지만, 프로그래밍 세상에서 =은 대입을 의미한다.

무심코 사용했던 a=3이나 b=5도 각각 a에 3을 대입한다. b에 5를 대입한다의 의미를 가지고 있는 것이다.

이 대입에는 규칙이 있는데 항상 "오른쪽을 왼쪽에 대입한다." 즉 a=a+3 은 기존 a에 3 더한 값을 새로 a에 대입한다는 의미를 가진다. 대부분의 프로그래밍 언어는 이렇게 기존의 값을 쉽게 바꾸는 연산자를 제공한다. 바로 +=, -=, *=, /=이다, a+=3 은 a = a+3과 같은 의미, b-=9는 b = b-9와 같은 의미를 가진다. 

 

독특한점은 문자열에 대해서 "+"와 "*"연산이 동작한다는 점이다. 다음의 코드를 보자

>> a = "AAA"
>> a = a+"BBB"
>> print(a)
"AAABBB"

>> a = "ABC"
>> a = a*3
>> print(a)
"ABCABCABC"

 

비교 연산 

비교 연산은 두 수의 크기, 같음과 다름 여부를 계산해주는 연산자로 참(True)과 거짓(False)을 판단한다.

연산자 설명 조건 결과
>, >= 크거나 (같음) 3>5 False
<, <= 작거나 (같음) -1<4 True
== 같음 3+7==10 True
!= 다름 "aaa"!="aab" True

*==의 조건과 결과로 "사칙연산을 비교 연산보다 우선한다"는 것을 알 수 있다.

 

비교 연산은 논리 연산과 같이 사용되는 경우가 많다, Python에서 AND의 연산자는 and이고, OR의 연산자는 or, 같음의 연산자는 is, 다름의 연산자는 not 등이 쓰인다.

* 위 연산의 설명의 자세한 건 논리와 이산수학 부분에 포스팅 예정이니 모르는 사람은 구글링, 포스팅을 확인하고 오는 것이 좋다.(굉장히 중요한 내용이다!) 

 


이렇게 Python에서 변수의 정의와 사용, 연산의 종류인 사칙연산과 비교 연산에 대해 알아보았다. 이외에도 비트 연산 등이 추가로 사용되나, 사실 비트 연산이 사용되는 경우는 위 연산들에 비하면 적을 뿐 아니라 이해에 논리 연산의 이해가 필요하니 사용하게 될 때 자세한 설명을 하도록 하겠다.

 

 

이렇게 Python에서 변수의 정의와 사용, 연산의 종류인 사칙연산과 비교연산에 대해 알아 보았다. 이외에도 비트연산등이 추가로 사용되나, 사실 비트연산이 사용되는 경우는 위 연산들에 비하면 적을뿐아니라, 이해에는 논리연산의 이해가 필요하니 사용하게 될 때 자세한 설명을 하도록 하겠다. 다음 시간에는 기본자료형과 형변환을 알아보도록 하겠다.

자! Python세계에 온것을 환영한다. 우선 이 Python이라는 놈이 어떤 생태환경을 가지고 있는지 관찰해보도록하자 

 

우리의 첫번째 코드는 

>> print("Hello World")

이다. Python은 다음과 같은 코드를 입력하면 

>> print("Hello World")
Hello World!

와 같은 결과를 줄것이다.

 

이 한줄이 의미하는 것은 간단하다. 

Hello World를 출력해라!

가령 Hello World말고 좋아하는 글자를 써서 넣을 수 있을 것이다. 예를 들면 

>> print("퇴근!")
퇴근!

이 될 수도 있다. 

 

다른 일은 어떤 걸 할 수 있을까? 컴퓨터니까 우리의 귀찮은 계산을 대신해주었으면 하는 바람이 있다.

(* 아직 우리의 Python은 그다지 똑똑하지 못한 주인을 가지고 있기에 사칙연산을 대신 시켜보도록 하자)

>> 3+5
8

>> 10/2
5

>> 5*2+3
13

>> (7-4)*2
6

우리의 Python은 역시 똑똑하다 

 

Python과 친해지는 방법은 여러가지를 써보는 것이다. C언어의 창시자인 우리의 메시아 데니스 리치는 프로그래밍언어에 익숙해지는 가장 효율적인 방법은 그것으로 프로그램을 만드는 것이라고 했다. Python과 익숙해 지는 가장 좋은 방법은 역시 Python을 오랜시간들여 관찰하고 같이 여러가지를 해보는 것이다. 다음시간에는 변수와 사칙연산으로 Python과 더욱 친해져 보도록 하자

농사를 지으려면 땅이 있어야 하고, 그림을 그리려면 캔버스가 있어야 한다.
무슨 소리냐.

-- Python을 시작하려면 Python을 작성할 수 있는 개발도구가 있어야 한다. --

프로그램도 자신의 맞는 환경이 존재해서 정확한 프로그램을 설치하기 위해서는 자신의 단말기 정보를 알아야 한다.
크게 ①운영체제와 ②아키텍처를 알아야 하는데, 자신의 운영체제와 버전을 확인하는 방법은 다음과 같다.

① Window 아키텍처 확인방법

실행창([윈도우]+[R]) - msinfo32 - [OS이름, 시스템 종류 확인]

*여기서 시스템 종류가 X86인 경우 32버전, X64인경우 64버전이다.

* 리눅스의 경우에는 Python이 내장되어 있으며, Mac은 내가 쓸 줄 모른다....(단말기도 없고 VM에 설치할 의지도 없다.)

여기까지 되었다면 우리의 Python 개발도구를 만나러 갈 시간이다. 가장 간단한 IDLE의 설치 방법을 포스팅할 것이다. 이 글 마지막 부분에 다른 추천 개발도구 또한 설치 링크를 적어두었으니, IDLE이 마음에 들지 않거나, 추가적인 기능이 필요한 경우 다른 도구를 설치하자

※ IDLE 이란? ※

IDLE - Python으로 개발된 개발도구이다. Python을 설치할 때 내장되어있으며, 필자는 다른 도구는 무거워서 단순한 프로그램은 이것으로 개발한다.

※ IDLE 설치방법 ※

1. 다음 위 설치 링크의 Python공식 홈페이지의 다운로드 화면으로 이동, Download Python 3.9.3을 눌러서 Python setup를 다운로드한다. (설치 링크 : www.python.org/downloads/)


2. Python setup 실행 후 [Install Now]를 클릭한다.


3. 설치가 완료되었으면 자신의 프로그램 목록에 IDLE이 설치된 것을 확인할 수 있다.
(필자는 3.8의 Python을 사용하고 있으며, 방법대로 3.9.3을 설치한 사용자는 IDLE(Python 3.9 XX-bit)로 표시될 것이다.)


4. IDLE을 열면 다음과 같은 화면이 우리를 반긴다. 이곳이 Python과 대화를 할 수 있는 인터프리터가 구현된 곳이라고 생각해주면 된다.


5. 탭의 [File] - [New File](단축키 : Ctrl + N)을 눌러 새로운 .py를 만들기 위한 준비를 하자
* .py란 파이선으로 작성된 언어 스크립트의 확장자이다. Python과 관련된 확장자 중 하나로 다른 확장자는 Complied된 파일인 .pyc, 라이브러리 형태로 작성된 .pyd 등등이 있다.

&lt;New File탭&gt;


6. 새로운 스크립트 작업창에 print("Hello World") 입력 후 탭의 [File] - [Save](단축키 : Ctrl + S)를 선택하여 파일을 저장한다.(이름은 어떻게 하든 무관하니, 지금은 hello.py로 지정한다.)

&lt;print("Hello World")&gt;

7. 탭의 [Run] - [Run Module](단축키 : F5)를 눌러 정상적으로 실행되는지를 확인하자, New File을 눌렀던 그 창에서 Hello World가 출력되었다면 성공이다.



* 지금까지 잘 따라왔다면, Python의 세계에 그림을 그릴 도화지를 준비한 것이다. IDLE만으로 충분히 따라올 수 있는 튜토리얼이 되겠지만, IDLE은 기능이 제한적이기에 여타 다른 개발도구를 사용하고 싶은 사람들은 아래 있는 개발도구들을 추천한다.



PyCharm - 직관적이고, 설치도 어렵지 않다. 추천합니다.
(설치 링크 : www.jetbrains.com/ko-kr/pycharm/download/#section=windows)


③ ATOM - 다른 언어의 개발 툴까지 같이 제공해주는 좋은 프로그램이다. 사용법도 어렵지 않고, 인터페이스도 깔끔하다
(설치 링크 : atom.io/ ) >> 별도로 python플러그인을 설치해야 된다.


④ Anaconda - 실제로는 Anaconda에 들어있는 Jupyter Notebook이라는 프로그램이 개발환경이 되는데, 웹으로 작성되는 코드이다 보니 필자는 익숙하지 않아서 쓰지 않았다. 그러나 Anaconda가 제공하는 기능(예를 들면 상이한 버전의 파이선을 같은 환경에서 구동 가능하다는 것 등)이 워낙 강력하기 때문에, 데이터베이스 등 수학/기하적인 용도로 Python을 사용하는 사람이라면 추천한다.
(설치 링크 : www.anaconda.com/products/individual)


* 기존에 다른 개발도구를 사용하다가 Python을 배우는 경우 사용하던 개발도구가 Python을 Plugin처럼 지원하는 경우도 있다.(ex : Visual Studio) 우리의 용량은 소중하니 잘 확인해보자.


+ Recent posts