시리즈:쉽게 배우는 프로그래밍 입문: 두 판 사이의 차이

(자동 찾아 바꾸기: 「때 까지」(을)를 「때까지」(으)로)
 
(사용자 10명의 중간 판 33개는 보이지 않습니다)
1번째 줄: 1번째 줄:
{{쉽게 알 수 있다 시리즈|이 문서는 정말 쉽습니다.|문서의 내용이 너무 쉬워서 오늘부터 프로그래밍 할 수 있을 것 같습니다.}}
<onlyinclude>{{쉽게 알 수 있다 시리즈
[[분류:프로그래밍 시리즈| ]]
|이 문서는 정말 쉽습니다.
[[분류:쉽게 있다 시리즈]]
|문서의 내용이 너무 쉬워서 오늘부터 프로그래밍 할 수 있을 것 같습니다.}}
[[분류:집단연구]]
{|class="wikitable" style="text-align:center; margin:auto;"
{{프로그래밍 시리즈}}
|-
! colspan="2" | 리브레 프로그래밍 시리즈
|-
| style="width:6em" | [[시리즈:쉽게 배우는 프로그래밍 입문|초급<br />프로그래밍]]
| style="" | {{가로목록|
* [[시리즈:쉽게 배우는 프로그래밍 입문/C|C]]
* [[시리즈:쉽게 배우는 프로그래밍 입문/C++|C++]]
* [[시리즈:쉽게 배우는 프로그래밍 입문/C 샵|C#]]
* [[시리즈:쉽게 배우는 프로그래밍 입문/FORTH|FORTH]]
* [[시리즈:쉽게 배우는 프로그래밍 입문/Go|Go]]
* [[시리즈:쉽게 배우는 프로그래밍 입문/JavaScript|JavaScript]]
* [[시리즈:쉽게 배우는 프로그래밍 입문/Java|Java]]
* [[시리즈:쉽게 배우는 프로그래밍 입문/Lua|Lua]]
* [[시리즈:쉽게 배우는 프로그래밍 입문/PHP|PHP]]
* [[시리즈:쉽게 배우는 프로그래밍 입문/파이썬|Python]]
* [[시리즈:쉽게 배우는 프로그래밍 입문/Ruby|Ruby]]
* [[시리즈:쉽게 배우는 프로그래밍 입문/Rust|Rust]]
* [[시리즈:쉽게 R 있는 R|R]]
* [[시리즈:쉽게 배우는 프로그래밍 입문/SQL|SQL]]}}
|-
| [[시리즈:중급 프로그래밍 시리즈|중급<br />프로그래밍]]
| style="" | {{가로목록|
* [[시리즈:중급 프로그래밍 시리즈/C|C]]
* [[시리즈:중급 프로그래밍 시리즈/C++|C++]]
* [[시리즈:중급 프로그래밍 시리즈/C 샵|C#]]
* [[시리즈:중급 프로그래밍 시리즈/FORTH|FORTH]]
* [[시리즈:중급 프로그래밍 시리즈/웹 클라이언트 디자인|HTML/CSS/JavaScript]]
* [[시리즈:중급 프로그래밍 시리즈/Java|Java]]
* [[시리즈:중급 프로그래밍 시리즈/Lua|Lua]]
* [[시리즈:중급 프로그래밍 시리즈/PHP|PHP]]
* [[시리즈:중급 프로그래밍 시리즈/파이썬|Python]]
* [[시리즈:중급 프로그래밍 시리즈/Ruby|Ruby]]
* [[시리즈:중급 프로그래밍 시리즈/SQL|SQL]]}}
|-
| [[시리즈:고급 프로그래밍 시리즈|고급<br />프로그래밍]]
| [[시리즈:고급 프로그래밍 시리즈/파이썬|Python]]
|-
| colspan="2" | [[시리즈:쉽게 배우는 프로그래밍 입문/협업|협업]]
|}</onlyinclude>


== 들어가기 전에 ==
== 들어가기 전에 ==
11번째 줄: 49번째 줄:


만약에 항목에 없는 새로운 언어를 기준으로 추가하실 경우, 새로 목차를 만들어 주시길 바랍니다.
만약에 항목에 없는 새로운 언어를 기준으로 추가하실 경우, 새로 목차를 만들어 주시길 바랍니다.
== 프로그래밍을 무서워 하지 말자! ==
== 프로그래밍을 무서워 하지 말자! ==
프로그래밍은 어려운 것이 아니다.
프로그래밍은 어려운 것이 아니다.
29번째 줄: 64번째 줄:
==프로그래밍을 배우고 싶은데, 무슨 언어를 배워야 하나요?==
==프로그래밍을 배우고 싶은데, 무슨 언어를 배워야 하나요?==
[[프로그래밍 언어]] 문서에서 볼 수 있듯 세상에는 정말 많은 프로그래밍 언어가 존재한다. 언어마다 장단점과 적합한 분야가 있어 무엇을 만들 것인가에 따라 언어 선택이 달라지긴 하지만, 첫 언어를 선택하는데에 부담을 갖진 말자. 어떤 프로그래밍 언어를 익히던간에 하나만 잘 익혀두면 다른 언어도 금방 익힐 수 있다.
[[프로그래밍 언어]] 문서에서 볼 수 있듯 세상에는 정말 많은 프로그래밍 언어가 존재한다. 언어마다 장단점과 적합한 분야가 있어 무엇을 만들 것인가에 따라 언어 선택이 달라지긴 하지만, 첫 언어를 선택하는데에 부담을 갖진 말자. 어떤 프로그래밍 언어를 익히던간에 하나만 잘 익혀두면 다른 언어도 금방 익힐 수 있다.
<br><br>
<br /><br />
다음은 언어 선택 가이드이다.
다음은 언어 선택 가이드이다.
* 상황에 따른 선택 가이드
* 상황에 따른 선택 가이드
36번째 줄: 71번째 줄:
** else
** else
*** 많은 사람들이 사용하는 언어를 선택한다. (관련 자료를 찾기가 수월하다)
*** 많은 사람들이 사용하는 언어를 선택한다. (관련 자료를 찾기가 수월하다)
*** C/C++, C#, Java, Object-C, Swift, JavaScript, Python, Ruby <del>어셈블리</del> 등의 언어가 있다.
*** C/C++, [[C#]], [[Java]], Object-C, Swift, [[JavaScript]], Python, Ruby <del>어셈블리</del> 등의 언어가 있다.
**** 이 중 Python이 첫 시작으로 무난하다.
**** 이 중 [[Python]]이 첫 시작으로 무난하다.<ref>파이썬이라고도 하는데 프로그래밍을 쉽게 배우고 싶다면 추천할 만하다.</ref>
**** Java와 C#도 나쁘지 않다.
**** [[Java]]와 [[C#]]도 나쁘지 않다.
**** C/C++은 첫 시작으로는 추천하지 않는다. <del>국내외를 막론하고 C/C++ 기초 서적에서 첫 언어로 이것들을 추천하는데 믿지 않는게 좋다. </del><ref>이 두 언어는 성능과 기능이 최우선인지라 만들면 일일히 하나씩 다 상태를 관리해줘야 한다. 다른 언어들에서 자동으로 처리해주는 걸 굳이 하나하나 빼먹지 않고 추가로 써야 한다면? 초보 때는 이런 언어는 머리만 아플 뿐이다. 단지 컴퓨터의 구조를 익히게 한다고 [[컴퓨터공학과]]에서 '''매우''' 높은 확률로 이것만 배우게 될 뿐…. 그렇다고 책장에 모셔두진 말고 그냥 훑어보기라도 하면 도움된다. 특히 컴파일러 부분은 python을 선택했다면 모르고 넘어가기 때문에 알아두는 게 좋다.</ref>
**** C/C++은 첫 시작으로는 추천하지 않는다. <ref>국내외를 막론하고 C/C++ 기초 서적에서 첫 언어로 이것들을 추천하는데 믿지 않는게 좋다. C와 C++은 난이도가 높은 언어로 손꼽히기 때문이다.</ref><ref>이 두 언어는 성능과 기능이 최우선이라 만들던 일일히 하나씩 다 상태를 관리해줘야 한다. 다른 언어들에서 자동으로 처리해주는 걸 굳이 하나하나 빼먹지 않고 추가로 써야 한다면? 초보에게 이런 언어는 머리만 아플 뿐이다. 단지 컴퓨터의 구조를 익히게 한다고 [[컴퓨터공학과]]에서 '''매우''' 높은 확률로 이것만 배우게 될 뿐…. 그렇다고 책장에 모셔두진 말고 그냥 훑어보기라도 하면 도움된다. 특히 컴파일러 부분은 python을 선택했다면 모르고 넘어가기 때문에 알아두는 게 좋다.</ref>
* 목적에 따른 선택 가이드
* 목적에 따른 선택 가이드
** 윈도우즈 응용 프로그램을 만들고 싶다 → 온갖 언어로 가능하다. C#을 추천한다.
** 윈도우즈 응용 프로그램을 만들고 싶다 → 온갖 언어로 가능하다. C#을 추천한다.
** 안드로이드 애플리케이션을 만들고 싶다 → Java를 선택한다. (C++, C#, Python으로도 가능하긴 하다. [http://www.bloter.net/archives/253414 자마린을 무료로 쓸 수 있게 됐다.])
** 리눅스 프로그램을 만들고 싶다. → 마찬가지로 온갖 언어로 가능하다. C++,C#을 추천한다.
** 안드로이드 애플리케이션을 만들고 싶다 → Java를 추천한다. (C++, C#, Python으로도 가능하긴 하다. [http://www.bloter.net/archives/253414 자마린을 무료로 쓸 수 있게 됐다.])
** iOS 애플리케이션을 만들고 싶다 → Object-C / Swift를 선택한다. (C#, Python으로도 가능하긴 하다.)
** iOS 애플리케이션을 만들고 싶다 → Object-C / Swift를 선택한다. (C#, Python으로도 가능하긴 하다.)
** 웹 페이지를 만들고 싶다. → 언어 하나 선택하라고 하기가 좀… 여러 가지 언어를 복합적으로 사용하며, 대표적으로 HTML<ref>정확히는 프로그래밍 언어의 범주에는 속하지 않고, 마크업 언어라고 한다.</ref>, PHP, ASP, JSP 등을 사용하게된다.
** 웹 페이지를 만들고 싶다. → 언어 하나 선택하라고 하기가 좀... 여러 가지 언어를 복합적으로 사용하며, 대표적으로 HTML<ref>정확히는 프로그래밍 언어의 범주에는 속하지 않고, 마크업 언어라고 한다.</ref>이 있고, 동적 웹 페이지를 만들고 싶다면 PHP, ASP, JSP 중에 하나 골라서 배워보자. HTML만 배우지는 말고, CSS, 자바스크립트도 배워봐야 나쁠 것 없다.
** 게임을 만들고 싶다 → [[유니티 엔진]](C#), [[언리얼 엔진]](C++), 그 외에도 다양한 게임 엔진들이 많다.
** 게임을 만들고 싶다 → [[유니티 엔진]](C#), [[언리얼 엔진]](C++), 그 외에도 다양한 게임 엔진들이 많다.<ref>입문용으로 뭘 쓸지 고민한다면 유니티 엔진을 써라, 하지만 유니티는 퀄리티가 언리얼보다 한참 뒤떨어지는데 최근에 그 격차가 좁아졌기는 했지만 유니티에서 고퀄리티로 개발한다하면 이때는 언리얼보다 난이도가 높아지는 단점이 있다. 언리얼이 전체에서 필요없는 것을 빼는 식이라면 유니티는 최소에서 필요한 것을 첨가하는 식이다. 초보가 고퀄리티를 낼 때는 언리얼, 빨리 배우고 게임을 내놓고 싶다면 유니티를 선택하라.</ref><ref>C#으로 개발하면 성능이 떨어지지 않을까?라는 걱정하는 사람들이 있을 것이다. 하지만 그렇지 않은데 최근에 C#을 C++로 번역하는 기능도 추가되었고 C#의 부족한 성능을 메우기 위한 기능도 꾸준히 출시되어 성능 문제를 따지는건 의미가 없을 것이다. 그런데 초보가 성능 문제를 따질 필요가 있는가. 유니티의 C#은 쉽지만 공식 비주얼 스크립팅 기능이 없고 언리얼의 C++은 어렵지만 비주얼 스크립팅 기능이 있어 뭐가 더 쉬운지 깊이 생각할 필요가 없다.</ref>
** 소켓 프로그래밍<ref>컴퓨터와 컴퓨터, 즉 컴퓨터를 네트워크에 연결하여 다른 사용자(서버, 클라이언트 등)와 연결하는 영역을 다루는 프로그래밍</ref>을 하고 싶다. → 언어는 어지간한 고급언어를 다룰 수 있다면 아무거나 사용해도 상관없다. 단 네트워크 관련 지식이 필요하며, 아래의 시스템 프로그래밍과도 일부 공유된다.
** 소켓 프로그래밍<ref>컴퓨터와 컴퓨터, 즉 컴퓨터를 네트워크에 연결하여 다른 사용자(서버, 클라이언트 등)와 연결하는 영역을 다루는 프로그래밍</ref>을 하고 싶다. → 언어는 어지간한 고급언어를 다룰 수 있다면 아무거나 사용해도 상관없다. 단 네트워크 관련 지식이 필요하며, 아래의 시스템 프로그래밍과도 일부 공유된다.
** 시스템 프로그래밍<ref>컴퓨터를 구성하는 하드웨어 및 이를 제어하는 OS와 드라이버를 다루는 프로그래밍</ref>을 하고 싶다. → C/C++<ref>위에서 서술되었듯이 성능과 기능을 최우선으로 하는 언어이다. 이 때문에 태생부터 효율적인 시스템 자원(메모리 등) 관리에 사용되었고 현재까지도 사용<del>노인학대</del>되고 있다.</ref>를 추천한다. 여기에 어셈블리도 수준급으로 다룬다면 금상첨화. <del>물론 이쯤되면 취미의 영역을 벗어나 코딩덕후 or 현업 경력자 쯤 될 때 해볼만 할 것 같다.</del>
** 시스템 프로그래밍<ref>컴퓨터를 구성하는 하드웨어 및 이를 제어하는 OS와 드라이버를 다루는 프로그래밍</ref>을 하고 싶다. → C/C++<ref>위에서 서술되었듯이 성능과 기능을 최우선으로 하는 언어이다. 이 때문에 태생부터 효율적인 시스템 자원(메모리 등) 관리에 사용되었고 현재까지도 사용<del>노인학대</del>되고 있다.</ref>를 추천한다. 여기에 [[어셈블리어]]도 수준급으로 다룬다면 금상첨화. <del>물론 이쯤 되면 취미의 영역을 벗어나 코딩덕후 or 현업 경력자 쯤 될 때 해볼만 할 것 같다.</del>
** 해킹(...)을 하고 싶다 → <del>하지마라</del> 무슨 해킹을 하고 싶은지에 따라 분야는 다르지만, 거의 대부분 해킹하면 생각하는 수준이 남의 네이버 아이디 훔치는 정도…일테니, 간단히 설명하자면 위의 웹페이지 만들기, 소켓 프로그래밍, 윈도우즈 응용프로그램… 등등을 정말정말 열심히 공부하면 된다.<ref>농담이 아니라 실제 현실의 해킹은 프로그램/홈페이지 상의 취약점을 찾아서 공격하는 것이 거의 대부분이기 때문에, 이것들을 열심히 수련하여 코드 상의 취약점을 찾아내어 공격하면 된다.</ref>
** 해킹(...)을 하고 싶다 → <del>하지마라</del> 무슨 해킹을 하고 싶은지에 따라 분야는 다르지만, 거의 대부분 해킹하면 생각하는 수준이 남의 네이버 아이디 훔치는 정도…일테니, 간단히 설명하자면 위의 웹페이지 만들기, 소켓 프로그래밍, 윈도우즈 응용프로그램… 등등을 정말정말 열심히 공부하면 된다.<ref>농담이 아니라 실제 현실의 해킹은 프로그램/홈페이지 상의 취약점을 찾아서 공격하는 것이 거의 대부분이기 때문에, 이것들을 열심히 수련하여 코드 상의 취약점을 찾아내어 공격하면 된다.</ref>


62번째 줄: 98번째 줄:
*** "언어 질문" 형식으로 작성한다
*** "언어 질문" 형식으로 작성한다
*** 예시
*** 예시
*** C++ 파일 입출력
**** C++ 파일 입출력
*** C# 파일 입출력
**** C# 파일 입출력
*** Python 파일 입출력
**** Python 파일 입출력
*** C++ Json
**** C++ Json
*** C++ how to 샬라샬라 (C++ How to data save load)
**** C++ how to 샬라샬라 (C++ How to data save load)
* '''다른 사람의 소스코드를 많이 본다.'''
* '''다른 사람의 소스코드를 많이 본다.'''
** [https://github.com/ GitHub]라는 사이트에서 다른 사람들이 작성한 다양한 코드를 확인할 수 있다.
** [https://github.com/ GitHub]라는 사이트에서 다른 사람들이 작성한 다양한 코드를 확인할 수 있다.
73번째 줄: 109번째 줄:
*** 벡터 그래픽 프로그램을 만들고 싶으면 GitHub에서 Inkscape 소스를 받아 공부한다.
*** 벡터 그래픽 프로그램을 만들고 싶으면 GitHub에서 Inkscape 소스를 받아 공부한다.
* 커뮤니티에 가입한다. 종종 좋은 정보를 올려주시는 분들이 있다.
* 커뮤니티에 가입한다. 종종 좋은 정보를 올려주시는 분들이 있다.
* 좋은 커뮤니티 목록
** {{마이너 갤러리|github|깃허브 갤러리}}
** {{아카라이브 채널|programmer|코딩 채널}}
* 커뮤니티에 질문을 한다.
* 커뮤니티에 질문을 한다.
** 질문 가이드
** 질문 가이드
86번째 줄: 125번째 줄:
*** 답만 쏙 얻고 질문글을 삭제하지 말자.
*** 답만 쏙 얻고 질문글을 삭제하지 말자.


== 파이썬에 대한 소개 ==
== 기본적 프로그래밍 테크닉 ==
일단 [[Python]]은 타 프로그래밍과 다르게 '''문법상 예외'''라는 게 없다. <s>[[베이직]]보다도 깐깐하다</s>
그 때문에, 파이썬에서 만약 에러가 나온다면 그 부분은 대부분 예외적인 사항을 임의적으로 썼다는 이야기다. 흔히 예외가 적용되는 건 중간에 탭을 쓰느냐 스페이스 네번을 누르냐 정도고<ref>다행히도 IDLE에서는 탭 눌러도 알아서 스페이스 4개로 입력한다.</ref><s>그게 그거잖아</s> <s>게다가 섞어쓰면 안 된다</s>, 나머지는 몽땅 예외가 없다고 생각을 하면 되게 만들어져 있는 만큼, 알 수 없는 에러가 뜬다고 좌절하지 말자. 그냥 오타난거라고 생각하면 된다.
 
그러니까 제대로된 [[Python]]교본만 준비되어 있으면 타 프로그래밍보다 훨씬 빠른 속도로 익힐수가 있다. 분명 어딘가 안되면 오타가 난거고, 구사한 표현법이 오타가 난 것이다. <s>그 때문에 일주일정도만 노력하면 [[매크로]]를 만들수 있다. 진짜다!!</s>
<!-- -->
 
== 준비 ==
=== 다운로드 ===
* 윈도우의 경우
:[https://www.python.org/ftp/python/3.4.3/python-3.4.3.msi 다운로드(32비트)]
:[https://www.python.org/ftp/python/3.4.3/python-3.4.3.amd64.msi 다운로드(64비트)]
:(32비트/64비트 중 어느 것인지 모르거나 이해하지 못한 경우 32비트 버전을 받으시면 됩니다.)
* 대부분의 리눅스의 경우
:패키지 관리자로 python 혹은 python3를 설치합니다.
** 패키지 관리자가 없는 경우
::{{--|지못미}} [https://www.python.org/ftp/python/3.4.3/Python-3.4.3.tgz 다운로드]해서 직접 소스를 컴파일 하면 된다.
* OS X의 경우
:[https://www.python.org/ftp/python/3.4.3/python-3.4.3-macosx10.6.pkg 3.4다운로드]
:2.7은 기본으로 설치되어 있습니다.
위의 링크는 Python 3.4버전을 다운로드 받습니다.
 
Python은 크게 Python 2.x버전과 Python 3.x버전으로 나뉜다. 두 버전은 세세한 문법에서 차이를 보이며, 이로 인해 Python 2.x의 코드를 3.x에서 그대로 사용하는 것은 불가능하다. 이렇게 된 이유는 [[Python]] 항목의 내용을 참고하자.
 
Python 3.x버전의 출시 초기에는 기존에 만들어진 자료와의 호환성 문제 등으로 인해 Python 2.x버전을 계속 사용하는 경향이 있었으나 Python 3.x의 호환성 문제 등이 개선되면서 굳이 추가적인 기능추가가 중단된 Python 2.x를 배워야 할 이유는 낮아졌다.
 
만약 아래의 강좌가 아닌 다른 강좌로 Python을 배울 계획이라면 해당 강좌에서 사용하는 Python의 버전을 확인해야 한다. Python 3.x버전을 깐 상태에서 2.x시절의 코드를 그대로 넣으면 깔끔하게 에러가 나기 때문이다. 2.x의 경우 3.x버전의 문법을 사용가능한지의 여부는 어느 버전이냐에 따라서 다른데 2.7의 경우는 2와 3의 연결다리를 목적으로 하는 버전으로 3문법과 2문법이 같이 사용 가능하지만, 그 이전 버전의 경우 3과의 문법 차이를 처리하지 못해 에러가 발생한다. 이왕이면 새로 배울거 Python 3.x버전으로 배우자.


=== 실행 ===
=== 사전 처리 ===
* 윈도우 환경(또는 GUI 환경)인 경우
[[Java]] 같은 일부 프로그래밍 언어들은 null 클래스를 정의하는 등 사전처리를 해야 합니다. 예를 들면 Java에서 Hello, World!를 출력하는 문구는 다음과 같습니다.
<syntaxhighlight lang="java">
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}
</syntaxhighlight>
그 다음에 파일명은 클래스명인 HelloWorld.java로 저장해야 합니다. 그 다음에 자바 프로그램이 저장된 디렉토리에서 <code>javac HelloWorld.java</code>를 입력해서 컴파일링을 하고, 컴파일링이 끝난 뒤에야 <code>java HelloWorld</code>를 입력해서 실행시킬 수 있습니다.


IDLE (Python 3.4 GUI)을 실행시킵니다.
[[파이썬]]이나 [[Ruby]], [[PHP]] 같은 인터프리터 언어들이 배우기 쉬운 이유 중 하나가 바로 저런 사전처리를 안 해도 되기 때문이죠.


* 리눅스 shell 창 또는 윈도우 cmd 창에서 실행할 경우
=== 출력 ===
일부 예외적인 경우를 제외하면 프로그래밍 언어를 배울 때 메시지를 출력하는 방법부터 배웁니다. 가장 대표적인 문장인 [[Hello, World!]]를 출력할 때 프로그래밍 언어별로 출력하는 함수 또는 키워드를 파악하는 것이 도움이 됩니다. 


python 또는 python3를 입력한 후 엔터(환경변수 또는 설정에 따라 다릅니다. 특히 리눅스 -Ubuntu 등- 의 경우 2.x 버전과 3.x 버전이 같이 깔려 있는데 이 때 python은 2.x, python3는 3.x 버전을 실행시키는 경우가 대부분입니다)
예를 들면 [[파이썬]]은 다음과 같이 출력합니다.  
 
<syntaxhighlight lang="python">
그후에 아래에 나와 있는 코드를 한줄 한줄 입력하면 코드가 실행됩니다!
 
=== {{--|왜 이걸 안하냐 했죠?}} Hello, World! ===
Hello World는 프로그래밍에서 처음으로 배우는 기본적인 프로그래밍입니다.
그러나, 파이썬의 헬로월드 프로그램은 [[쉽게 배우는 프로그래밍 입문]] 시리즈 중 가장 짧고 이해하기 쉽습니다. {{--|도발}} {{--|파이썬 2를 배우는 사람은 어떡하라고?!}}
<source lang="python">
print("Hello, World!")
print("Hello, World!")
</source>
</syntaxhighlight>
==== 예제 ====
1. Hello, World! 대신 다른 글을 써보세요. (예: 리디버그 리디버그)
 
2. 쌍따옴표나 괄호 중 하나를 빼 보고, 무슨 에러가 나는지 확인하세요.
 
3.print대신 다른 글자를 써 보고, 무슨 에러가 나는지 확인하세요.
 
==== 실제 실행 ====
[[파일:py_hello_world.gif]]
 
 
단 한줄이면 됩니다. [[밥 로스|참 쉽죠?]]
 
=== 주석 ===
주석은 코드에 대해 부연설명이 필요할 때 쓰입니다. 생각보다 아주 중요한 녀석입니다. 당신이 컴퓨터나 [[데니스 리치]]가 아닌 이상 프로그램 소스를 읽자마자 "이 프로그램은 검색 결과를 그래프로 작성해주네!" 라고 생각하는 경우는 없기 때문에, "이 부분에서는 검색 결과를 불러옴." 같은 부연설명을 써놓지 않으면 알아보기 힘듭니다. 혼자 작성하는 프로그램이라도, 주석을 달아 놓지 않으면 나중에 알아 보기 힘들기 때문에 최소한의 주석은 꼭 달아 놓으세요!
 
파이썬에서는 2 가지 종류의 주석이 있습니다. 먼저 "#"는 뒤에 문자들을 전부 다 주석으로 처리합니다. (명령어로 보지 않습니다.) 대신 엔터가 나오면 무력화 됩니다.
 
예시:
<source lang="python">
print ("asdf")#asdf를 프린트합니다.
print ("asdf")#한번 더 asdf를 프린트합니다.
#print ("asd") 뭔가 복구가 필요해요.
#print (asdf) 뭔가 안 어울려요.
print ("asdf"#이거슨 asdf입니다.)
 
)#다음 줄에서 괄호를 닫아요.
</source>
결과: 마지막 부분에 적힌 괄호가 주석처리 되어 닫히지 않았기 때문에 괄호를 닫을 때까지 인터프리트가 실행하지 않고 계속 입력을 기다립니다.
<pre>
asdf
asdf
asdf
</pre>
 
처럼 정상적으로 출력되는 것을 볼 수 있습니다.
 
그 다음 주석인 <nowiki>'''</nowiki>는<ref>작은 따옴표 세개, 위키텍스트에서 글자를 굵게 하는 문법과 동일합니다.</ref> 저 따옴표 안에 있는 것 모두를 주석처리 합니다. 큰 따옴표 세개도 괜찮습니다. 대신, 큰 따옴표로 시작했으면 큰 따옴표로 끝나야겠죠. 따옴표 사이에 엔터가 있어도 상관없습니다.
 
예시:
<source lang="python">
'''print ("asd") 뭔가 복구가 필요해요.
print (asdf) 뭔가 안 어울려요. '''
</source>
결과:
<pre>'print ("asd") 뭔가 복구가 필요해요.\nprint (asdf) 뭔가 안 어울려요. '</pre>
 
인터프리트 모드에서 실행하면 뭔가 이상합니다. 그건 스트링을 알아야 합니다. 지금은 조금 레벨이 높은 몬스터니 넘어갑시다.
==== 실제 실행 ====
[[파일:Py_gif_lecture_2.gif]]
 
{{--|우리들 중에 [[C|스파이]]가 있는 것 같아. printf를 보았다면 당신은 스파이}}
 
=== 변수 ===
일상에서 일이나 공부를 할 때 어떤 정보를 기록하거나 머리에 암기하는 경우가 있습니다.
 
이와 마찬가지로 프로그램을 만들다 보면 항상 값(혹은 데이터)를 어딘가에 저장해놔야 할 상황이 옵니다. 프로그래밍을 할 때, 이러한 값을 저장할 수 있는 공간을 '''변수'''(variable)이라고 합니다.
==== 변수의 선언 ====
<source lang="python">
variable = 29
변수 = 84
</source>
앞에 이것저것 붙일 필요 없이 그냥 (변수명) = (값)을 입력해주면 됩니다. 게다가 Python 3부터 유니코드를 지원하기 때문에 변수명을 한글로 할 수 있으니, 후환(?)<ref>쳐야 하는 글자 수가 몇자 늘어난다는 이유로 이름(변수명)을 a 같은 걸로 지어놓고 작성하다 보면 천재의 노트나 여자의 마음보다 어려운 소스가 되니 주의하세요!</ref>을 막기 위해 읽기 쉬운 이름으로 해 주세요!
 
[[파일:Py_gif_lecture_3.gif]]


=== 자료형 ===
=== 자료형 ===
자료형이란 프로그램에서 사용하는 자료를 효율적으로 그리고 쉽게 사용하고 저장하기 위해서 만들어 졌습니다.
프로그래밍 언어에서 사용하는 요소는 숫자, 문자열, 배열(Array 혹은 List), 연관배열(Associated Array), 함수(function), 클래스(class), 모듈(Module), 패키지(Package) 등이 존재합니다. 각 프로그래밍 언어마다 사용하는 자료형은 매우 다르지만 대체로 다음과 같은 자료형을 포함하고 있습니다. 이것도 언어별로 좀 다른데 C언어 같은 경우 각 변수의 자료형을 강제로 지정해야 하지만 파이썬 같은 언어들은 자료형을 강제로 지정하지 않아도 됩니다.
파이썬에서는 다양한 데이터를 효율적으로 저장하기 위하여 다음과 같은 자료형을 지원합니다.
 
===== 수(number)형 =====
:말 그대로 수를 나타내는 변수형입니다. 3, 3.14같은 수를 저장하기 위한 자료형입니다.<!-- 수는 두가지 종류가 있습니다. int와 float입니다. int는 정수이고, float는 소수점이 있는 수입니다.--> 어찌되었건 컴퓨터도 계산기고 덧셈 뺄셈 등등이 가능합니다.
 
<source lang="python">
print (1 + 1)
print (1.2 + 3.4, 3 + 2.4)# 콤마로 구분하면 사이에 공백이 하나 생깁니다.
print (321 - 123, 3.14 - 2.71)
print (123 * 234, 1.2 * 3.2)
print (48/5, 48.0/5.0)
print (3**123, 3.0**123)# ** 연산은 제곱을 뜻합니다.
print (48//5, 48.0//5.0)# //는 몫연산
print (9 % 4, 10 % 3.4)# %는 나머지
print (3**0.5)#루트3
</source>
 
결과:
2<del>귀요미가 나오길 기대했다면 죄송합니다. 귀요미는 레벨이 좀 차면 하죠!</del>
4.6 5.4
198 0.43000000000000016<del>으아아</del>
28782 3.84
9.6 9.6
48519278097689642681155855396759336072749841943521979872827 4.851927809768964e+58
9 9.0
1 3.2
1.7320508075688772
 
나눗셈을 제외한 모든 연산(덧셈, 뺄셈, 곱셈, 몫, 나머지)의 경우, 앞뒤의 수가 모두 정수라면 결과도 정수로 나옵니다. 둘 중 하나라도 소수점이면 결과는 소수점입니다. 단, 예외적으로 나눗셈에서는 앞뒤 모두 정수라 해도 결과는 소수점입니다.<!-- 이것도 파이썬3의 특징으로 대부분의 다른 언어의 경우에는 9.6이 아닌 9가 나옵니다.--> 또한 가끔 소수점이 불필요하게 많이 나오는 경우가 있는데, 이건 컴퓨터가 2진법을 사용하는데 10진법에선 유한소수여도 2진법에선 무한소수일 수 있어 정확한 값을 저장하지 못하기 때문입니다. 1/5는 10진법으로 0.2로 깔금하게 쓸 수 있는 반면, 1/3은 0.3333으로만 나타내면 오차가 생기는 것과 같은 원리입니다.
 
 
[[파일:py_gif_lecture_4.gif]]
 
 
보너스
<source lang="python">
1/0
</source>


결과:
예를 들면 C++에서는 다음과 같이 변수를 정수형으로 정의하면 변수명에 다음처럼 문자열을 집어넣을 수 없습니다.
Traceback (most recent call last):
<syntaxhighlight lang="cpp">
    File "<stdin>", line 1, in <module>
#include <iostream>
ZeroDivisionError: [[0으로 나누기#프로그래밍 언어의 처리|division by zero]]
int main()
{
    int x = 4;
    x = 'num'; /* 이렇게 정의하면 오류가 납니다 */
    std::cout<<x<<std::endl;
    return 0
}
</syntaxhighlight>
하지만 파이썬처럼 타입을 엄격하게 따지지 않는 언어들은 다음처럼 숫자를 대입한 후에 다시 문자열로 대입하는 것도 가능하다는 거죠.
<syntaxhighlight lang="python">
x = 4
x = 'num'
print(x) #num이 출력되며, 아무 오류도 안 납니다.
</syntaxhighlight>


사실 위의 결과를 한글로 해석하면, "첫 줄에서 0으로 나누라고 시켰는데, 나는 0으로 나눌 수가 없다" 입니다. 생각보다는 쉽죠?


===== 문자열(String)형 =====
* 변수 - 일반적으로 알파벳으로 시작하며, 특정한 의미를 가진 문자열로 표현됩니다. PHP 같은 언어는 변수라는 것을 명시하기 위해 반드시 앞에 $표시를 붙여야 하기도 하는 등 제약조건이 있는 언어들도 있습니다. 변수는 일반적으로 그 자체가 값이 정해진 것이 아니고, 숫자나 문자열, 배열 등의 값을 받아들여서 값이 변할 수 있습니다. 
:문자열이란 문자(A,B,C,,,다등등등)이 일렬로 있는 자료를 저장하기 위한 자료형입니다. 간단하게 말하자면,''을 저장하는 자료형입니다.
* 불리언 - 참/거짓을 나타내는 자료형입니다. True, False 중 하나로 표현이 가능합니다.
:문자열은 다음과 같이 변수에 넣을 수 있습니다.
* 숫자 - Lua 같은 언어를 제외하면 보통 정수형과 부동소숫점이 있는 실수형 숫자를 구별하고 있습니다. 이 숫자를 문자열과 구별하는 이유 중 하나가 숫자는 연산자를 이용해서 쉽게 계산할 수 있어야 하기 때문입니다.
<source lang="python">
* 문자열 - 말 그대로 특정한 의미를 가진 문자들의 집합입니다. 문자열은 대부분의 프로그래밍 언어에서 ""(큰따옴표)로 둘러싸인 형태로 표현됩니다. 문자열은 값이 변할 수 있는 변수와는 달리 그 자체가 값(value)입니다. 이것이 무슨 의미인지 아래 파이썬 예제를 통해 설명하겠습니다.
문자열_변수  = "abcde"
<syntaxhighlight lang="python">
</source>
var = 4 #var이라는 변수는 숫자 4라는 값을 가집니다.
:또한 문자열 끼리는 서로 비교가 가능하고 덧셈도 가능합니다. 숫자를 곱할 수도 있습니다.
print(var) #4가 출력됩니다.
print("var") #var이라는 문자열이 출력됩니다.
</syntaxhighlight>
* 배열 (Array) 또는 리스트(list) - 숫자, 혹은 문자열, 다른 배열들을 여러 개 모은 모음입니다. 많은 인터프리터 언어에서는 <code>arr = [ (원소0), (원소1), ... ]</code> 형태로 서술됩니다. 각 원소를 불러오는 방법으로 <code>arr[n]</code>, 여기서 n은 배열에서 위치의 정수값(보통 0부터 시작)이죠. 파이썬을 예로 들면 다음과 같이 arr[(숫자)] 형태로 리스트 안에 원소를 호출할 수 있습니다.
<syntaxhighlight lang="python">
arr = [0, 4.5, '3', 'str'] #길이 4짜리.
# arr은 0부터 인덱싱이 시작.
print( arr[0], arr[1], arr[3] ) # 0 4.5 str 이 출력.  
</syntaxhighlight>
* 연관배열 (Associated Array) - 일반적인 배열과는 달리 키값이 0부터 시작하는 숫자가 아닌 특정한 숫자나 문자열로 인덱스가 정의된 배열을 의미합니다. PHP 같은 언어는 배열이 연관배열의 특수한 경우로 간주되지만, 파이썬 같은 경우는 연관배열과 유사한 형태의 딕셔너리(dictionary)는 리스트와 다른 것으로 간주됩니다.  
PHP 예시
<syntaxhighlight lang="php">
$city = array("Seoul"=>1, "Busan"=>2, "Daegu"=>3);
echo $city["Seoul"]; // 1이 출력된다.
</syntaxhighlight>
파이썬 딕셔너리 예시
<syntaxhighlight lang="python">
city = {'Seoul':1, 'Busan':2, 'Daegu':3 }
print(city['Seoul']) # 1이 출력된다.
</syntaxhighlight>
* 함수(function) - 입력값을 받아서 출력하는 일종의 객체입니다. 자세한 것은 조금 있다가 설명하겠습니다.


<source lang="python">
=== 변수의 값 할당 ===
print ( "pypy" < "python" )
일반적으로 등호 '='를 프로그래밍 언어에서는 값을 배정할 때 사용합니다. 예를 들면 <code>a = 4</code>라는 문구는 변수 a에 값 4를 배정한다는 뜻입니다. 오른쪽에 정의된 값을 왼쪽 변수에 값으로 지정한다는 의미로 사용되죠. 거의 대부분의 프로그래밍 언어에서 등호 하나는 같다는 것이 아닌 값을 집어넣는다는 의미로 사용합니다. 같다는 것을 확인하는 여부는 보통 등호 2개를 사용해서 <code>a == b</code>라고 표현하죠. 이것은 a와 b가 같으면 참을, 다르면 거짓이 된다는 것을 의미합니다.
print ( "python" + " 참 쉽죠?" )
print ( "py" * 2)
</source>
결과 :
True
python 참 쉽죠?
pypy


[[파일:Py_gif_lecture_5.gif]]
많은 프로그래밍 언어에서 <code>x +=1</code>는 <code>x =x+1</code>로 통용됩니다. 즉 (연산자)+'='이 결합되면 왼쪽에 정의된 변수를 오른쪽 숫자의 연산자만큼 바꿔준다는 뜻이죠. 또한 파이썬 같은 언어를 제외하고 x++, y-- 같은 기호가 있는데, 이건 각각 1씩 더하거나, 1씩 빼준다는 것을 의미합니다.


쉽게 생각하려면<code>a = b</code>는 a는 b다. <code>a == b</code>는 a와 b는 같다라고 생각하면 된다.


True는 참을 뜻하는 진위형으로 조금 있으면 나옵니다.
=== 연산 ===
거의 모든 프로그래밍 언어는 숫자의 산술 연산자를 사용할 수 있습니다. 예를 들면 2+3 이라고 입력하면 5를 출력하는 방식으로요. 덧셈 기호는 +, 뺄셈 기호는 -, 곱셈 기호는 *, 나눗셈 기호는 /를 사용하죠.  


===== 리스트(List)형 =====
==== 비교 연산 ====
<!-- 결과좀요. 나참. 파이썬을 기준으로 삼으면 파이썬은 제대로 알려줘야 하는 거 아냐... 그래도 자쓰가리우키위든만가리우도 있듯이 힘내서 해 봅시다. -->
두 변수, 혹은 변수와 숫자를 비교할 때 사용합니다. 이 때 등호 '==', 부등호 '<. >', 크거나 같다/작거나 같다를 의미하는 '>=, <=', 같지 않다는 것을 의미하는 '!='(언어에 따라 '~=') 같은 기호를 사용하죠. 보통 <code>a > 3</code>라는 것은 a가 3보다 크다는 의미로, 이 비교 연산자를 포함하는 식 자체가 참/거짓을 판별할 수 있는 일종의 "명제"(Proposition)처럼 간주됩니다. print문을 이용해서 출력을 하면 문장의 참/거짓에 걸맞게 True나 False 중 하나가 출력됩니다.
일상생활을 보다보면 많은 정보를 어딘가에 적어놔야 할 때나, 순서를 붙여서 무엇인가를 기록해야 할 때가 있습니다. 프로그램을 만들 때도 이와 같이 많은 정보를 저장하거나, 순서를 붙여서 정보를 저장해야 할 때가 자주 있습니다.


파이썬에서는 이와 같은 때를 위해서 '''리스트'''(List)라는 자료형이 있습니다.
비교 연산자중에서는 삼항연산자라는 것도 있습니다. <code>(조건)?(참일 때 결과):(거짓일 때 결과)</code> 이런 식으로 표현하는 거죠.
<source lang="python">
a = ['리브레', '위키', '프로그래밍', '입문', 4]
b = []
c = list()
</source>
list() 명령어는 빈 리스트를 만들 때 사용합니다.


특정 위치에 들어 있는 값을 불러오려면 index라는 앞에서부터 세는 순서로 지정해주면 됩니다. 예를 들어 위의 예에서 2번째 값인 '위키'를 불러오려면 아래와 같이 적으면 됩니다.
==== 논리 연산 ====
둘 다 참일 때만 참으로 정의하는 '&&'(and)나 둘 중 하나만 참일 때 참으로 정의하는 '||'(or), 참/거짓 여부를 뒤집는 '!'(not, 또는 ~)같은 연산자입니다. 모든 조건이 참일 때 실행시키기 위해서는 논리곱 연산자인 &&으로, 어느 조건 중 하나라도 참일 때 실행시키기 위해서는 논리합 연산자인 ||을 이용하는 식이지요.  


<source lang="python">
보통 논리 연산자는 아래의 분기문을 실행시킬 분기문의 조건 부분에서 많이 사용됩니다.
a[1]
</source>
 
두번째 값을 불러오는데 왜 인덱스가 1인가 하면 프로그래밍 언어에서는 일반적으로 모든 숫자가 1이 아닌 0에서 시작하기 때문.
 
뒤에서부터 세서 가져오는 방법도 있습니다. 뒤에서 2번째인 '입문' 을 가져오려면 a[3] -앞에서 4번째-로 가져올 수도 있지만 a[-2]로 하여 뒤에서 두번째를 가져오라는 명령을 통해서도 가져올 수도 있습니다.
 
왜 뒤에서부터 할 땐 0부터 시작하지 않느냐 물어볼 수도 있는데 이는 0은 음수가 아니라는 기본적인 수학지식으로 대답할 수 있을 듯 합니다.
====== 리스트와 리스트끼리 더하기 ======
리스트와 리스트끼리는 서로 합칠 수가 있습니다.
<source lang="python">
a = ['리브레', '위키', '프로그래밍', '입문', 4]
b = [5,6,7]
c = a + b
print(c)
</source>
====== 리스트에서 n번째 것을 뺴기======
리스트에서 n번째 것을 빼려면 다음과 같이 합니다
<source lang="python">
a = ['리브레', '위키', '프로그래밍', '입문', 4]
print(a)
del a[2]
print(a)
</source>
여러 개를 빼려면 다음과 같습니다
<source lang="python">
a = ['리브레', '위키', '프로그래밍', '입문', 4]
print(a)
del a[2:4]
print(a)
</source>
다음과 같이 하면 2부터 3까지 제거를 합니다.
 
여기서 a[2:4]가 궁금한 분들께 설명하자면, "a에서 2 부터 시작해서 4 앞까지"라는 뜻입니다.
 
====== 리스트의 마지막에 추가하기 ======
마지막에 추가하는 방법은 다음과 같습니다.
<source lang="python">
a = ['리브레', '위키', '프로그래밍', '입문', 4]
a.append("파이썬")
print(a)
</source>
====== 리스트의 사이에 추가하기 ======
<source lang="python">
a = ['리브레',  '프로그래밍', '입문', 4]
a.insert(1,"위키")
print(a)
</source>
 
===== 튜플(tuple)형 =====
리스트형과 거의 비슷합니다. 인덱스 -순서- 가 있고, 온갖 자료형을 다 넣을 수 있습니다.
 
단, 입력된 값은 추후 변경이 불가능합니다. 즉, 리스트의 경우
 
<source lang="python">
a = [2,4,7]
a[1] = 5
</source>
 
라고 입력하면
 
a = [2,5,7]
 
로 변경되나 튜플은
 
<source lang="python">
a = (2,4,7)
a[1] = 5
</source>
 
라고 하면 TypeError만 뿜어내고 값은 그대로 (2, 4, 7)로 유지됩니다.
 
튜플은 다른 함수의 argument로도 사용할 수 있습니다.
<source lang="python">
def add(a, b):
    return a+b;
 
num = (1, 2)
add(*num)
</source>
 
===== 사전(Dictionary)형 =====
사전형은 리브레 위키를 생각하시면 됩니다. 리브레 위키에서 검색어로 '리브레 위키'라고 검색을 하면, 바로 리브레 위키항목에 있는 리브레 위키의 설명으로 갑니다.
<source lang="python">
dic = {"key1":"value1", "key2":1, "key3":[1,"1", 1.0], "key4":1.0, "key5":{"a":1, "b":"C"}}
dict_empty = dict()
</source>
이와같이 사전(Dictionary)형은 특정한 값을 이용하여 자료를 저장합니다. 이때, 검색하는 자료를 키(key)라고 하고, 자료는 값(value)라고 합니다. 값을 가져오고 싶을 때에는 리스트처럼 대괄호 안에 키를 적으면 됩니다. 대신에 키에는 숫자 뿐 아니라 다양한 값을 적을 수 있습니다.
 
이때 키(key)는 스트링이나 튜플처럼 변경 불가한(immutable) 자료를 상대로만 설정이 가능하고, 값(Value)은 튜플이든, 리스트든 뭐든 가능합니다.
 
사전은 자기 마음대로 항목을 늘리고, 추가하고, 불러내고, 이름 붙이기 까지 할 수 있어서 차후 매우 유용합니다.
 
사전형의 키나 값을 얻을려면 .values나 .key 메소드(method)를 사용하시면 됩니다
<source lang="python">
print (dict_empty)
print (dic["key1"])
print (dic["key3"])
print (dic["key3"][1])
print (dic["key5"]["a"])
</source>
결과:
{}
value1
[1, '1', 1.0]
1
1
 
===== 진위(Boolean)형 =====
Boolean형은 가장 기초적인 타입으로 "참", "거짓"의 두 가지 값만을 가집니다.
주의할 점은 다름 많은 언어와는 다르게 대문자로 시작합니다.
<source lang="python">
True
False
 
a = True
b = 1 > 0 #True
</source>
 
파이썬에서는 진위판단을 할 때 많은 방법으로 할 수 있습니다.
<source lang="python">
#다음은 모두 참입니다.
True
1
3.14
{"a":1}
["a"]
"a"
("a",1)
 
#다음은 모두 거짓입니다.
False
0
0.0
{}
[]
""
()
None
</source>
 
=== 출력하기 / 입력받기 ===
출력을 할 때는 print()를 사용합니다
<source lang="python">
print("파이썬 만세!")
</source>
입력받을 때는 input()을 사용합니다. 다만, 입력받는 것은 문자열(뭔지 모르신다면 조금 아래에서 설명해드릴께요!)을 입력받으니까 다른 것으로 형변환(이것도!)을 해야 합니다.
* 수를 입력받을 때
<source lang="python">
a = int(input())
</source>
 
=== 조건문 ===
조건문이랑 어떤 조건에 따라서 수행하고자 하는 행동을 하는 문장(코드)를 말합니다.
조건문의 경우, 수행하고 싶은 문장을 if문의 깊이 보다 한단계 더 넣어줘야 합니다.
===== 기본 if문 =====
[[파일:조건문_기본.gif|300픽셀]]
<source lang="python">
if 조건 :
    조건문 안쪽 명령
    ....
  #조건문 안쪽 명령 끝
조건문 다음 명령
...
 
예시:
i = 3
if i > 0:
    print(i)
    i = i + 1
print(i)
 
결과:
3
4
</source>
 
==== if-else문 ====
조건이 맞지 않을 때 실행해야 하나, 조건이 맞으면 실행하면 안 되는 문장이 있을 때 씁니다.
[[파일:조건문 if - else.gif|300픽셀]]
 
<source lang="python">
if 조건 :
    if문 명령
    ....
#if문 명령 끝
else:
  else문 명령
#else문 명령 끝
조건문 다음 명령
...
</source>
===== if 문의 쉬운 예 =====
"배고프면 먹고, 아니면 잔다" 를 파이썬 비슷하게 쓴다고 생각하면
<source lang="python">
if 배고프다:
    먹는다
else:
    침대에 간다
    잔다
</source>
이겠지요.(우리 이렇게 살면 안됩니다!)
 
==== elif ====
elif는 파이썬에 있는 독특한 조건문입니다. else if의 준말입니다.
<source lang="python">
print("성적을 입력해 주세요")
num = int(input())
if num > 95 :
    print("A+입니다")
elif num > 90:
    print("A입니다")
elif num > 80:
    print("B+입니다")
elif num > 70:
    print("B입니다")
elif num > 60:
    print("C+입니다")
else:
    print("그냥 재수강하세요")
</source>
 
프로그램 실행 과정:
# 성적이 95보다 높은지 확인합니다. 높다면, "A+입니다" 가 출력되고 if문이 끝납니다.
# 성적이 95보다 높지 않을 때, 성적이 90보다 높은지 확인합니다. 높다면, "A입니다" 가 출력되고 if문이 끝납니다.
# 성적이 90보다 높지 않을 때, 성적이 80보다 높은지 확인합니다. 높다면, "B+입니다" 가 출력되고 if문이 끝납니다.
# 성적이 80보다 높지 않을 때, 성적이 70보다 높은지 확인합니다. 높다면, "B입니다" 가 출력되고 if문이 끝납니다.
# 성적이 70보다 높지 않을 , 성적이 60보다 높은지 확인합니다. 높다면, "C+입니다" 가 출력되고 if문이 끝납니다.
# 안끝나면, "그냥 재수강하세요"가 출력됩니다.
 
여기서 주의할 점은 if문이 끝나면 그 다음 것들은 확인하지 않는다는 것입니다. 만약 성적이 93이라면 1번과정의 95보다 높은지 확인하고, 2번과정의 90보다 큰지 확인한 뒤 93은 90보다 크므로 if문이 끝나기 때문에 나머지는 확인하지 않습니다.
 
=== 반복문 ===
반복문은 일정한 명령을 반복적으로 수행할 필요가 있을 때 사용합니다.
 
파이썬에는 while, for의 두 가지 종류의 반복문이 있습니다.
 
==== while 문 ====
while 문은 if 문과 유사한데요, 차이점은 if 문은 한번 확인하고 한번 실행하는 반면, while 문은 '''조건문이 "거짓"이 될 때까지 확인하고 실행한다는 점'''입니다.
 
<source lang="python">
while 조건 :
    while 문 명령
반복문 다음 명령
 
 
예시:
i = 0
while i < 5:
    print (i)
    i += 1 # i = i + 1
print ("done!")
 
결과:
0
1
2
3
4
done!
</source>
===== while 문의 쉬운 예 =====
못을 박는 동작을 "박힐 때까지 망치질한다"라고 생각하면
<source lang="python">
못을 든다
망치를 든다
while 못이 박히지 않았다:
    망치를 휘두른다
</source>
이겠지요.<s>망치를 손에 휘둘렀을 경우의 예외 처리는 하지 않았습니다.</s>
 
==== for 문 ====
for 문은 리스트와 같은 데이터의 집합에 있는 데이터들을 한번씩 건드려볼 필요가 있을 때 사용합니다. 이건 파이썬의 특징 중 하나라 볼 수 있습니다. 이런 형태의 for문은 "foreach문" 혹은 "반복자 기반 for문(iteration based for loop)" 이라고 부릅니다.
 
<source lang="python">
for 데이터 변수 이름(새로운 이름) in 데이터 집합 변수 이름(기존 이름):
    foreach 문 명령
반복문 다음 명령
</source>
 
예시1:
<source lang="python">
for i in range(1, 7): #1~6까지 반복하는 for문은 다음과 같습니다.
    print (str(i) + " 더하기 " + str(i) + "은(는) 귀요미")
</source>
 
결과1{{--|보지 않아도 알것 같지만 그래도 보자}}:
1 더하기 1은(는) 귀요미
2 더하기 2은(는) 귀요미
3 더하기 3은(는) 귀요미
4 더하기 4은(는) 귀요미
5 더하기 5은(는) 귀요미
6 더하기 6은(는) 귀요미
 
그리고 문자열의 경우 문자열에 있는 글자 하나 하나를 불러올때 사용할 수도 있습니다.
 
예시2:
<source lang="python">
a = "리브레위키"
for character in a:
    print (character)
print(a)
</source>
 
결과2:
리브레위키


=== 함수 ===
=== 함수 ===
프로그래밍을 , 특정한 일을 여러번 필요성을 느낄 때가 있습니다. 그 때 사용하는 게 함수입니다.
프포그래밍의 핵심적인 요소 중 하나가 바로 함수(函數, function)의 활용입니다. 가장 쉬운 것은 비슷한 작업을 명령어 하나로 줄여줄 수 있다는 이점이 있다는 거죠. 예를 들면 1부터 100까지 홀수인지 짝수인지 출력을 하고 싶으면 "1은 홀수입니다", "2는 짝수입니다" 이런 식으로 출력을 수도 있지만 함수를 이용해서 숫자를 입력하면 짝수입니다, 홀수입니다를 출력할 수 있게 수 있다는 거죠. 자바스크립트와 파이썬으로 구현된 예제를 통해서 확인해보겠습니다.
파이썬은 함수를 '''변수의 일종'''으로 봅니다. 그렇기 때문에 변수와 사용하는 방법은 같으나 모양이 다르기 때문에 여기서는 모양을 중심으로 해석하겠습니다.
{{탭|여백좁게=예
 
|제목1 = 자바스크립트 예제
<source lang="python">
|내용1 =
def 이름(변수 목록):
<syntaxhighlight lang="javascript">
     실행할 명령
function oddeven(num){
 
     if (num%2 ==0) {return `${num}은 짝수입니다.`;}
예시:
     else { return `${num}홀수입니다.`;}
def 귀요미만들기(숫자):
}
     return str(숫자) + " 더하기 " + str(숫자) + "(는) 귀요미!" #return은 함수를 실행하였을 때 결과값을 던져줄 때 사용합니다. 함수 중간에도 사용 가능합니다. 또는 아무것도 안적고 "return"만 적으면 함수를 끝낼 수도 있습니다.
for (var i=1; i<=100; i++){ //반복 출력
 
     console.log(oddeven(i));
def 귀요미플레이어(숫자=6): #숫자=6은 "숫자"의 기본값이 6이라고 정의하는 겁니다.
}
    for i in range(숫자): #range(숫자)는 range(0, 숫자)와 같습니다.
</syntaxhighlight>  
        print (귀요미만들기(i + 1))#앞에서 만든 함수의 결과값을 print 함수가 받아서 출력합니다.
|제목2 = 파이썬 예제
     #return은 선택입니다. 꼭 쓸 필요는 없습니다.
|내용2 =  
 
<syntaxhighlight lang="python">
귀요미플레이어(1)#함수에 처음 적혀 있는 변수인 "숫자"가 1이 됩니다.
def oddeven(num):
귀요미플레이어(숫자=2)#혹은 이렇게 변수 이름을 직접 지정해서 값을 정해 줄 수도 있습니다.
    if num%2 ==0 : return '{0}은 짝수입니다.'.format(num)
귀요미플레이어()#기본값을 설정한 경우 이렇게 변수를 주지 않아도 실행할 수 있습니다.
    else : return '{0}은 홀수입니다.'.format(num)
결과:
for i in range(1,101):
1 더하기 1은(는) 귀요미!
     print(oddeven(i))
1 더하기 1은(는) 귀요미!
</syntaxhighlight>
2 더하기 2은(는) 귀요미!
}}
1 더하기 1은(는) 귀요미!
2 더하기 2은(는) 귀요미!
3 더하기 3은(는) 귀요미!
4 더하기 4은(는) 귀요미!
5 더하기 5은(는) 귀요미!
6 더하기 6은(는) 귀요미!
</source>
 
==== 내장함수 ====
내장함수는 파이썬이 기본적으로 만들어놓은 함수들입니다. 알아두면 매우 유용합니다,
 
* len
배열, 문자열 등 길이가 있는 것의 길이를 반환합니다.
<source lang="python">
:
한국어위키=["위키백과", "백괴사전", "리브레위키", "나무위키", "구스위키"]
위키주소={"위키백과" : "http://ko.wikipedia.org/",
              "리브레위키" : "https://librewiki.net/"}
print (len ("리브레위키"))
print (len (한국어위키))
print (len (위키주소))
 
결과:
5
5
2
</source>
* max
어떠한 시퀀스 (리스트, 스트링이나 튜플) 내에서 가장 큰 값을 뽑아냅니다.
 
* min
어떠한 시퀀스 내에서 가장 작은 값을 뽑습니다.
 
* sorted
어떠한 시퀀스를 오름차순으로 정리하여 리턴합니다. (이때 스트링은 a=1, b=2, c=3...z=26을 기준으로 하기 때문에 a가 먼저 나옵니다).
 
=== 실습과제 ===
이 단원에 있는 문제를 파이썬으로 풀어 봅시다!
절때 베끼는 것은 금지!
 
==== 문제 1 ====
"Hello world!"를 10번 출력해보세요.
 
조건 : 코드의 길이가 5줄 이하여야 합니다.
 
<source lang="python">
for i in range(10):
     print ("Hello world!")
</source>
 
==== 문제 2 ====
자신이 아는 동물 이름 일곱 가지의 목록을 만들고, 알파벳 순으로 정렬해 보세요. (한글로 하게 되면 어려워지니 영어로 해보세요)


정답: [[쉽게 배우는 프로그램 입문/알고리즘|정렬 알고리즘]]을 알고 있다면 문제 맞추기가 수월하겠지만 모르더라도 어떻게 할지 생각해보면 답은 나오는 문제입니다. 알고리즘도 결국은 문제를 해결하는 여러 가지 방법 중에 하나이거든요. 그렇기 때문에 제대로 정렬만 된다면 모두 정답입니다. 여기서는 거품정렬 알고리즘을 사용하여 해결해 보겠습니다.
보면 알겠지만 대부분의 언어에서는 함수를 정의하는 키워드, 함수의 입력값, 그리고 모든 함수에서 정의되지는 않지만 return이라는 출력값을 정의하는 키워드로 구성되어 있다는 것을 알 수 있습니다. 위의 예제에서 oddeven이라는 함수는 정수를 입력값으로 받고 문자열 "%는 짝수입니다." 같은 문자열을 출력으로 내보내는 것을 알 있죠.
 
<source lang="python">
사전 = {'a':0, 'b':1, 'c':2, 'd':3, 'e':4, 'f':5, 'g':6, 'h':7, 'i':8, 'j':9, 'k':10, 'l':11, 'm':12, 'n':13, 'o':14, 'p':15, 'q':16, 'r':17, 's':18, 't':19, 'u':20, 'v':21, 'w':22, 'x':23, 'y':24, 'z':25} #알파벳별로 번호를 매겨 대소비교가 가능하도록 합니다.
 
동물 = ["pig", "alligator", "dog", "owl", "cat", "elephant", "cow"]
 
def 알파벳비교 (일, 이):
    if 사전[일[0]] > 사전[이[0]]: #첫번째 글자의 알파벳 순서를 확인합니다.
        return True #위치를 바꿔야 할 때 True를 return합니다.
    elif 사전[이[0]] is 사전[일[0]]:
        return 알파벳비교 (일[1:len (일)], 이[1:len (이)]) #첫번째 알파벳이 같기 때문에 그 다음 알파벳으로 비교합니다.
    else:
        return False #위치를 바꿀 필요가 없을 때 False를 return 합니다.
 
#거품정렬 알고리즘은 바로 옆에 있는 값과 비교한 뒤 위치가 올바르지 않은 경우 바꾸는 방식입니다.
#비효율적이나 이해하기 쉬워 교육용으로 활용됩니다.
for ㅁ in range (len (동물) - 1):
    for ㄴ in range (len (동물) - 1): #맨 마지막 값이 맨 첫번째에 있을 수가 있기 때문에 배열 길이 - 1 번만큼 실행합니다.
        if 알파벳비교 (동물[ㄴ], 동물[ㄴ+1]):
            동물[ㄴ],동물[ㄴ+1] = 동물[ㄴ+1],동물[ㄴ]
 
print (동물)
</source>
 
혹은 파이썬을 잘 아시는 분이라면 {{--|그럼 이걸 왜 보는 거지}} list의 내장된 정렬함수를 이용할 수도 있습니다.
<source lang="python">
>>> a = ["pig", "alligator", "dog", "owl", "cat", "elephant", "cow"]
>>> a
['pig', 'alligator', 'dog', 'owl', 'cat', 'elephant', 'cow']
>>> a.sort()
>>> a
['alligator', 'cat', 'cow', 'dog', 'elephant', 'owl', 'pig']
 
</source>
물론 이 방법을 사용하면 아무 걱정없이 비 알파벳문자도 정렬할 있습니다.<ref>Python3만 해당됩니다. Python2는 CJK(한자, 일본어 글자(히리가나, 가타카나 등), 한글)문자셋을 이용하기 위한 처리가 필요합니다.</ref>
<source lang="python">
>>> b = ["개", "고양이", "사자", "비버", "악어", "부엉이"]
>>> b.sort()
>>> b
['개', '고양이', '부엉이', '비버', '사자', '악어']
>>>
</source>
이와 같이 파이썬은 매우 쉽고 편리합니다! <del>파이썬 만만세!</del>


{{각주}}
{{각주}}


{{리브레 시리즈}}
{{리브레 시리즈}}
[[분류:프로그래밍 시리즈| ]]
[[분류:쉽게 알 수 있다 시리즈]]

2024년 1월 29일 (월) 10:55 기준 최신판

문서의 내용이 너무 쉬워서 오늘부터 프로그래밍 할 수 있을 것 같습니다.

이 문서에는 독자적으로 연구한 내용이 들어갑니다. 다른 사람의 의견을 존중하면서 무례하지 않도록 작성해 주시고, 의견 충돌 시 토론 문서에서 토론해 주세요.
리브레 프로그래밍 시리즈
초급
프로그래밍
중급
프로그래밍
고급
프로그래밍
Python
협업

들어가기 전에[편집 | 원본 편집]

이 항목은 (예비) 컴퓨터공학/과학도들이 프로그래밍의 기초적인 내용을 적는 집단연구문서입니다.

이 항목에 내용을 추가하시는 분들께서는 대상층이 예비 대학교 1학년생이라 생각하시고 내용을 추가해 주셨으면 좋겠습니다.

만약에 항목에 없는 새로운 언어를 기준으로 추가하실 경우, 새로 목차를 만들어 주시길 바랍니다.

프로그래밍을 무서워 하지 말자![편집 | 원본 편집]

프로그래밍은 어려운 것이 아니다.

...뒤로 가기나 편집 버튼을 누르기 전에, 이 문단을 끝까지 읽어보자. 정말로, 프로그래밍은 어려운 것이 아니다. 쉽다고도 안 했다 단지 배울 수 있는 양이 방대할 뿐이다. 이해하기 쉽게, RPG로 비유해보도록 하겠다. 당신은 LV 1 용사고 이제 막 마을을 떠나 모험을 떠나려는 것일 뿐이다. 그런 당신의 앞에 LV 400짜리 히든보스가 나올 것 같은가? 처음부터 LV 50짜리 몬스터 인카운트만 돌아다니고, 당신은 처음부터 그걸 때려잡으려고 달려들텐가? 아니다. 당신은 그냥 마을 근처에 돌아다니는 손쉬운 LV 1 슬라임부터 잡으며 천천히 성장해나갈 것이다. 프로그래밍도 마찬가지다. 포인터니 오브젝트니 팩토리니 싱글턴이니 하는 렙제도 까마득한 장비를 좁은 인벤토리에 벌써부터 우겨넣고 낑낑댈 필요가 없다. 다 내려놓고, 차분한 마음과 힘찬 도전정신만 장착한 채 눈앞의 슬라임에 집중하자. 놈은 생각보다 연약하다.

프로그래밍을 배우는 사람들이 첫번째로 만나는 강적이 바로 오류, 버그다. 그대로 했는데 왜 오류가 나나요? 오류때문에 코딩을 할 수가 없어요. 오류가 자꾸만 나는데 아몰랑 안할래 하는 사람들이 많다. 하지만, RPG 좀 해본 사람이라면 알 것이다. 어려운 적일수록 많은 경험치를 제공한다는 것을 말이다. 프로그래밍이란 RPG는 코딩간 수없이 반복되는 전투와 시행착오로 경험치를 쌓아 레벨업을 해서 점차 오류에 대한 대처능력을 키우는 생존게임이지, 천재적인 컨트롤로 완전무결한 플레이를 해야하는 액션 게임이 아니다.[1] 오류를 두려워하지말고 오류를 환영하라. 반갑게 맞이하여 오류를 정복하라. 그 다음 동일한 오류가 발생하면 당신은 한칼에 그 오류를 박살낼 수 있게 된다. 그렇게 박살낸 오류가 많을수록 당신의 코딩레벨은 올라간다. 오류를 쓰러뜨리기 힘들다고? 인터넷에서 공략을 찾아보고 고수들에게 질문을 날려라. 제작사에서 제공하는 '레퍼런스'라는 가이드북이 있고, 고레벨 유저들이 당신의 질문에 친절하게 대답해줄 것이다.

Coding-while-learning-it-at-college.jpg

두번째로 만나는 심리적인 장벽이 바로 무결성에 대한 집착이다. 무식하고 비효율적인 방법으로 코딩을 하고, 모 드라마에서 나오는 것처럼 열 줄이면 될 코드를 백 줄로 짠다고 해서 당신은 재능이 없거나 프로그래밍에 어울리지 않는 사람이 아니며, 당신이 지금껏 배우고 익힌 것이 쓸데없어지는 게 아니다. 당신은 단지 더 나은 방법을 아직 익히지 못했을 뿐이다. 당신은 돈 받고 코딩해주는 프로도 아니고, 이제 막 첫걸음을 떼는 초보다. 쉽고 멋진 방법을 모르는 것은 당연하지 않은가! 아니, 사실 까놓고 말하면 현업전선에서도 편법과 꼼수로 일단 되게만 해놓는 프로그래밍이 횡행하고 있다. 리팩토링[2]좀 하자는 말이 굉장히 자연스럽게 나오는 게 그 바닥이다. 그러니 집착을 버리고, 열린 마음으로 프로그래밍을 대하자. 실제로 효율적인 것을 추구하는 사람이 프로그래밍을 잘 배울것 같지만, 그 효율성에 대한 집착이 지나쳐 가장 효율적인것을 찾기 전에는 한걸음도 떼지 못하는 선택장애 수준까지 간 사람들은 오히려 프로그래밍을 중도포기하거나, 여러 분야의 프로그래밍에 걸쳐 입문단계는 달달 외고 있지만 그 이상을 못넘어가는 사태가 자주 발생한다. 프로그래밍에 있어 효율성과 엄밀함을 추구하는 것은 좋지만, 거기에 잡아먹혀서 진행속도를 크게 희생하는 일은 없도록 하자.

또한, 배우는 과정중에는 기본적인것과 큰 그림을 습득하는데 열중하자. 디테일한 부분들은 필요할때 레퍼런스를 쉽게 찾아볼 수 있게끔 소스를 정리해놓는선에서 넘어가고, 나중에 실전 프로그래밍시 레퍼런스를 찾아보면서 필요한 것 위주로 체득되는 것을 노리는 것이 효율적이다. 보통 디테일한 내용들은 분량도 훨씬 많은데다가, 업데이트 되면서 종종 바뀌고, 무엇보다 자주 쓰이는 내용이 약간, 그리고 평생동안 거의 필요로 하지도 않을만한 내용이 다수 포함되어있기때문에 이런것들을 전부 머리속에 넣으면서 공부하는 것은 의미가 없다. 프로그래밍은 프로그램이라는 결과물이 전부인데, 죄다 암기해서 안찾아보고 만들었다고 결과물의 퀄리티가 올라가는 것도 아니고, 몰라서 찾아보고 만들었다고 퀄리티가 떨어지는 것도 아니다.

프로그래밍을 배우고 싶은데, 무슨 언어를 배워야 하나요?[편집 | 원본 편집]

프로그래밍 언어 문서에서 볼 수 있듯 세상에는 정말 많은 프로그래밍 언어가 존재한다. 언어마다 장단점과 적합한 분야가 있어 무엇을 만들 것인가에 따라 언어 선택이 달라지긴 하지만, 첫 언어를 선택하는데에 부담을 갖진 말자. 어떤 프로그래밍 언어를 익히던간에 하나만 잘 익혀두면 다른 언어도 금방 익힐 수 있다.

다음은 언어 선택 가이드이다.

  • 상황에 따른 선택 가이드
    • if 주변에 프로그래밍을 가르쳐줄 사람이 있다 and 그 사람이 친절하게 잘 가르쳐줄 사람이다.
      • 그 사람의 주력 언어를 따라 선택한다.
    • else
      • 많은 사람들이 사용하는 언어를 선택한다. (관련 자료를 찾기가 수월하다)
      • C/C++, C#, Java, Object-C, Swift, JavaScript, Python, Ruby 어셈블리 등의 언어가 있다.
        • 이 중 Python이 첫 시작으로 무난하다.[3]
        • JavaC#도 나쁘지 않다.
        • C/C++은 첫 시작으로는 추천하지 않는다. [4][5]
  • 목적에 따른 선택 가이드
    • 윈도우즈 응용 프로그램을 만들고 싶다 → 온갖 언어로 가능하다. C#을 추천한다.
    • 리눅스 프로그램을 만들고 싶다. → 마찬가지로 온갖 언어로 가능하다. C++,C#을 추천한다.
    • 안드로이드 애플리케이션을 만들고 싶다 → Java를 추천한다. (C++, C#, Python으로도 가능하긴 하다. 자마린을 무료로 쓸 수 있게 됐다.)
    • iOS 애플리케이션을 만들고 싶다 → Object-C / Swift를 선택한다. (C#, Python으로도 가능하긴 하다.)
    • 웹 페이지를 만들고 싶다. → 언어 하나 선택하라고 하기가 좀... 여러 가지 언어를 복합적으로 사용하며, 대표적으로 HTML[6]이 있고, 동적 웹 페이지를 만들고 싶다면 PHP, ASP, JSP 중에 하나 골라서 배워보자. HTML만 배우지는 말고, CSS, 자바스크립트도 배워봐야 나쁠 것 없다.
    • 게임을 만들고 싶다 → 유니티 엔진(C#), 언리얼 엔진(C++), 그 외에도 다양한 게임 엔진들이 많다.[7][8]
    • 소켓 프로그래밍[9]을 하고 싶다. → 언어는 어지간한 고급언어를 다룰 수 있다면 아무거나 사용해도 상관없다. 단 네트워크 관련 지식이 필요하며, 아래의 시스템 프로그래밍과도 일부 공유된다.
    • 시스템 프로그래밍[10]을 하고 싶다. → C/C++[11]를 추천한다. 여기에 어셈블리어도 수준급으로 다룬다면 금상첨화. 물론 이쯤 되면 취미의 영역을 벗어나 코딩덕후 or 현업 경력자 쯤 될 때 해볼만 할 것 같다.
    • 해킹(...)을 하고 싶다 → 하지마라 무슨 해킹을 하고 싶은지에 따라 분야는 다르지만, 거의 대부분 해킹하면 생각하는 수준이 남의 네이버 아이디 훔치는 정도…일테니, 간단히 설명하자면 위의 웹페이지 만들기, 소켓 프로그래밍, 윈도우즈 응용프로그램… 등등을 정말정말 열심히 공부하면 된다.[12]

프로그래밍 공부 방법[편집 | 원본 편집]

  • 먼저 선택한 언어의 입문서를 산다. (체계적으로 정리되어 있고, 뭘 알아야 검색도 할 수 있다.)
  • 문법을 익힌다[13]
  • 모르는게 있으면 검색부터 한다. 검색하면 다 있다.
    • 네이버 검색? 구글 검색?
      • 네이버 블로그에 초급 지식이 잘 나온다. (물론 훌륭한 분들도 있다.)
      • 네이버 검색으로 원하는 정보를 찾지 못했다면 구글에 한글로 검색한다. (웬만하면 원하는 정보가 나온다)
      • 그래도 못찾았다면 구글에 영어로 검색한다.
    • 다양한 프로그래밍 언어의 API들이 잘 정리되어 있는 OverAPI라는 사이트가 있으니 여기를 보아도 좋다.
    • 검색 키워드
      • "언어 질문" 형식으로 작성한다
      • 예시
        • C++ 파일 입출력
        • C# 파일 입출력
        • Python 파일 입출력
        • C++ Json
        • C++ how to 샬라샬라 (C++ How to data save load)
  • 다른 사람의 소스코드를 많이 본다.
    • GitHub라는 사이트에서 다른 사람들이 작성한 다양한 코드를 확인할 수 있다.
      • 게임 엔진을 만들고 싶으면 GitHub에서 게임 엔진 소스를 받아 공부한다.
      • 사진 편집 프로그램을 만들고 싶으면 GitHub에서 Gimp 소스를 받아 공부한다.
      • 벡터 그래픽 프로그램을 만들고 싶으면 GitHub에서 Inkscape 소스를 받아 공부한다.
  • 커뮤니티에 가입한다. 종종 좋은 정보를 올려주시는 분들이 있다.
  • 좋은 커뮤니티 목록
  • 커뮤니티에 질문을 한다.
    • 질문 가이드
      • 도움을 요청하는 것이란 사실을 잊지 말자. 최대한 답변자의 편의를 고려해 올린다. (그래야 답변도 잘 달린다)
      • 무엇을 만드려 하는가?
      • 어떻게 짰는가?
      • 개발 환경은? (예시 : Python이라면 2.x/3.x)
      • 어떤 문제가 발생했는가?
      • 문제를 해결하기 위해 어떤 시도를 하였는가?
      • 가능한 경우 전체 소스코드 첨부
      • 소스 코드에 주석을 달아 답변자의 소스 이해를 돕는다.
      • 답변이 달리기 전에 본인이 해결하였더라도 후학을 위해 본인이 답변을 달아둔다.
      • 답만 쏙 얻고 질문글을 삭제하지 말자.

기본적 프로그래밍 테크닉[편집 | 원본 편집]

사전 처리[편집 | 원본 편집]

Java 같은 일부 프로그래밍 언어들은 null 클래스를 정의하는 등 사전처리를 해야 합니다. 예를 들면 Java에서 Hello, World!를 출력하는 문구는 다음과 같습니다.

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

그 다음에 파일명은 클래스명인 HelloWorld.java로 저장해야 합니다. 그 다음에 자바 프로그램이 저장된 디렉토리에서 javac HelloWorld.java를 입력해서 컴파일링을 하고, 컴파일링이 끝난 뒤에야 java HelloWorld를 입력해서 실행시킬 수 있습니다.

파이썬이나 Ruby, PHP 같은 인터프리터 언어들이 배우기 쉬운 이유 중 하나가 바로 저런 사전처리를 안 해도 되기 때문이죠.

출력[편집 | 원본 편집]

일부 예외적인 경우를 제외하면 프로그래밍 언어를 배울 때 메시지를 출력하는 방법부터 배웁니다. 가장 대표적인 문장인 Hello, World!를 출력할 때 프로그래밍 언어별로 출력하는 함수 또는 키워드를 파악하는 것이 도움이 됩니다.

예를 들면 파이썬은 다음과 같이 출력합니다.

print("Hello, World!")

자료형[편집 | 원본 편집]

프로그래밍 언어에서 사용하는 요소는 숫자, 문자열, 배열(Array 혹은 List), 연관배열(Associated Array), 함수(function), 클래스(class), 모듈(Module), 패키지(Package) 등이 존재합니다. 각 프로그래밍 언어마다 사용하는 자료형은 매우 다르지만 대체로 다음과 같은 자료형을 포함하고 있습니다. 이것도 언어별로 좀 다른데 C언어 같은 경우 각 변수의 자료형을 강제로 지정해야 하지만 파이썬 같은 언어들은 자료형을 강제로 지정하지 않아도 됩니다.

예를 들면 C++에서는 다음과 같이 변수를 정수형으로 정의하면 변수명에 다음처럼 문자열을 집어넣을 수 없습니다.

#include <iostream>
int main()
{
    int x = 4;
    x = 'num'; /* 이렇게 정의하면 오류가 납니다 */
    std::cout<<x<<std::endl;
    return 0
}

하지만 파이썬처럼 타입을 엄격하게 따지지 않는 언어들은 다음처럼 숫자를 대입한 후에 다시 문자열로 대입하는 것도 가능하다는 거죠.

x = 4
x = 'num'
print(x) #num이 출력되며, 아무 오류도 안 납니다.


  • 변수 - 일반적으로 알파벳으로 시작하며, 특정한 의미를 가진 문자열로 표현됩니다. PHP 같은 언어는 변수라는 것을 명시하기 위해 반드시 앞에 $표시를 붙여야 하기도 하는 등 제약조건이 있는 언어들도 있습니다. 변수는 일반적으로 그 자체가 값이 정해진 것이 아니고, 숫자나 문자열, 배열 등의 값을 받아들여서 값이 변할 수 있습니다.
  • 불리언 - 참/거짓을 나타내는 자료형입니다. True, False 중 하나로 표현이 가능합니다.
  • 숫자 - Lua 같은 언어를 제외하면 보통 정수형과 부동소숫점이 있는 실수형 숫자를 구별하고 있습니다. 이 숫자를 문자열과 구별하는 이유 중 하나가 숫자는 연산자를 이용해서 쉽게 계산할 수 있어야 하기 때문입니다.
  • 문자열 - 말 그대로 특정한 의미를 가진 문자들의 집합입니다. 문자열은 대부분의 프로그래밍 언어에서 ""(큰따옴표)로 둘러싸인 형태로 표현됩니다. 문자열은 값이 변할 수 있는 변수와는 달리 그 자체가 값(value)입니다. 이것이 무슨 의미인지 아래 파이썬 예제를 통해 설명하겠습니다.
var = 4 #var이라는 변수는 숫자 4라는 값을 가집니다.
print(var) #4가 출력됩니다.
print("var") #var이라는 문자열이 출력됩니다.
  • 배열 (Array) 또는 리스트(list) - 숫자, 혹은 문자열, 다른 배열들을 여러 개 모은 모음입니다. 많은 인터프리터 언어에서는 arr = [ (원소0), (원소1), ... ] 형태로 서술됩니다. 각 원소를 불러오는 방법으로 arr[n], 여기서 n은 배열에서 위치의 정수값(보통 0부터 시작)이죠. 파이썬을 예로 들면 다음과 같이 arr[(숫자)] 형태로 리스트 안에 원소를 호출할 수 있습니다.
arr = [0, 4.5, '3', 'str'] #길이 4짜리.
# arr은 0부터 인덱싱이 시작.
print( arr[0], arr[1], arr[3] ) # 0 4.5 str 이 출력.
  • 연관배열 (Associated Array) - 일반적인 배열과는 달리 키값이 0부터 시작하는 숫자가 아닌 특정한 숫자나 문자열로 인덱스가 정의된 배열을 의미합니다. PHP 같은 언어는 배열이 연관배열의 특수한 경우로 간주되지만, 파이썬 같은 경우는 연관배열과 유사한 형태의 딕셔너리(dictionary)는 리스트와 다른 것으로 간주됩니다.

PHP 예시

$city = array("Seoul"=>1, "Busan"=>2, "Daegu"=>3);
echo $city["Seoul"]; // 1이 출력된다.

파이썬 딕셔너리 예시

city = {'Seoul':1, 'Busan':2, 'Daegu':3 }
print(city['Seoul']) # 1이 출력된다.
  • 함수(function) - 입력값을 받아서 출력하는 일종의 객체입니다. 자세한 것은 조금 있다가 설명하겠습니다.

변수의 값 할당[편집 | 원본 편집]

일반적으로 등호 '='를 프로그래밍 언어에서는 값을 배정할 때 사용합니다. 예를 들면 a = 4라는 문구는 변수 a에 값 4를 배정한다는 뜻입니다. 오른쪽에 정의된 값을 왼쪽 변수에 값으로 지정한다는 의미로 사용되죠. 거의 대부분의 프로그래밍 언어에서 등호 하나는 같다는 것이 아닌 값을 집어넣는다는 의미로 사용합니다. 같다는 것을 확인하는 여부는 보통 등호 2개를 사용해서 a == b라고 표현하죠. 이것은 a와 b가 같으면 참을, 다르면 거짓이 된다는 것을 의미합니다.

많은 프로그래밍 언어에서 x +=1x =x+1로 통용됩니다. 즉 (연산자)+'='이 결합되면 왼쪽에 정의된 변수를 오른쪽 숫자의 연산자만큼 바꿔준다는 뜻이죠. 또한 파이썬 같은 언어를 제외하고 x++, y-- 같은 기호가 있는데, 이건 각각 1씩 더하거나, 1씩 빼준다는 것을 의미합니다.

쉽게 생각하려면a = b는 a는 b다. a == b는 a와 b는 같다라고 생각하면 된다.

연산[편집 | 원본 편집]

거의 모든 프로그래밍 언어는 숫자의 산술 연산자를 사용할 수 있습니다. 예를 들면 2+3 이라고 입력하면 5를 출력하는 방식으로요. 덧셈 기호는 +, 뺄셈 기호는 -, 곱셈 기호는 *, 나눗셈 기호는 /를 사용하죠.

비교 연산[편집 | 원본 편집]

두 변수, 혹은 변수와 숫자를 비교할 때 사용합니다. 이 때 등호 '==', 부등호 '<. >', 크거나 같다/작거나 같다를 의미하는 '>=, <=', 같지 않다는 것을 의미하는 '!='(언어에 따라 '~=') 같은 기호를 사용하죠. 보통 a > 3라는 것은 a가 3보다 크다는 의미로, 이 비교 연산자를 포함하는 식 자체가 참/거짓을 판별할 수 있는 일종의 "명제"(Proposition)처럼 간주됩니다. print문을 이용해서 출력을 하면 문장의 참/거짓에 걸맞게 True나 False 중 하나가 출력됩니다.

비교 연산자중에서는 삼항연산자라는 것도 있습니다. (조건)?(참일 때 결과):(거짓일 때 결과) 이런 식으로 표현하는 거죠.

논리 연산[편집 | 원본 편집]

둘 다 참일 때만 참으로 정의하는 '&&'(and)나 둘 중 하나만 참일 때 참으로 정의하는 '||'(or), 참/거짓 여부를 뒤집는 '!'(not, 또는 ~)같은 연산자입니다. 모든 조건이 참일 때 실행시키기 위해서는 논리곱 연산자인 &&으로, 어느 조건 중 하나라도 참일 때 실행시키기 위해서는 논리합 연산자인 ||을 이용하는 식이지요.

보통 논리 연산자는 아래의 분기문을 실행시킬 때 분기문의 조건 부분에서 많이 사용됩니다.

함수[편집 | 원본 편집]

프포그래밍의 핵심적인 요소 중 하나가 바로 함수(函數, function)의 활용입니다. 가장 쉬운 것은 비슷한 작업을 명령어 하나로 줄여줄 수 있다는 이점이 있다는 거죠. 예를 들면 1부터 100까지 홀수인지 짝수인지 출력을 하고 싶으면 "1은 홀수입니다", "2는 짝수입니다" 이런 식으로 출력을 할 수도 있지만 함수를 이용해서 숫자를 입력하면 짝수입니다, 홀수입니다를 출력할 수 있게 할 수 있다는 거죠. 자바스크립트와 파이썬으로 구현된 예제를 통해서 확인해보겠습니다.

자바스크립트 예제
파이썬 예제
function oddeven(num){
    if (num%2 ==0) {return `${num}은 짝수입니다.`;}
    else { return `${num}은 홀수입니다.`;}
}
for (var i=1; i<=100; i++){ //반복 출력
    console.log(oddeven(i));
}
def oddeven(num):
    if num%2 ==0 : return '{0}은 짝수입니다.'.format(num)
    else : return '{0}은 홀수입니다.'.format(num)
for i in range(1,101):
    print(oddeven(i))

보면 알겠지만 대부분의 언어에서는 함수를 정의하는 키워드, 함수의 입력값, 그리고 모든 함수에서 정의되지는 않지만 return이라는 출력값을 정의하는 키워드로 구성되어 있다는 것을 알 수 있습니다. 위의 예제에서 oddeven이라는 함수는 정수를 입력값으로 받고 문자열 "%는 짝수입니다." 같은 문자열을 출력으로 내보내는 것을 알 수 있죠.

각주

  1. 프로그래밍은 만렙이 없는 게임이다. 전세계 랭커들도 항상 오류와 버그를 잡으면서 레벨업에 매진하고 있다.
  2. 비효율적이거나 용도가 제한적인 코드를 고쳐서 효율적이고 다용도로 만드는 작업.
  3. 파이썬이라고도 하는데 프로그래밍을 쉽게 배우고 싶다면 추천할 만하다.
  4. 국내외를 막론하고 C/C++ 기초 서적에서 첫 언어로 이것들을 추천하는데 믿지 않는게 좋다. C와 C++은 난이도가 높은 언어로 손꼽히기 때문이다.
  5. 이 두 언어는 성능과 기능이 최우선이라 뭘 만들던 일일히 하나씩 다 상태를 관리해줘야 한다. 다른 언어들에서 자동으로 처리해주는 걸 굳이 하나하나 빼먹지 않고 추가로 써야 한다면? 초보에게 이런 언어는 머리만 아플 뿐이다. 단지 컴퓨터의 구조를 익히게 한다고 컴퓨터공학과에서 매우 높은 확률로 이것만 배우게 될 뿐…. 그렇다고 책장에 모셔두진 말고 그냥 훑어보기라도 하면 도움된다. 특히 컴파일러 부분은 python을 선택했다면 모르고 넘어가기 때문에 알아두는 게 좋다.
  6. 정확히는 프로그래밍 언어의 범주에는 속하지 않고, 마크업 언어라고 한다.
  7. 입문용으로 뭘 쓸지 고민한다면 유니티 엔진을 써라, 하지만 유니티는 퀄리티가 언리얼보다 한참 뒤떨어지는데 최근에 그 격차가 좁아졌기는 했지만 유니티에서 고퀄리티로 개발한다하면 이때는 언리얼보다 난이도가 높아지는 단점이 있다. 언리얼이 전체에서 필요없는 것을 빼는 식이라면 유니티는 최소에서 필요한 것을 첨가하는 식이다. 초보가 고퀄리티를 낼 때는 언리얼, 빨리 배우고 게임을 내놓고 싶다면 유니티를 선택하라.
  8. C#으로 개발하면 성능이 떨어지지 않을까?라는 걱정하는 사람들이 있을 것이다. 하지만 그렇지 않은데 최근에 C#을 C++로 번역하는 기능도 추가되었고 C#의 부족한 성능을 메우기 위한 기능도 꾸준히 출시되어 성능 문제를 따지는건 의미가 없을 것이다. 그런데 초보가 성능 문제를 따질 필요가 있는가. 유니티의 C#은 쉽지만 공식 비주얼 스크립팅 기능이 없고 언리얼의 C++은 어렵지만 비주얼 스크립팅 기능이 있어 뭐가 더 쉬운지 깊이 생각할 필요가 없다.
  9. 컴퓨터와 컴퓨터, 즉 컴퓨터를 네트워크에 연결하여 다른 사용자(서버, 클라이언트 등)와 연결하는 영역을 다루는 프로그래밍
  10. 컴퓨터를 구성하는 하드웨어 및 이를 제어하는 OS와 드라이버를 다루는 프로그래밍
  11. 위에서 서술되었듯이 성능과 기능을 최우선으로 하는 언어이다. 이 때문에 태생부터 효율적인 시스템 자원(메모리 등) 관리에 사용되었고 현재까지도 사용노인학대되고 있다.
  12. 농담이 아니라 실제 현실의 해킹은 프로그램/홈페이지 상의 취약점을 찾아서 공격하는 것이 거의 대부분이기 때문에, 이것들을 열심히 수련하여 코드 상의 취약점을 찾아내어 공격하면 된다.
  13. 프로그래밍은 레고나 볼트너트 같은 거로 거대 건축물을 만드는 거라 그 부품의 사용법을 정확히 익히는 것이 매우 중요하다. 컴퓨터 쓰는 법에 익숙하면 스마트폰 사용에도 쉽게 적응할 수 있듯이 하나 제대로 익히면 다음 것을 배우는 게 훨씬 쉬워진다.