KAGAKU GIJYUTSU KEISAN NO TAME NO Python NYUMON by Kenji Nakakuki Copyright c 2016 Kenji Nakakuki All rights reserved. Original Japanese edition publi

Size: px
Start display at page:

Download "KAGAKU GIJYUTSU KEISAN NO TAME NO Python NYUMON by Kenji Nakakuki Copyright c 2016 Kenji Nakakuki All rights reserved. Original Japanese edition publi"

Transcription

1

2 KAGAKU GIJYUTSU KEISAN NO TAME NO Python NYUMON by Kenji Nakakuki Copyright c 2016 Kenji Nakakuki All rights reserved. Original Japanese edition published by Gijyutsu-Hyoron Co., Ltd., Tokyo This korean language edition published by arrangement with Gijyutsu-Hyoron Co., Ltd., Tokyo in care of Tuttle-Mori Agency, Inc., Tokyo through Danny Hong Agency, Seoul Korean translation copyright c 2017 by J-PUB 이책의한국어판저작권은에이전시원을통해저작권자와의독점계약으로제이펍출판사에있습니다. 신저작권법에의해한국내에서보호를받는저작물이므로무단전재와무단복제를금합니다. 초판 1 쇄발행 2017 년 11 월 30 일 지은이나카쿠키켄지 옮긴이심효섭 펴낸이장성두 펴낸곳제이펍 출판신고 2009 년 11 월 10 일제 호 주소경기도파주시회동길 층 3-B 호 전화 / 팩스 홈페이지 / 원고투고 jeipub@gmail.com 독자문의 readers.jpub@gmail.com / 교재문의 jeipubmarketer@gmail.com 편집부이민숙, 황혜나, 이슬, 이주원 / 소통 기획팀민지환 / 회계팀김유미 교정 교열홍성신 / 본문디자인이민숙 / 표지디자인미디어픽스 용지에스에이치코리아 / 인쇄한승인쇄사 / 제본광우제책사 ISBN (93000) 값 28,000 원 이책은저작권법에따라보호를받는저작물이므로무단전재와무단복제를금지하며, 이책내용의전부또는일부를이용하려면반드시저작권자와제이펍의서면동의를받아야합니다. 잘못된책은구입하신서점에서바꾸어드립니다. 제이펍은독자여러분의아이디어와원고투고를기다리고있습니다. 책으로펴내고자하는아이디어나원고가있으신 분께서는책의간단한개요와차례, 구성과저 ( 역 ) 자약력등을메일로보내주세요. jeipub@gmail.com

3

4 드리는말씀 이책에기재된내용을기반으로한운용결과에대해저자, 역자, 소프트웨어개발자및제공자, 제이펍출판사는일체의책임을지지않으므로양해바랍니다. 이책에등장하는각회사명, 제품명은일반적으로각회사의등록상표또는상표입니다. 본문중에는 TM, C, R 마크등이표시되어있지않습니다. 이책에서사용하고있는제품버전은독자의학습시점이나환경에따라책의내용과다를수있습니다. 본문중일본내의실정에만국한되어있는내용이나그림은일부를삭제하거나국내실정에맞도록변경했으 니참고바랍니다. 책내용과관련된문의사항은옮긴이나출판사로연락주시기바랍니다. - 옮긴이 : flourscent@gmail.com - 출판사 : readers.jpub@gmail.com

5 차례 xv xvii xx xxiii CHAPTER 1 과학기술컴퓨팅과파이썬 데이터로살펴보는파이썬의현재 파이썬기초지식 ❶ 가독성과유지보수성 10 ❷ 인터프리터언어 10 ❸ 스크립트언어 10 ❹ 접착제언어 11 ❺ 배터리내장 11 ❻ 풍부한생태계 12 column _ x 3 x 1.3 과학기술컴퓨팅과파이썬의관계 파이썬의보급도 18 쉬운사용 SciPy Stack 21 민간기업과커뮤니티 22 파이썬의활용사례 성능비교의세부사항 26 column _ 정리 차례 v

6 CHAPTER 2 제로부터시작하는시뮬레이터개발 시뮬레이터설계하기 PyRockSim 기능분할과파일분할 기능구현시유의할점 import 프로그램작성 import 정적코드분석 단위테스트 doctest unittest nose 2.6 디버깅 pdb pdb pdb 2.7 프로그램의최적화 정리 CHAPTER 3 IPython 과 Spyder IPython IPython IPython column Jupyter_ Jupyter Notebook IPython vi 차례

7 객체의내용을확인하기 83 함수의내용표시하기 84 함수의내용을자세히표시하기 85 객체를이름으로검색하기 85 매직커맨드 86 운영체제와의연계 88 명령히스토리확인하기 89 히스토리검색하기 90 탭자동완성 91 스크립트파일실행하기 IPython pdb 92 사후분석디버깅 92 스크립트를지정하여디버거실행 95 지정한위치에서디버거실행하기 실행시간측정 97 프로파일링을위한준비 99 실행시간프로파일링 100 메모리사용량에대한프로파일링 103 메모리프로파일링대상을소스코드안에서 Spyder Spyder Spyder 107 프로그램에디터 108 프로그램실행 110 닥스트링이나도움말보기 Object inspector 111 워크스페이스에정의된변수의정보보기 Variable explorer 112 데이터파일입출력 UMD Spyder 정리 114 CHAPTER 4 파이썬의기초 작성스타일 인코딩 117 들여쓰기 118 주석 PEP 객체와데이터타입 column _ column _ 차례 vii

8 숫자데이터타입 128 문자열데이터타입 129 리스트 130 튜플 130 바이트및바이트배열 131 딕셔너리 131 집합 문자열리터럴 133 문자열에서사용되는이스케이프시퀀스 134 숫자리터럴 135 컨테이너타입에대한리터럴 시퀀스타입조작하기 집합타입과딕셔너리타입의조작 변수와데이터 C 언어의경우 C 언어의경우 참조값을할당한후재정의하기 151 2개의변수에동일한리스트를할당하기 얕은복사와깊은복사 복합객체가아닌경우 154 복합객체인경우 연산자와평가식 흐름제어 if for column _ while try with 4.9 함수정의하기 viii 차례

9 lambda 모듈과패키지 import 181 패키지의 import 네임스페이스와유효범위 네임스페이스와변수의조작 188 global문과유효범위확장 188 nonlocal과유효범위확장 189 클로저 정리 191 CHAPTER 5 클래스와객체의기초 클래스정의 상속 스태틱메서드와클래스메서드 정보를은폐하는방법 클래스와네임스페이스 정리 차례 ix

10 CHAPTER 6 입력과출력 콘솔입출력 파일입출력의기본 open open 데이터파일입출력하기 CSV 218 표준라이브러리모듈 219 NumPy의 CSV 읽기기능을제공하는함수 Excel 222 XLS 포맷파일의입출력 222 OOXML 포맷파일의입출력 pickle 225 단일변수를 pickle로만들기 225 여러변수를 pickle로만들기 NumPy의 npy/npz 포맷 228 HDF5 포맷 229 MAT-file 포맷 230 column HDF5_ pandas 의데이터입출력기능 pandas 데이터읽기자세히보기 웹상의정보를입력받기 urllib HTML 242 파이썬 2.x와파이썬 3.x의 urllib과관련된정보 242 column _ 정리 244 CHAPTER 7 NumPy NumPy란? NumPy NumPy NumPy column _ x 차례

11 7.2 NumPy 의데이터타입 NumPy NumPy 7.3 다차원배열객체 ndarray ndarray ndarray ndarray ndarray ndarray 264 기본인덱싱을통한참조 265 응용인덱싱을통한참조 유니버설함수 ufunc ufunc 7.5 브로드캐스팅 정리 CHAPTER 8 SciPy SciPy란? SciPy NumPy SciPy SciPy NumPy 8.2 SciPy 활용하기 column _ 정리 차례 xi

12 CHAPTER 9 matplotlib matplotlib 이란? matplotlib matplotlib matplotlib pylab pyplot NumPy 9.2 matplotlib 설정하기 설정확인하기, 설정명령으로변경하기 matplotlib 활용하기 column _ 그외의그리기툴 matplotlib 9.5 정리 CHAPTER 10 pandas pandas란? pandas PyData pandas 10.2 pandas의데이터타입 데이터처리하기 pandas API NumPy NaN 정리 xii 차례

13 C H A P T E R 11 프로그램최적화 프로그램최적화의기본 병목해소 선입견을갖지말고시도하기 369 파이썬의내장함수및표준라이브러리를최대한활용 369 반복문사용을최대한피함 메모리관리 371 ndarray에서메모리절약하기 IPython을사용하지않고함수프로파일링하기 376 프로파일링결과를시각화하여보기 378 IPython 없이라인프로파일링하기 병렬처리하기 CPU column Intel Xeon Phi_ GIL SIMD 383 Intel SIMD 확장명령어세트 383 파이썬에서 SIMD 활용하기 384 column Intel MKL_ 멀티스레드프로그램 385 병렬인듯병렬아닌 386 멀티스레드로처리속도를올리려면 멀티프로세스의장점 388 column GPU_ 정리 392 ProcessPoolExecutor 389 column Blaze _391 C H A P T E R 12 프로그램최적화 응용예 고속라이브러리활용하기 Cython 395 Cython의기능 Cython 397 Cython 코드작성부터컴파일까지 397 Cython 코드를실행시컴파일하기 Cython NumPy Cython 400 차례 xiii

14 setup C/C++ C/C++ import 12.2 JIT 컴파일러사용하기 Numba column Julia_407 Numba Numba ufunc Numba Numexpr 12.3 정리 A P P E N D I X 419 A 참고문헌 & 학습자료 421 A / 421 Jupyter Notebook IPython Notebook 422 Git A B 내장함수와표준라이브러리 424 B B C NumPy 함수의레퍼런스 429 C C xiv

15 옮긴이머리말 파이썬이시쳇말로요즘참핫합니다. 인공지능이나머신러닝연구에서사용되는주요기법이파이썬으로구현되고, 다시이들기법위에새로운아이디어를검증하기위한구현에도파이썬을사용하면서최신기법에대한코드도나날이누적되고있습니다. 보기에따라서는이들연구에는반드시파이썬이사용된다고해도과언이아닙니다. 이렇듯이책은연구및개발활동을위해파이썬으로수치계산프로그래밍을필요로하는엔지니어및연구자를위한책입니다. 이책은크게두부분으로구성됩니다. 전반부는파이썬을처음접하는독자를위해간단한파이썬문법과개발환경을소개하고객체지향설계기법을다룹니다. 그다음이들내용을적용하면서작성한코드에신뢰성을담보하는정적코드분석및단위테스트를수행하는방법을배웁니다. 이어후반부에서는수치계산프로그래밍을위한대표적인라이브러리인 NumPy, SciPy를살펴보고데이터시각화기능을제공하는 matplotlib과계층적데이터구조와이에대한기능을제공하는 pandas를살펴봅니다. 마지막으로이들라이브러리를사용한수치계산프로그램을최적화하기위한다양한기법도다룹니다. 이책의장점은수치계산이라는뚜렷한목적을가진독자의시행착오를최소화한다는점입니다. 파이썬을처음대하는독자를위해파이썬문법및개발환경을소개하고, 이들환경에익숙한독자라도정적코드분석및단위테스트를통해흔히발생하는버그 옮긴이머리말 xv

16 로인한시행착오를줄이고목표로하는계산내용을구현하는데집중할수있도록도와줍니다. 그리고수치계산에서가장널리쓰이는라이브러리인 SciPy와 NumPy 에대한이해를통해차후이들라이브러리를기반으로하는고수준라이브러리에대한깊은이해를가질수도있습니다. 여기다뒤에나오는최적화기법을더한다면파이썬을이용한수치계산프로그래밍이라는주제를원스톱으로해결하는책이라할수있습니다. 그리까다로운문장은아니었지만그래도이해를돕기위해적극적으로윤문한부분이있습니다. 책의출간을앞둔지금와서생각해보니독자여러분이책을이해하는데혹여저해가되지않을까조금걱정이되기도합니다. 마지막으로, 좋은책을믿고맡겨주신제이펍장성두실장님과이주원편집자님의많은도움에감사합니다. 아내정이에게도고마움을표합니다. 옮긴이심효섭 xvi 옮긴이머리말

17 머리말 이책은파이썬을처음배우는사람을위한입문서입니다. 그중에서도과학기술컴퓨팅을위해파이썬을사용하려는분들에게필요한기초내용을정리했습니다. 파이썬은여러분야에서제역할을톡톡히해내고있는언어입니다. 각종공학시스템의모형화및시뮬레이션이나기상데이터분석, 인공지능개발, 웹애플리케이션구축을비롯하여자연어처리에이르기까지다양한분야에걸쳐사용되고있습니다. 2016년 3월에구글딥마인드 (DeepMind) 사가개발한인공지능 알파고 (AlphaGo) 가이세돌 9단과의대국에서 4승 1패로승리를거둔것을기억할것입니다. 이알파고에는딥마인드에서개발한 텐서플로 (TensorFlow) 라는파이썬라이브러리가사용되고있습니다. 1 자동차자율주행연구에서좋은성과를냈던프리퍼드네트웍스 (Prefferred Networks) 의 체이너 (Chainer) 도파이썬에서사용되는인공지능개발용라이브러리입니다. 그리고최근에는 IoT(Internet of Things, 사물인터넷 ) 에대한연구가활발히진행되면서빅데이터분석의중요성이대두되고있습니다. 이런분위기에서데이터분석을처음배우는사람들사이에서도이해하기쉬운언어로파이썬의인기가높습니다. 새로운프로그래밍언어일수록과거로부터교훈을받아들여똑똑한기능을갖도록설계 1 URL 머리말 xvii

18 됩니다. 그러나설계가훌륭하다고해서그언어가폭넓게사용되는것은아닙니다. 언어는그역사를더해갈수록언어주변에다양한라이브러리나도구가갖춰지게마련이고, 이를토대로풍부한생태계를형성한다음에널리쓰이게됩니다. 파이썬은이부분에강점을가진언어입니다. 언어자체의스펙은간결하고이해하기쉬우며풍부한생태계를이미갖추고있습니다. 게다가대부분의라이브러리를무료로사용할수있으며, 파이썬자체도개발이중단될염려가거의없습니다. 예를들면파이썬에서 ( 이책에서도설명할 ) Numpy 를사용하면고속수치계산을수행할수있으며, Scipy 에는과학기술컴퓨팅을위한다양한함수가갖춰져있습니다. pandas 를사용하면복잡한구조를갖는데이터를간단히분석할수있습니다. matplotlib 처럼데이터를시각화해주는도구가충실한것도빼놓을수없는부분입니다. 또공학분야에서는분류시뮬레이션프로그램의 빠른프로토타이핑 (rapid prototyping) 이필요할때가많습니다. 동적타이핑을갖춘스크립트언어인파이썬은바로빠른프로토타이핑에적합하다는장점덕분에과학기술컴퓨팅이필요한사람들이많이사용합니다. 이책은과학기술컴퓨팅에서파이썬이지니는매력을많은사람에게알리고자집필했습니다. 파이썬의언어스펙뿐만아니라주요라이브러리의사용법과고속처리를위해필요한기초지식및실무기법을함께소개했기에실용성또한뛰어날것입니다. 또한파이썬을처음배우는분들을위해그림이나표를이용하여쉽게설명하는데도중점을두었습니다. 이책을통해좀더많은독자가파이썬을알게되고독자여러분의기술력향상에조금이라도기여할수있다면더할나위없이기쁠것입니다. 감사의말씀이책의집필과정에서도쿄대학교의타우라켄지로선생님, 추부대학의에비누마타쿠지선생님에게많은조언을받았습니다. 진심으로감사드립니다. 파이썬이라는멋진언어를태어나게한귀도반로섬과관련커뮤니티, 그리고여러라이 xviii 머리말

19 브러리가갖춰지는데많은개발자여러분의열의와헌신이있었습니다. 이들에게도진심으로경의와감사의마음을표합니다. 주말이나휴일에도집필에만몰두하던저를응원해준아내야스코와이책을쓰는중에태어난딸사오리에게도감사를전합니다. 지은이나카쿠키켄지 머리말 xix

20 이책의구성 이책에서는파이썬언어스펙과기본적인내용에더해연구개발분야에서파이썬이어떻게쓰이는가에중점을두고파이썬을소개합니다. 주로이공계학생이나엔지니어들이파이썬의생태계를활용하여효율적인연구, 개발을하는데도움이되는구성을택하고있습니다. 각장은아래와같은내용으로구성됩니다. 1장 과학기술컴퓨팅과파이썬 에서는파이썬이라는언어의특징과프로그래밍언어에서갖는위상, 그리고현재파이썬이어떻게쓰이고있는가에대한동향등을소개합니다. 이를통해왜지금파이썬을사용해야하는지에대한이유를이해하게됩니다. 2장 제로부터시작하는시뮬레이터개발 에서는무 ( 無 ) 에서부터시작하여시뮬레이션프로그램을개발하고이프로그램을개선해가는과정을살펴보게됩니다. 이과정을통해효율적인프로그램을개발하는데필요한전체적인절차를배우게됩니다. 3장 IPython과 Spyder 에서는파이썬의표준대화형셸이라할수있는 IPython과통합개발환경인 Spyder를다룹니다. 이도구의기능과사용법을익히면서여러분의생산성도비약적으로향상될것입니다. 4장 파이썬의기초 에서는파이썬을처음배우는독자를위해파이썬언어의기본적인문법을설명합니다. 그리고 5장 클래스와객체의기초 에서파이썬의객체지향관련기능을설명한뒤, 6장 입력과출력 에서는데이터의입출력방법에대한큰그림을제공합니다. 이렇게 3개장을배우고나면파이썬으로프로그래밍을시작할수있습니다. xx 이책의구성

21 7장부터 10장까지는과학기술컴퓨팅에필수라이브러리인 Numpy, SciPy, matplotlib, pandas 를각각다룹니다. 이들라이브러리는과학기술컴퓨팅에가장중요한것으로이러한라이브러리를능숙하게사용하면구현할수있는작업이대폭늘어납니다. 11장 프로그램최적화 및 12장 프로그램최적화 응용예 에서는빠른프로그램을작성하는데필요한원칙과도구를사용하는구체적인예에대해소개합니다. 이장의내용은과학기술컴퓨팅에서파이썬을이용하는고급프로그래머가될수있도록해줍니다. 이책의대상독자이책의대상독자는앞으로과학기술컴퓨팅혹은엔지니어링에파이썬을처음사용하려는분들입니다. 아래와같은독자에게추천합니다. 파이썬이어떤언어인지, 어떤일을할수있는지배우고싶은분 파이썬으로과학기술컴퓨팅을수행하려는분 파이썬고성능프로그래밍의기초를배우고싶은분 파이썬으로실제프로그래밍작성법을배우고싶은분이책은파이썬의기본적인문법뿐만아니라과학기술컴퓨팅을효율적으로수행하기위한기술을익힐수있도록구성됐습니다. 단순히언어스펙만이아닌효율적인프로그래밍을익히려는분에게가장적합합니다. 동작확인에쓰인운영체제와파이썬버전이책의프로그램은윈도우 8 이상에서검증되었으며, 벤치마크테스트할때의동작환경은 1장의 성능비교의세부사항 절에서볼수있습니다. 이책의내용은기본적으로윈도우, 맥OS, 리눅스어떤운영체제에서도동일한동작을확인할수있습니다. 설정과관련된내용이나파일경로를나타내는방법등운영체제에따라달라지는부분도있지만프로그램을작성하는방법은차이가거의없습니다. 달라질수있는부분에대해서는그때마다설명을덧붙였습니다. 이책의구성 xxi

22 파이썬버전은 3.5 이상을전제로합니다. 앞으로파이썬을활용하려는독자에게는 2.x 대버전은그다지배울필요가없을것입니다. 새로운언어스펙은 3.x 대위주로추가됐으므로파이썬역시최신버전을사용하기바랍니다. 다만, 다양한패키지의의존관계문제를직접해결하려면시간과노력이많이소요되므로최신버전에대한배포패키지를이용하는방법을추천합니다. 그리고파이썬에는몇가지서로다른구현이있지만이책에서는기준구현이되는 CPython(C 언어로구현된파이썬 ) 을사용합니다. 독자여러분도일부러다른구현을선택하지않는이상은 CPython을사용하게될것입니다. 이책의지원페이지 이책의지원페이지는다음 URL 로접속하면됩니다. URL 이책과관련한정보및동작확인에필요한개발환경을갖추기위한정보로아래와같 은내용이포함돼있습니다. 배포패키지설치 C/C++ 컴파일러설정 ( 특히윈도우환경에서 ) 주요서드파티라이브러리 (NumPy, SciPy, matplotlib, pandas, IPython 등 ) 의설치및설정이책에나온예제코드도해당페이지를참조하십시오. xxii 이책의구성

23 베타리더후기 김종욱 ( 카이스트 ) 이책은파이썬을이용하여효과적인과학기술연산을가능하게합니다. 파이썬이스크 립트언어이기때문에 C나 C++ 보다느릴것이라생각했는데, 파이썬전용가속라이브러리가있어이러한한계를극복할수있다는것을이책을통해처음으로알게되었습니다. 이책에서는파이썬에서제공하는다양한기능들, 특히연산처리를최적화하는방법에관해잘정리했습니다. 다른책에서는단순한앱을만들면서파이썬을학습하는데초점을둔반면, 이책의경우성능향상이라는부분에초점을두고서술했다는점에서기존의책과다른접근에참신한인상을받았습니다. 다만, 이책의경우어느정도컴퓨터구조에대한지식을요하는만큼초급자분들이읽기에는어려울수있습니다. 고승광 ( 플랜티넷 ) 요즘핫한언어이자당분간계속핫할파이썬에대한중급수준의책입니다. 파이썬문법만겨우알고있고아직제대로된개발을해보지못한저와같은초급자에게는다소어려운내용이많습니다. 그렇지만다른파이썬기본서에는없었던내용을꽤많이소개해서보다심화된내용을필요로하는개발에도움이될듯합니다. 베타리더후기 xxiii

24 박두현 ( 마블러스 ) 이책은파이썬을처음배우고자하는사람에게어울리는책은아닙니다. 하지만데이터과학의맛을보고자하는분에게이만한책이없다고생각합니다. 일반애플리케이션제작과데이터분석의코딩이무엇이다른지, 접근하는방식이어떻게다른지에대해알수있어서유익했습니다. 베타리딩하는동안가장재미있게읽은책입니다. 데이터분석이일반프로그래밍과무엇이다른지깨닫게해주었습니다. 박조은파이썬생태계는방대해서이해하고사용할수있는것은일부에지나지않습니다. 이책을통해과학기술계산과관련하여어렵게느껴졌던여러패키지들을다양한예제와함께실행해볼수있었습니다. 여전히파이썬의여러기능을적재적소에제대로사용하는건어렵지만, 이중에서어떤것을선택해서더깊게공부해야할지방향을잡는데도움이되었습니다. 최근데이터과학을공부하면서과학기술컴퓨팅을위한라이브러리와패키지를사용하고있지만, 패키지의모든내용을알기도어려울뿐더러알고있는내용을제대로써먹는일도어렵습니다. 이책을통해그동안조금씩익혔던파이썬의여러라이브러리의기능을정리하고모르고있었던새로운기술을익힐수있는기회가됐습니다. 이철혁 ( 스노우 ) 파이썬을처음접하는분들에게기초부터필수확장라이브러리인 NumPy, SciPy, pandas 에대해개념을잡을수있는책입니다. 고급활용까지는아니지만기본기를다지고공식문서를볼수있는실력을배양할수있습니다. 책에서대표적 IDE 설명으로 Spyder를소개하는데, 국내에서는 PyCharm을좀더많이사용하니비교해서맞는 IDE 를사용하면좋겠습니다. 개인적으로 Numpy, SciPy, pandas 등라이브러리설명에좀더집중했으면좋았을것같습니다. 그래도파이썬기초에대해충실하게다루고있습니다. 파이썬입문과심화과정을한권에잘담았습니다. xxiv 베타리더후기

25 최승호 ( 네이버 ) 파이썬이라는녀석으로데이터분석, 과학수식연산, 시각화도표까지라이브러리로해결할수있기때문에일석이조를넘어일석삼조도가능하다고생각합니다. 파이썬을해야해? 가아닌 파이썬은해야해! 가맞다고생각합니다. 특히, 이책은설명이자세해서파이썬입문자에게도강력히추천합니다. 제이펍은책에대한애정과기술에대한열정이뜨거운베타리더들로하여금출간되는모든서적에사전검증을시행하고있습니다. 베타리더후기 xxv

26

27 1C H A P T E R 과학기술컴퓨팅과파이썬

28 과학기술컴퓨팅분야에서는지금까지 C/C++, Fortran, Java, MATLAB 등이널리쓰였다. 그러나이제파이썬이이들을대체하여널리사용되고있다. 이번장에서는과학기술컴퓨팅분야에서파이썬이대두하게된현실을데이터에근거하여알아본다. 그리고파이썬개발에대한역사및언어적특징에대해서도소개한다. 특히초심자가망설이기쉬운파이썬의버전선택에대해서도다룬다. 마지막으로과학기술컴퓨팅분야에서파이썬이점점널리사용되는이유를 C 언어와의벤치마크테스트등다양한각도에서조명해본다.

29 1.1 데이터로살펴보는파이썬의현재 파이썬은다양한분야에서매우인기가높은언어다. 그렇다면실제로는누가, 어떤용도로사용하고있는것일까? 또한얼마나널리쓰이고있는것일까? 이번절에서는파이썬의현재인기도에대한검증및과학기술컴퓨팅에서점점널리사용되고있는실상을알아볼것이다. 마지막으로일본에서사용되는현황및앞으로의전망에대해서도살펴본다 파이썬의대두파이썬 (Python) 을쓰는사용자는얼마나될까? 먼저파이썬의인기도가어느정도인지부터살펴보자. 프로그래밍언어의인기도를알수있는지표중하나로 TIOBE index 1 가있다. 이지수는 TIOBE 는기업이작성하고있는지표로대부분의주요검색서비스 (2016 년 8월기준 Google, Bing, Yahoo!, Wikipedia, Amazon, YouTube, Baidu 등 25개서비스포함 ) 등에서아래와같은쿼리로얻은결과를분석하여계산한값 (Ratings 2 ) 을통해얻은결과를표 1.1 에실었다. +"<language> programming" 이결과를보면 Java와 C 언어가절대적인인기를누리고있음을알수있다. 파이썬은 5 위에랭크되었으나매해상승폭이가장컸던언어에주는 Programming Language of the Year 에 2007년부터 2010년까지뽑힌바있다. 그러나파이썬이과학기술컴퓨팅에서얼마나쓰이고있는지는 TIOBE index만으로는알기어렵다. 이를확인하기위해 IEEE(Institute of Electrical and ElectronicsEngineers) 에서추산하는프로그래밍언어에대한인기도지표를살펴보자. 잡지 <IEEE Spectrum> (IEEE) 에서정리한 Top Programming Languages 라는프로그래밍언어지표를표 1.2 에실었다. 이지표는 Google Search, Google Trend, Twitter, GitHub, Stack Overflow, 1 TIOBE 는 티오비 또는 타이오비 라고읽는다. 2 지표의값. 이값의정의에대해서는다음 URL 참조. TIOBE Programming Community Index Definition URL 데이터로살펴보는파이썬의현재 3

30 Reddit, IEEE Xplore Digital Library(IEEE Xplore) 등 10개정보서비스로부터얻은언어의이용도지표에 IEEE가독자적으로산정한점수를곱하여계산한것이다. 표 1.2 에나온전체지표가이순위에해당한다. 이결과에서는파이썬이 3위에랭크되어있다. 그러나이결과역시앞에서본 TIOBE index 와마찬가지로과학기술컴퓨팅에대한프로그래밍언어의인기도를나타내는지표로보기는어렵다. 이 Top Programming Languages에서는순위산출시사용되는가중치를바꿀수있으므로 IEEE Xplore만으로순위를매겨보자. IEEE Xplore에는과학기술분야 360만편이상의논문이나기사가등록되어있다. 이들논문중에서언어가언급된횟수를인기도의지표로삼으면과학기술컴퓨팅분야에서어떤언어가많이쓰이는지를알수있다. 3 특히 2016년에발표된논문만을대상으로계산한인기도지표를표 1.2 의 IEEE Xplore만 열에서볼수있다. 1위부터 3위까지는전체지표순위와변화가없어파이썬이 3위에자리잡고있다. 4위이하부터는실행속도면에서유리한 C++, 스크립트언어인 MATLAB, 데이터통계처리에강점이있는 R, 강력한데이터시각화기능을가진 Processing 등의언어가상위에있다. 이데이터로파이썬이과학기술컴퓨팅분야에서도최상위에해당하는인기도를누리고있음을알수있다. 이외에도파이썬이과학기술컴퓨팅분야에서인기가오르면서파이썬사용이늘어나고있음을보여주는데이터가있다. 과학기술컴퓨팅을위해파이썬을사용할때필수라할수있을만큼많이사용되는패키지로 NumPy( 넘파이 ), SciPy( 사이파이 ) 가있다. 이들패키지를다운로드한횟수를그림 1.1 에나타냈다. 이그래프는 PyPI( 파이피아이, 뒤에설명함 ) 라고하는파이썬공식저장소의통계치다. 4 리눅스 5 나맥OS 같은운영체제에는이들패키지가기본적으로탑재되며, 윈도용파이썬배포판에도포함되어있으므로이값은경향에대해참고만하기바란다. 주목해야할것은다운로드횟수의변화다 년이후로다운로드수가대폭증가했음을알수있다. 3 웹애플리케이션및모바일, 임베디드분야에쓰인프로그램은추가로제외한다. 4 최근의데이터는입수가불가능하여 (2016 년 8 월시점 ) 2014 년까지의데이터를사용했다. 5 Ubuntu, Debian GNU/Linux, Red Hat Enterprise Linux, CentOS 등대부분의리눅스배포판에서파이썬을사용할수있다. 4 CHAPTER 1 과학기술컴퓨팅과파이썬

31 이것은 NumPy 를의존패키지로하는패키지가늘어난것도원인이지만, 파이썬을과학 기술컴퓨팅에사용하는사람이크게늘어난것으로봐도무방할것이다. 1 1 TIOBE Index 순위 언어 Ratings(%) 순위 언어 Ratings(%) 1 Java Delphi/Object Pascal C Ruby C Visual Basic C# Swift Python Objective-C PHP Groovy Javascript R Visual Basic.NET MATLAB Perl PL/SQL Assembly Go IEEE Spectrum 2016 순위 전체지표 IEEE Xplore만 순위 전체지표 IEEE Xplore만 1 C C 6 C# R 2 Java Java 7 PHP CUDA 3 Python Python 8 Javascript C++ 4 C++ MATLAB 9 Ruby Processing 5 R C# 10 Go LabView 다운로드수 ( 만번 ) 연도 1 1 NumPy/SciPy 1.1 데이터로살펴보는파이썬의현재 5

32 1.1.2 교육용언어로서의파이썬앞절을읽은독자들중에는 파이썬이제일인기좋은언어는아니구만 이라고생각하는독자도있을수있다. 그러나파이썬에는중요한특징이하나더있다. 바로프로그래밍을처음배우는사람이아주쉽게배울수있는언어라는점이다. 앞에서도설명했지만파이썬은언어스펙에대한정의를필요최소한으로줄인비교적간단한언어이며가독성도뛰어나다 ( 뒤에설명함 ). 이때문에파이썬은프로그래밍이나컴퓨터과학을처음배우는사람에게도안성맞춤인언어다. 미국의 39개최상위대학의컴퓨터과학과정에서파이썬을교육용으로가장많이사용한다는데이터가있다. 그림 1.2 는필립구오 (Philip Guo) 6 가조사한상위 10위컴퓨터과학과중 8곳에서컴퓨터과학입문강의에파이썬을사용하고있으며, 이를 39개대학전체로범위를넓히면 27곳의학과에서파이썬을사용하고있다. 일반적으로인기가높은 Java나 C보다파이썬이교육현장에서보다널리쓰이고있다는것은초심자에게도쉬운언어이기때문이다. 강의에서채택된수 언어 URL 6 CHAPTER 1 과학기술컴퓨팅과파이썬

33 1.1.3 일본에서의사용현황해외여러나라에서는웹개발이나과학기술컴퓨팅을막론하고파이썬이매우널리사용되고있지만일본은이트렌드에한발짝뒤처져있는느낌이다. 유럽이나미국의트렌드에뒤처져있는이유는무엇일까? 여러가지원인이있겠지만그중주된원인은다음과같은것을꼽을수있다. ❶ MATLAB 등기존언어로부터파이썬으로옮길이유가딱히없다. ❷ 일본어로된서적및웹에서의정보가충실하지못하다. ❸ Ruby를사용한다. ❹ 실행속도가느리다. ❶은 MATLAB 등다른언어의존재때문이다. MATLAB은이공계분야에서절대적인인기를자랑한다. MATLAB은이공계의다양한연구와설계작업에쓰이며많은분야에서사실상표준 (De Facto Standard) 의입지를확실히다져왔다. 그러나 MATLAB은유료이며여기에여러개의툴박스까지함께갖추려면고액의라이선스비용이필요하다. 이에비해파이썬은 MATLAB에뒤지지않을만큼다양한패키지를갖추고있으면서도대부분무료로사용할수있다. ❷는일본어로된문서가부족한것이원인이다. CPython( 파이썬의 C 언어구현, 뒤에설명함 ) 이나여러라이브러리는오픈소스 7 프로젝트로개발되지만이중일본어를구사할수있는개발자는비교적적다. 이때문에일본어문서는영어문서에비해서작성되는속도가늦다. ❸은 Ruby의존재때문이다. Ruby는마츠모토유키히로가개발한일본에서만들어진스크립트언어로파이썬과입지가비슷한면이있다. 일본어정보도비교적충실하므로분야에따라조금다르지만파이썬대신 Ruby를채택하는경우도적지않다. 마지막으로 ❹는파이썬의느린속도가문제가된다. 그러나이게사실일까? 일반적인경우파이썬이 C보다실행속도가느린것은사실이다. 하지만이는파이썬본체의기능만 7 소스코드가공개되어있으며, 자유롭게재배포가가능하고, 특정한제품에의존하지않는등의조건을만족하면오픈소스라불린다. 1.1 데이터로살펴보는파이썬의현재 7

34 을사용한경우의이야기다. 이책에서도소개할 NumPy 나 Numba 등서드파티라이브 러리의기능을사용하면경우에따라서는 C 와동등하거나혹은그이상의실행속도도 가능하다. 이부분에대해서는 1.3 절에서자세히설명하겠다. 1.2 파이썬기초지식 이번절에서는파이썬이어떤언어인지알기위해파이썬의역사와특징을소개하겠다. 가독성과유지보수의우수성, 강력한표준라이브러리를갖춘파이썬의특징과함께파이썬의풍부한생태계등에대해소개한다. 그리고파이썬을처음배울때망설이기쉬운버전 (ver. 2, 3) 의선택에대해서도다룬다 파이썬의개발배경파이썬은다양한분야에서사용되는범용프로그래밍언어다. 또한동적프로그래밍언 어 (dynamic programming language) 의한종류로사전에컴파일하는대신실행할때이를기계어로변환하는인터프리터를갖는언어다. 파이썬은귀도반로섬 (Guido van Rossum) 이 CWI(Centrum Wiskunde & Information) 에재직하던 1989 년개발을시작하여 1991년에초기버전이공개되었다. 현재파이썬의구현은표 1.3 에서보듯여러가지가존재한다. 이들모두무료로 ( 영리목적을포함하여 ) 사용할수있다. 레퍼런스구현 (reference implementation) 이되는 CPython 은버전업또한빈번하며비영리단체인 PSF(Python Software Foundation) 의관리아래배포되고있다. 8 윈도우, 리눅스, 맥OS 외에도많은운영체제에서동작하며 32비트 (x86) 뿐만아니라 64비트 (x64/x86-64) CPU에도대응하고있다. 64비트운영체제 /CPU로메모리 (memory, 주기억장치 ) 를대량으로사용하는과학기술컴퓨팅 (1.3 절참조 ) 을수행하려는경우에도적합하다. 8 버그수정을포함하여향후지속적인개발이실질적으로보장된것은 CPython 뿐이다. 그런의미에서 CPython 이가장안심하고사용할수있는구현이라고할수있다. 8 CHAPTER 1 과학기술컴퓨팅과파이썬

35 이런이유로파이썬의배포패키지 9 에가장많이쓰이는것도 CPython이다. 하지만 CPython 외의구현도각각뛰어난점이있으므로 Java나.NET 프레임워크와연동되는프로그램을작성하는경우등에는 CPython 이외의구현을사용하는것도검토해볼만하다. 1 3 구현명 CPython PyPy Jython IronPython 설명 C 로구현된파이썬의레퍼런스구현. 일반적으로가장널리사용된다. PSF License( 라이선스의내용은뒤에설명함 ) RPython(Restricted Python) 이라고도불리는파이썬의서브셋언어를구현한파이썬의인터프리터. JIT(Just-in-Time) 컴파일러를사용하여 CPython 보다속도가빠르다. MIT License Java 를사용한파이썬구현. Java 의다양한클래스를언어적경계없이 (seamless) 사용할수있다. PSF License(version 2).NET 프레임워크의 API 를직접호출할수있는파이썬구현 년 8 월기준파이썬 2.7 을구현하고있다. Apache License 파이썬의특징이번절에서는아래의키워드로파이썬의특징을설명한다. ❶ 가독성과유지보수성 ❷ 인터프리터언어 ❸ 스크립트언어 ❹ 접착제언어 ❺ 배터리내장 ❻ 풍부한생태계 9 파이썬본체와서드파티라이브러리를모아다양한용도로즉시사용가능한패키지를구성한것. Anaconda 와 WinPython 등이있다 ( 뒤에설명함 ). 1.2 파이썬기초지식 9

36 ❶ 가독성과유지보수성파이썬의문법은비교적간단하며 10 들여쓰기 (indent) 로코드블록의범위를결정하는구조또한뛰어난가독성을가능케한다. 이때문에파이썬은배우기쉽고, 코드를읽기쉬우며, 결과적으로뛰어난유지보수성이확보된다. 그리고파이썬에서는 코드를작성하는것보다읽는경우가많다 라는명제아래작성스타일에일관성을유지하여가독성을향상시키는것이중시된다. 이때문에 PEP 8(4.1 절참조 ) 이라는가이드라인이나와있으며기본적으로이가이드라인을따르도록추천하고있다. 11 그러나프로젝트에따라서는 PEP 8과다른코딩규약을두는경우도있다. ❷ 인터프리터언어파이썬은인터프리터언어다. 프로그램을순차적으로해석하여실행하는구조이며소스코드를컴파일할필요가없다. 인터프리터언어는실행할코드를입력하면서프로그램을순차적으로실행할수있다. ❸ 스크립트언어스크립트언어의정의는꽤애매하지만일반적으로동적타이핑언어일것, 인터프리터언어일것, 저수준기술이필요하지않으며소규모프로그램에적합할것정도의조건을갖춘언어를말한다. 다만, 파이썬은대규모프로그램도작성할수있다. Google이나 Dropbox 에서대규모시스템을구축하는데파이썬을사용한것 12 을보면이를알수있다. 또한스크립트언어는처리내용을간결하게작성할수있다는특징을갖는다. 이를보여주는단적인예를들자면 Java와 C로 Hello World 를출력하는프로그램을작성하면각각리스트 1.1, 리스트 1.2 와같은코드가된다. 그러나파이썬 3.x( 파이썬 2.x 와의차이점은뒤에설명함, 뒤에나올표 1.4 도함께참조 ) 에서는리스트 1.3 에서보듯딱한줄로가능하다. 10 간단한문법을갖게된것에는동적타이핑언어라는특징도무관하지않다. 11 이책에포함된샘플코드혹은실행예제도 PEP 8 을기본적으로준수하고있다. 완전히통일된것처럼보이지않는경우도있음을참고하자. 다음은모두옳은예이다. i = i + 1, submitted += 1, x = x * 2-1, hypot2 = x * x + y * y, c = (a + b) * (a - b) 12 Google 의사용예는 ❶ 을, Dropbox 의사용예는 ❷ 를참조하기바란다. ❶ ❷ watch?v=as3ishcknz0 10 CHAPTER 1 과학기술컴퓨팅과파이썬

37 파이썬에서는같은처리를구현하기위한코드량이다른언어보다줄어드는경향이있으 며, 이것은기억해야할문법이적다는의미이기도하다. 이때문에초심자가다루기쉬 우며프로그래밍교육용으로도폭넓게쓰일수있다. 1 1 Java Hello World public class HelloWorld { public static void main(string[] args) { System.out.println("Hello World"); } } 1 2 C Hello World #include <stdio.h> int main() { printf("hello World"); return 0; } 1 3 Hello World print("hello World") ❹ 접착제언어파이썬을흔히접착제언어 (glue language) 라고도부른다. 접착제언어란다른언어로작성된프로그램을쉽게통합할수있는언어를말한다. C나 C++, Fortran으로작성된기존프로그램을쉽게파이썬프로그램안에통합시킬수있는것이다 (12.1 절참조 ). 이는파이썬이과학기술컴퓨팅분야에서성공할수있었던큰요인중하나이기도하다. ❺ 배터리내장파이썬은다양한처리를수행할수있는강력한표준라이브러리를갖추고있는데이를 battery included 라표현하기도한다. 파이썬을설치하면곧바로표준라이브러리로프로그램을작성할수있다. 부록 B에서이표준라이브러리에대해간단히설명하고있으므로이를참조하기바란다. 1.2 파이썬기초지식 11

38 ❻ 풍부한생태계표준라이브러리외에도막대한수의서드파티라이브러리가만들어져있다. 이중과학기술컴퓨팅분야에서사용되는패키지로는 NumPy, SciPy, matplotlib, pandas 등이유명하다. 파이썬은이들패키지덕분에엔지니어링분야등에서절대적인인기를누리는 MATLAB과어깨를나란히하고있다. 이들서드파티라이브러리나개발환경등을포함한파이썬프로그램의개발환경전반을가리켜 생태계 (ecosystem) 라고부른다. 파이썬의생태계는현재거의대부분이무료소프트웨어임에도불구하고성능이상당히뛰어나다. 그림 에과학기술컴퓨팅을중심으로본파이썬생태계를도식화한그림을실었다. 이그림에서볼수있듯이파이썬본체다음으로기반이되는서드파티라이브러리는 NumPy 이다. 이패키지덕분에행렬계산이나합곱연산등다양한수치계산을빠르게수행할수있다. Python 고속연산프레임워크 / 다른언어와의연동 (Cython, Numba, Numexpr 등 ) NumPy 다차원배열 / 선형대수 / 행렬계산등 SciPy, pandas, scikit-learn, scikit-image, SymPy, Blaze, Statsmodels, Pillow 등통계 / 신호처리 / 이미지처리 / 데이터분석 / 머신러닝 / 수식처리 / 그외확장기능 matplotlib, MayaVi, Bokeh, VisPy 등그래프작성 / 데이터시각화 IPython 고성능대화형셸 (QtConsole, Notebook) Spyder, PyCharm, PTVS, Canopy 등통합개발환경 대표적인무료배포패키지 Anaconda Enthought Canopy 1 3 WinPython Python(x,y) 그리고 NumPy 를이용하는많은과학기술컴퓨팅용패키지가파이썬생태계의핵심 을이룬다. 그중에서도 SciPy 는거의필수라고할정도로고속푸리에변환 (Fast Fourier Transform, FFT) 이나최적화, 수치적분, 신호처리등다양한과학기술컴퓨팅과관련 13 다음페이지를참조하여저자가작성함. URL 12 CHAPTER 1 과학기술컴퓨팅과파이썬

39 된기능을제공하는패키지다. 그외에도이미지처리를위한 Pillow나 scikit-image, 머신러닝을위한 scikit-learn, 수식처리기능을제공하는 SymPy, 통계처리기능을제공하는 Statsmodels 등의패키지가있다. 그래프나데이터시각화도구도 (matplotlib, MayaVi, Bokeh, VisPy 등 ) 충실히갖춰져있다. 게다가지금까지열거했던다양한도구를대화형환경에서사용할수있게해주는중요한도구가 IPython이다. 운영체제나파일시스템과도연계할수있는고성능대화형셸기능을제공하는 IPython 셸외에도병렬계산엔진기능, Jupyter Notebook(IPython Notebook) 이라는웹기반의실행가능한문서포맷을제공한다. 그리고가장중요한것은이들도구를사용하게될환경을간단히구축할수있다는점이다. 그림 1.3 에서도배포패키지로나타낸부분을보면 Anaconda와 WinPython 등간단히설치하여바로사용할수있도록되어있다. 특히 Anaconda는윈도우, 리눅스, 맥 OS 어느환경에서도사용할수있으며 conda라는패키지관리명령어를통해의존성을편리하게관리할수있다. 이렇듯파이썬의생태계는매우충실하게갖추어져있으며이중대부분은무료로배포된다. column 귀도반로섬은 CWI에재직중에 CWI에서개발하던 ABC 라는명령형범용프로그래밍언어를사용하고있었다. 그러나 ABC의언어스펙에불만스러웠던점을해결한언어를직접개발하기로마음먹고크리스마스휴가동안개발을시작한다. 이것이파이썬의시작이었다. 귀도반로섬은이파이썬의초기버전을분산운영체제 Amoeba의시스템관리에응용하여성공을거둔다. 그후파이썬은 USENET( 네트워크상에있는여러서버를사용해서주로텍스트데이터를배포하던시스템 ) 에소개되어많은지지자를얻고커뮤니티를형성하면서개발이진행되게되었다. 파이썬이라는이름은 Monty Python s Flying Circus ( 몬티파이썬의하늘을나는서커스 ) 라는 TV 프로그램에서딴것이다. Monty Python은영국의코미디그룹으로이이름을딴프로그램이영국의 BBC에서 1970년대방송되고있었다. 귀도반로섬은짧고독특하면서도신비감을주는이름을고민하다가마침이방송의대본집에서파이썬이라는이름을골랐다. 덕분에파이썬을다룬서적에는비단뱀 ( 파이썬 ) 그림을표지로하는경우가많다. 1.2 파이썬기초지식 13

40 1.2.3 패키지관리시스템파이썬의패키지대부분은 PyPI(Python Package Index) 14 라는패키지저장소에서관리되고있다. 주요패키지는거의다 PyPI 에등록되어있다고보면된다. 그림 1.4 에 PyPI 를검색한웹페이지스냅샷을실었다. PyPI 에서오른쪽상단에위치한검책창에패키지명을입력하면패키지를검색할수있다. 검색결과를통해개발중인사이트의웹주소나설치를위한패키지를찾을수있다. 1 4 PyPI astropy PyPI 에등록된패키지는 pip 라는명령으로설치할수있다. pip 를사용하면 PyPI 에서패 키지를자동으로내려받은뒤의존패키지와함께설치한다 파이썬 2.x 대와파이썬 3.x 대 파이썬에대한큰문제중하나가버전 2.x 대와 3.x 대의서로다른구현이있다는점이다. 파이썬 3.x 대는 2008 년처음으로공개되었다. 이때언어의스펙에큰변화가있었다. 이 14 URL 14 CHAPTER 1 과학기술컴퓨팅과파이썬

41 때문에파이썬 3.x 대는파이썬 2.x 대에대한상호호환성을잃을만큼많은기능추가와 스펙변경이발생했다. 15 즉, 파이썬 2.x 대로작성된프로그램은파이썬 3.x 대에서수정 없이는동작하지않게되었다. 이런결단에는논란이많았지만파이썬개발자인귀도반 로섬은파이썬 2.x 대의단점을수정하고언어스펙의일관성을높이며초심자가좀더이 해하기쉬운언어를만들기위해결단을내렸다. 16 표 1.4 에파이썬 2.x 대와 3.x 대의주요차이점의예를들었다. 여기에실은차이점은극히 일부에지나지않지만문법이세부사항까지변경되어있음을알수있다. 단, 과학기술 컴퓨팅에사용되는 NumPy 나 SciPy 의프로그램작성법은파이썬 2.x 대와 3.x 대에서거 의차이가없다. 이책에서는파이썬을과학기술컴퓨팅에사용하려는입장에서파이썬 2.x 대와 3.x 대 중어느쪽을선택해야하냐는질문에지금까지설명했던이유외에도다음과같은이유 로 3.x 대의사용을추천한다. 파이썬 3.x 대를지원하지않는라이브러리도있지만과학기술컴퓨팅에사용되는 주요패키지 (NumPy, SciPy, matplotlib, pandas 등 ) 는파이썬 3.x 대를지원한다 앞으로있을표준라이브러리의개선, 언어의스펙추가는기본적으로파이썬 3.x 대에만적용될것이다 파이썬 2.x 대 ( 버전 2.7.x) 의지원은 2020 년으로종료된다 운영체제에파이썬 2.7 이선탑재되어있다는이유로파이썬 2.x 대를사용하는독자들도 있겠지만, 특별한사정이있는경우가아니라면굳이파이썬 2.x 대를선택해야할이유는 없다. 또, 특정패키지의파이썬 3.x 대지원여부는 Can I Use Python3? 17 문서나 PyPI 에서확인할수있다. 15 자세한내용은귀도반로섬이파이썬 3.x 대의새로운기능에대해밝힌다음문서를참조하기바란다. URL 16 귀도반로섬은자신을 BDFL(Benevolent Dictator For Life, 자비로운종신독재관 ) 이라칭하며파이썬의개발을현재도주도하고있다. 17 URL 파이썬기초지식 15

42 1 4 2 x 3 x 파이썬 2.x대 파이썬 3.x대 print x, y print(x, y) x = 7 / 2 # x==3 x = 7 // 2 # x==3 x = 7 / 2.0 # x==3.5 x = 7 / 2 # x==3.5 str=u' 문자 ' str=' 문자 ' if x <> y: if x!= y: str = raw_input(msg) str = input(msg) x = input(msg) x = eval(input(msg)) for line in.le.xreadlines(): for line in.le: apply(func, args, kwargs) func(*args, **kwargs) if m.has_key(n): if n in m: x = itertools.imap(func, seq) x = map(func, seq) x = itertools.izip(seq1, seq2) x = zip(seq1, seq2) fn.func_doc fn. doc raise "SomeError" raise Exception("SomeError") L = [x for x in 3,6] L = [x for x in (3,6)] column 파이썬은현재비영리단체인 PSF의관리아래레퍼런스구현인 CPython이 PSFL(Python Software Foundation License) 로공개되어있다. CPython과이책에서소개하는주요서드파티라이브러리의라이선스를표 C1.1에실었다. 각각의라이선스에대한자세한내용은여기서설명하지않지만중요한점은모두무료로사용할수있고, 카피레프트라이선스 (Copyleft License, 저작물의사용, 수정, 재배포등을제한하지않는것은물론이를이용한 2차저작물역시도사용, 수정, 재배포를제한하지못하도록하는라이선스 ) 는아니라는것이다. 따라서프로그램을수정하여독자적인소프트웨어를만들어도이소프트웨어의소스코드를공개할의무가없다. 이런높은자유도역시파이썬이널리보급되는한가지요인이되었다. C1 1 파이썬본체 PSFL NumPy, SciPy, pandas, IPython BSD License matplotlib matplotlib license(bsd 스타일 /PSFL 기반 ) Spyder MIT License 16 CHAPTER 1 과학기술컴퓨팅과파이썬

43 1.3 과학기술컴퓨팅과파이썬의관계 파이썬은과학기술컴퓨팅분야에서어떻게쓰이고있을까? 그리고파이썬이느리다는것은정말일까? 다른언어와비교해보면서과학기술컴퓨팅분야에서의파이썬의입지와전망을살펴보자 파이썬이과학기술컴퓨팅에사용되는이유먼저과학기술컴퓨팅이무엇인지부터알아보자. 과학기술컴퓨팅은다음과같은분야에서수행된다. 공학설계 ( 로켓, 전기제품등 ) 이론물리학 ( 이론의검증, 실증실험결과의분석등 ) 자연과학 ( 수목원구성설계를위한수리최적화등 ) 생명과학 ( 유전자염기서열분석등 ) 의학 ( 영상분석등 ) 이런분야에서는대상이되는제품이나자연현상을수식으로모형화한뒤, 해석적기법이나수치계산을통해이들의거동을예측한다. 또한데이터로부터숨겨진법칙이나특성을찾아내기도한다. 이런일을수행하는처리를과학기술컴퓨팅이라고한다. 과학기술컴퓨팅은 CPU 성능이전체처리성능을결정하는경우가많기때문에아래와같은특성을필요로한다. 64비트운영체제에대응하며메모리를대량으로사용한다 ( 대량의데이터를빠른속도로다루기위해서 ) CPU 자원을집중적으로사용하는처리에강해야한다 ( 고속연산라이브러리가존재 ) 프로그래밍이쉬우며유지보수성도좋아야한다 결과를해석하기위한도구 ( 시각화, 데이터분석 ) 가풍부해야한다물론분야마다필요한조건이다르겠지만위와같은요소를충족하는도구라면과학기술컴퓨팅에적합하다고할수있을것이다. 파이썬은이들요소를모두만족하므로많은사람의지지를받고있다. 1.3 과학기술컴퓨팅과파이썬의관계 17

44 파이썬의보급도이용하는도구를선택할때생각해야할중요한요소중하나로얼마나많은사용자가이용하고있는가를들수있다. 이용자수가적은도구는나중에지원이중단될우려도있고, 그도구를사용하기위한노하우역시얻기어렵다는문제가있다. 파이썬의이용실적은아직 C/C++, Fortran, MATLAB 등에비해떨어지지만유럽이나미국을중심으로과학기술컴퓨팅에사용하고있는사용자수가최근급격히증가하고있다는것을 1.1 절에서소개한바있다. 이책에서도소개할 NumPy, SciPy, matplotlib, pandas 등이개발되어널리쓰이게되면서보급이한층더순풍을타고있다. 쉬운사용파이썬의보급에는사용하기쉽다는점또한중요하게작용한다. 최근파이썬은매우쉽게사용할수있는언어가되었다. 플랫폼을타지않으며 64비트운영체제도잘지원한다. 과학기술컴퓨팅을위한패키지가잘갖춰져있으며 NumPy 와같은라이브러리는고속으로동작하는수치연산라이브러리에미리링크된패키지상태로배포된다. 그리고이들을한꺼번에설치할수있는배포패키지도잘되어있다. 예전에는설치시패키지의의존성문제를해결하느라골치를앓는경우가많았지만지금은그런번거로운환경구축작업이필요하지않게되었다 왜파이썬을사용하는가지금까지과학기술컴퓨팅에서파이썬의입지와그배경에대해서설명했다. 개발환경을쉽게갖출수있게된점이나무료로자유롭게사용할수있다는점등을설명했으나과학기술컴퓨팅에파이썬이쓰이는이유가이것만은아니다. 파이썬이과학기술컴퓨 팅에사용되는이유가무엇일까? 우선목적을빨리달성할수있기때문일것이다. 여기에는다음과같은요인이있다. 가독성이좋고유지보수성이뛰어나다 ( 자신이예전에작성한프로그램이나다른사람이작성한프로그램을이해하기쉽다 ) 18 CHAPTER 1 과학기술컴퓨팅과파이썬

45 동작하는프로그램을빠른시간내에작성할수있다 NumPy나 Cython(12.1절참조 ) 을사용해서실행속도를높일수있다프로그램의작성과정을쫓아가며위의세가지요인에대해생각해보자. 먼저, 그림 1.5 에프로그래밍과정을요약한도식을실었다. 고객에게납품하기위한소프트웨어를작성하는경우에는이것보다더본격적인개발기법을적용하겠지만, 개인이나소규모개발팀이어떤설계혹은분석용프로그램을구축하는경우에는이런간략한흐름을따르게된다. 그림 1.5 에서보듯먼저시스템설계를해야한다. 목적은?, 설계기법은?, 기대하는결과는? 이라는물음에답할수있어야한다. 시스템설계 코드작성 버그수정유지보수변경 테스팅 설계결과확인 1 5 그다음에는실제프로그램을작성한뒤프로그램의동작을테스트한다. 통상적으로는간단한단위테스트와출력을예상할수있는입력으로전체시스템의동작을확인하는정도가될것이다. 이과정에서가장중요한요소중하나가앞서설명한 가독성및유지보수성이뛰어날것 이라는점이다. 자신이작성한프로그램도시간이지나면무슨내용인지알수없게되는일이자주있다. 다른사람이작성한코드라면더더욱그러하다. 그러나가독성이뛰어난프로그램이라면코드의내용을곧바로이해할수있기때문에개발이어렵지않게진행된다. 프로그램코드를읽는시간은대체로코드를작성하는시간보다길기마련이다. 그렇기때문에프로그래밍언어에있어가독성이좋다는것은매우중요한요소가된다. 이어서그림 1.6 의구성요소를갖는프로그램을예로파이썬을사용하는것이얼마나유용할수있는지살펴보자. 그림 1.6 을보면어떤 ❶사용자인터페이스, ❷처리를제어하는 1.3 과학기술컴퓨팅과파이썬의관계 19

46 부분, ❸ 수치처리프레임워크, ❹ 메인처리부분, ❺ 처리결과를저장하는부분, ❻ 처리 결과를시각화하는기능을갖도록구성되어있다. 이들구성요소를모두단시간에개발할 수있다면 동작하는프로그램을빨리작성할수있는 언어라고할수있을것이다. ❹ 메인처리 처리결과저장 ❺ ❸ 수치처리프레임워크 시각화 ❻ ❷ 처리제어 ❶ 사용자인터페이스 사용자입력 출력 1 6 파이썬의경우 ❶에해당하는사용자인터페이스구축을위해 Tkinter나 Qt 등의 GUI(Graphic User Interface) 프레임워크 18 를쉽게사용할수있게되어있다. ❷번부분에서처리의제어는어떤언어를사용하든난이도가크게변하지않을것이다. ❸번에들어갈수치처리프레임워크는 NumPy가있으므로쉽게고속수치처리프로그램을작성할수있다. ❹번에해당하는메인처리부분역시다양한패키지 ( 라이브러리 ) 가준비되어있다. 예를들어, 천문학분야라면 astropy 19 를사용하면해당분야에서자주쓰이는처리를쉽게구현할수있다. ❺에해당하는처리결과저장도 6장 입력과출력 에서소개하겠지만매우간단하게다양한데이터형식으로저장할수있다. ❻처럼분석결과를시각화하는처리에도 matplotlib 을비롯하여강력한데이터시각화도구가준비되어있다. 이렇듯프로그램의각처리요소별로살펴봐도각각의요소를파이썬으로쉽게구현할수있기때문에목적을재빨리달성할수있다. 18 Tkinter 는 Tk GUI 툴킷에대한인터페이스로파이썬표준라이브러리에포함되어있다. Qt 도 GUI 툴킷의기능을제공하지만단지그정도에머무르지않고 애플리케이션프레임워크 의기능또한갖고있다. Qt 를상업적으로이용하려는경우에는라이선스에주의가필요하다. 19 URL 20 CHAPTER 1 과학기술컴퓨팅과파이썬

47 1.3.3 SciPy Stack 과학기술컴퓨팅에는 SciPy Stack 이라통틀어불리는도구들이주로사용된다. 20 SciPy 라고만하면라이브러리패키지 SciPy만을가리키는경우와이 SciPy Stack 을가리키는경우로나뉘는데, 이책에서는라이브러리패키지 SciPy만을가리키는의미로사용할것이다. 특별히구별할필요가있는경우에는 SciPy Library 및 SciPy Stack 이라부를것이다. SciPy Stack의핵심이되는패키지들을그림 1.7 에실었다. 그림 1.7 에서 matplotlib 이 NumPy 의위에그려져있는이유는 matplotlib 이 NumPy 에의존하고있다는것을나타낸다 ( 다시말해, NumPy가설치되어있지않으면동작하지않는다 ). 마찬가지로 pandas는 SciPy Library에의존하고있지만 SymPy는 NumPy에의존하지않는다. IPython은과학기술컴퓨팅을효율적으로수행하기위해빼놓을수없는사용자인터페이스 ( 셸 ) 로 SciPy Stack 이외의패키지에대한의존관계를갖지않는다. SciPy Stack IPython( 인터프리터셸 ) pandas SciPy Library matplotlib NumPy SymPy nose Python 1 7 SciPy Stack SciPy Stack 패키지는모두무료로사용할수있는오픈소스소프트웨어다. 각각의패키 지에대한간략한설명을표 1.5 에실었다. 20 SciPy 에대한자세한내용은다음 URL 을참조하기바란다. URL 과학기술컴퓨팅과파이썬의관계 21

48 1 5 SciPy Stack 패키지명 설명 Python 파이썬본체 ( 대개의경우 CPython 을가리킨다.) NumPy SciPy Library matplotlib pandas SymPy IPython nose 배열이나행렬의기본데이터타입과이들에대한연산을정의한수치계산용기본패키지 수치계산알고리즘과특정분야를위한툴박스등을모아놓은것. 신호처리, 최적화, 통계처리등에대한도구를포함하고있다. 통상적으로 SciPy 라고만하면이것을가리킨다. 인쇄물수준의고품질 2 차원플로팅및기본적인수준의 3 차원플로팅기능을제공하는패키지 데이터분석에서위력을발휘하는데이터구조및데이터조작함수를제공하는패키지 수식처리시스템 (Computer Algebra System, CAS) 을제공하는패키지 대화형인터페이스를제공하는인터페이스셸 파이썬프로그램의테스트를위한프레임워크 표 1.5 에포함된패키지외에도 Chaco, MayaVi, Cython, SciKits 21, h5py( 뒤에설명함 ), PyTables( 계층구조를갖는데이터를조작하기위한라이브러리 ) 등도 SciPy Stack 의일부로여겨지고있다. SciPy Stack 은과학기술컴퓨팅에필요한다양한기능을제공하고있으므로파이썬을통한과학기술컴퓨팅분야에서는이를사용하는것이당연시되고있다. 민간기업과커뮤니티파이썬이과학기술컴퓨팅에서더많이쓰이게되는이유가하나더있다. 관련된민간기업과커뮤니티의존재다. 일반적으로오픈소스프로젝트는개발리소스 ( 주로인력 ) 가제한적이며개발의중심이되는멤버가어떤이유로빠지게된경우급격히프로젝트가쇠퇴하는경우가있다. 이에비해파이썬은귀도반로섬이개발에참여하고있는한파이썬본체의구현일정에는문제가없을것이고그렇지않더라도 PSF(Python Software Foundation) 를중심으로개발이계속될것이라신뢰할수있다. 그리고대부분의표준라이브러리나패키지, 특히과학기술컴퓨팅과관계깊은패키지의개발에는민간기업의본격적인지원을받으며오픈소스소프트웨어로공개하는체제가구축되어있으므로향후의개발에대해서는낙관적으로봐도될것이다. 이런민간기업중대표격이 Enthought와 Continuum Analytics 다. 21 자세한사항은다음 URL 에있는모든패키지의인덱스를참조하기바란다. URL 22 CHAPTER 1 과학기술컴퓨팅과파이썬

49 Enthought는 2001년미국에서설립된민간기업이다. 파이썬을이용한과학기술컴퓨팅에특화된도구나컨설팅및교육을제공하고있다. 앞에서설명한과학기술컴퓨팅전용패키지그룹인 SciPy Stack 을주도적으로정비하고발전시키는역할을하고있다. 직원이자신의업무로 NumPy 등을개발하고있으므로이회사가사라지지않는한 SciPy Stack의개발은앞으로도활발하리라예상할수있다. Enthought는미국에서 SciPy Conference 라는행사를창설하고과학기술컴퓨팅에대한파이썬의이용을촉진하면서커뮤니티와의정보공유에도중요한역할을하고있다. Enthought Canopy라는배포패키지를배포하고있으며그중 Express 버전은일부기능이제한되었지만무료로사용할수있다. Continuum Analytics는데이터처리분야에서파이썬을발전시키는데주력하고있는미국기업이다. 사업모델은 Enthought와같이고성능도구나컨설팅및교육을제공하는사업을통해이익을낸다. Continuum Analytics 가무료로제공하고있는배포패키지는 Anaconda라고하는데대규모데이터처리, 예측분석 (predictive analysis), 과학기술컴퓨팅에특화된기능을제공하는 400개이상 (Anaconda 기준 ) 의패키지를포함하고있다. 이들패키지는기업이상업적으로이용할수도있다. 22 이기업도 NumPy, pandas, Blaze, Bokeh, Numba, IPython( 모두뒤에설명함 ) 등의오픈소스패키지개발에크게공헌하고있으며, 과학기술분야에서의파이썬의이용을촉진하고있는큰요인중하나가되고있다. 그리고 Continuum Analytics 도미국에서 PyData 라는컨퍼런스의스폰서를맡아데이터분석에파이썬을사용하는사람들의커뮤니티를지원하고있다. 파이썬과관련된컨퍼런스는위에서설명한 SciPy Conference 나 PyData 외에도 PyCon 이라는컨퍼런스가있다. PyCon은과학기술컴퓨팅이나데이터분석분야뿐만아니라파이썬전반을주제로하는회의다. PyCon은커뮤니티의뜻에따라운영되고있으며일본에서도 PyCon JP 라는이름으로같은형식의컨퍼런스가열리고있다. 이렇듯파이썬이라는언어를어떻게활용할지를주제로많은컨퍼런스가열리고있으며민간기업도커뮤니티를후하게지원하는형식으로기술혁신이진행되고있다. 이로부터 22 자세한사항은다음 URL 에서 Continuum Analytics 의홈페이지를참조하기바란다. URL 과학기술컴퓨팅과파이썬의관계 23

50 과학기술컴퓨팅에대한파이썬의이용도더욱늘어날것이라예상할수있다. 파이썬의활용사례과학기술컴퓨팅분야에서파이썬의활용사례를살펴보자. NASA( 미항공우주국 ) 에서도 SunPy 23 와같은프로젝트에서사용하고있다. 이외에도 NASA의스페이스셔틀사업의참가하기도했던 United Space Alliance(USA) 의성공적인적용사례도소개된바 24 있다. 또다른예로는파이썬을접착제언어로서의특징을살려프로그램의일부를파이썬으로개발한사례가다수있다. 일본에서는고에너지가속기연구기구에서고에너지가속기제어시스템에사용된사례가잘알려져있지만대부분의구성요소는 EPICS(Experimantal Physics and Industrial Control System) 로개발되었으며파이썬은제어애플리케이션의 GUI를만드는데쓰였다. 25 필자가종사하고있는분야에서는 GNU Radio라는파이썬으로개발된자유소프트웨어 (Free Software) 가사용된다. GNU Radio는소프트웨어무선 26 만을위한전용소프트웨어툴킷으로전파에대한베이스밴드처리를소프트웨어로구현한것이다. GNU Radio 는주로 C++ 과파이썬으로개발되었는데, 빠른속도가필요한신호처리부분은 C++ 로작성되었고이를파이썬으로작성된프로그램쪽에서호출하는구조로되어있다. 파이썬으로도프로그램을어떻게작성하느냐에따라 ( 이후절에서설명하듯 ) 상당한고속처리가가능한프로그램을작성할수있지만, 5년내지 10년정도되는상당한역사를가진프로젝트에서는접착제언어로서사용되는사례가많다 파이썬은정말속도가느린가파이썬은일반적으로속도가느리다는평가를받고있다. 실제로도그런지확인해보자. 모든언어를공정하게성능을평가한다는것은상당히어려운일이지만여기서는아래와같은간단한행렬계산을예를들어확인하려고한다. 23 URL 24 URL 25 자세한사항은다음 URL을참조하기바란다. URL 26 software defined radio라고도한다 24 CHAPTER 1 과학기술컴퓨팅과파이썬

51 M s ij = a k x ik y kj 1 1 k=1 이때 S, X, Y, A 는다음과같이정의하며, S = X = Y = s 11 s 12 s 1L s 21 s 22 s 2L s N1 s N2 s NL x 11 x 12 x 1M x 21 x 22 x 2M x N1 x N2 x NM y 11 y 12 y 1L y 21 y 22 y 2L y M1 y M2 y ML A =(a 1,a 2,,a M ) N = 10000, M = 1000, L = 으로한다. 이계산의실행속도를파이썬과 C 에서비 교한결과를표 1.6 에실었다. 1 6 C 언어 C 파이썬기본기능만파이썬 + NumPy 속도 409 초 120,000 초 5 초 이번에나온결과를보면파이썬이기본기능만으로큰행렬을계산하면 C보다터무니없이많은시간이걸리지만, 과학기술컴퓨팅분야표준적인라이브러리인 NumPy를사용하면코드의양도대폭줄어들거니와실행속도또한 1만배이상빨라진다. 그리고 C보다도빠른계산속도가나온것을알수있다. 과학기술분야의수치계산에서실행속도가문제가되는것은이예제와같이합곱연산을매우많이반복하는경우인데, 이결과만보면파이썬과 NumPy를같이사용하는한실행속도면에서의큰문제는없다고할수있다. 1.3 과학기술컴퓨팅과파이썬의관계 25

52 성능비교의세부사항이벤치마크테스트를수행한환경을살펴보자. 동작환경은다음과같다. 운영체제 : 윈도우 8.1 CPU: Intel Core i5 4200M 2.5GHz C 컴파일러 : Cygwin gcc (x86-64) 파이썬 : Ver 3.5.2(IPython 4.2.0, 64bit) NumPy: Ver 1.11(MKL 11.3도함께사용 ) 다음으로벤치마크테스트에사용된 C 프로그램을리스트 1.4 에실었다. 이프로그램은힙메모리 27 를사용하면실행속도가느려지므로큰배열을지역변수로만들어스택에두었다. 스택의크기는대체로그리크지않으므로아무대비를하지않으면오류가발생하게된다. 그래서컴파일할때다음과같은옵션을준다. > gcc -O3 -o c_bench -Wl,--stack, c_bench1.c -Wl,.stack, 부분은링커 28 에게스택메모리로확보할메모리크기를지정 해준다. -O3 는컴파일할때의최적화옵션이다. 1 4 C #include <stdio.h> #include <windows.h> #include <stdlib.h> const int N = 10000; const int M = 1000; const int L = 10000; int main(int argc, char** argv) { int i, j, k; double a[m], S[N][L], x[n][m], y[m][l]; LARGE_INTEGER start_pc, end_pc, freq_pc; 27 칼럼 스택메모리와힙메모리 를참조하기바란다. 28 링커 (linker) 는컴파일결과에필요한라이브러리등을연결해서실행파일로만들어주는프로그램을말한다. 26 CHAPTER 1 과학기술컴퓨팅과파이썬

53 /* ❶ 배열의각요소에값을설정 */ srand(1); double rnd_max = (double) RAND_MAX; for (i=0; i<m; i++) { a[i] = (rnd_max*0.5 - rand()) / rnd_max; } for (i=0; i<n; i++) { for (j=0; j<m; j++) { x[i][j] = (rnd_max*0.5 - rand()) / rnd_max; } } for (i=0; i<m; i++) { for (j=0; j<l; j++) { y[i][j] = (rnd_max*0.5 - rand()) / rnd_max; } } for (i=0; i<n; i++) { for (j=0; j<l; j++) { S[i][j] = 0.0; } } /* ❷ 처리를시작한시각을측정 */ QueryPerformanceFrequency( &freq_pc ); QueryPerformanceCounter( &start_pc ); /* ❸ 식 1.1 과같이행렬계산을수행 ( 처리시간측정대상 ) */ for (i=0; i<n; i++) { for (j=0; j<l; j++) { for (k=0; k<m; k++) { S[i][j] += a[k]*x[i][k]*y[k][j]; } } } /* ❹ 처리완료된시각을측정 */ QueryPerformanceCounter( &end_pc ); double sec_pc = (end_pc.quadpart - start_pc.quadpart) / (double)freq_pc.quadpart; printf(" 계산시간 = %.3lf[ms]\n", sec_pc * 1000); /* ❺ 컴파일러최적화로인해계산이생략되지않도록계산후에무작위로결과에접근 */ i = (int) (start_pc.quadpart % N); j = (int) (end_pc.quadpart % L); printf("s[%d][%d] = %.3lf\n", i, j, S[i][j]); } return 0; 1.3 과학기술컴퓨팅과파이썬의관계 27

54 리스트 1.4 를보면 ❶에서계산할배열값을설정하고, ❷에서계산을시작할시점의시각을측정한뒤, ❸부분에서식 1.1 계산을실제수행하고, ❹에서는계산이종료된시점의시각을측정한다. 또, 컴파일러의최적화옵션으로인해일부계산이생략되는일이없도록 ❺에서계산결과에무작위로접근하는과정을추가했다. 이번에는 BLAS(Basic Linear Algebra Subprogram) 29 나, SIMD(11장에서설명 ) 를사용하지않았으므로이들을이용해서프로그램을작성하면더속도를올릴수있다. 이번에는파이썬프로그램을살펴보자. 리스트 1.5 에조금전의 C 프로그램과동등한계산을수행하는프로그램을실었다. 먼저 C 프로그램과같은내용의계산을그대로작성해서함수 mult_basic 을정의했다. 이함수는 NumPy 의행렬연산기능을사용하지않고파이썬의 for문으로구현되었기 ( 앞에나온표 1.6 에서 파이썬기본기능만 에해당 ) 때문에처리속도가늦으리라예상할수있다. 그래서그뒤에 NumPy의연산기능을최대한활용한함수 mult_fast 를작성했다. 이함수는 mult_basic 과완전히같은내용의계산을 NumPy를이용해서구현한것이다. NumPy를사용하면이예제에서보듯간결한코드를작성할수있다. 거기다눈치채지도못한사이에수치연산라이브러리 (BLAS 등 ) 를사용하여고속으로계산을수행하게된다. 이벤치마크테스트에서는빠른수치연산라이브러리를사용하고있지않기때문에 C 프로그램쪽이불리한조건을안고있다. 그러나여기서중요한것은파이썬으로도수치연산라이브러리를명시적으로사용한것은아니라는점이다. 파이썬에서 NumPy 등을사용하면자동적으로이들라이브러리를사용할수있다. 1 5 import numpy as np import time def mult_basic(n, M, L, a, x, y): """ 행렬계산을사용하지않고 for 문으로사용해서계산하는함수단, ndarray 를사용하지않으면배열을원하는크기로만들기가어렵기때문에입력변수는 NumPy 의 ndarray 로만들어넘긴다. """ 29 선형대수를위한수치계산라이브러리. BLAS 의구현에는 OpenBLAS, ATLAS(Automatically Tuned Linear Algebra Software), LAPACK(Linear Algebra PACK-age), Intel MKL(Math Kernel Library) 등이있다. 28 CHAPTER 1 과학기술컴퓨팅과파이썬

55 r = np.empty((n, L)) for i in range(n): for j in range(l): tmp = 0.0 for k in range(m): tmp = tmp + a[k]*x[i][k]*y[k][j] r[i][j] = tmp return r def mult_fast(n, M, L, a, x, y): """ NumPy 의함수를사용한고속계산함수함수 mult_basic 과같은결과를얻는다. """ return np.dot(x*a, y) # 한줄로처리할수있다. if name == ' main ': # 계산대상이되는배열생성 np.random.seed(0) N = M = 1000 L = a = np.random.random(m) x = np.random.random((n, M)) y = np.random.random((m, L)) # 행렬계산을사용하지않고 for 문사용 ts = time.time() r1 = mult_basic(n, M, L, a, x, y) te = time.time() print("basic method : %.3f [ms]" % (1000*(te - ts))) # NumPy 를사용한고속계산 ts = time.time() r2 = mult_fast(n, M, L, a, x, y) te = time.time() print("fast method : %.3f [ms]" % (1000*(te - ts))) column C 같은컴파일언어, 다시말해실행하기전에프로그램을컴파일해야하는언어에대해이야기하려면먼저스택메모리 (stack memory) 와힙메모리 (heap memory) 라는두종류의메모리에대해서알아둘필요가있다. 스택메모리와힙메모리는모두프로그램안에서일시적으로사용하는메모리로대개의경우 RAM(Random Access Memory) 상어딘가에저장된다. 이들두가지메모리의차이를간단히설명하면다음과같다. 스택메모리는컴파일러나운영체제가자동적으로할당하거나해제하는메모리를말한다. 스택메모리의크기는프로그램을컴파일및링크하는시점에이미결정되어있으며이를바꿀수없다. C의 1.3 과학기술컴퓨팅과파이썬의관계 29

56 경우는 자동변수 에속하는변수 ( 함수안에서정의된지역변수등 ) 가스택메모리에저장된다. 아래에 그예를들겠다. double times_n(int n) { int i, sum=0; // ❶ double b[3] = {1.1, 2.1, 3.4}; // ❷ } for (i=0; i < 3; i++) { sum += b[i] * n; } return sum; 함수 times_n에서는정수 i와 sum, 그리고배정밀도부동소수 (double) 의배열 b를사용하겠다고선언하고있다 (❶, ❷). 이변수들은이함수안에서만사용할수있는지역변수다. 이함수를호출하면자동적으로메모리에할당되며함수가종료되면역시자동적으로버려진다. 그런변수를 자동변수 라고부르며스택메모리에저장된다. 이번에는힙메모리의사례를살펴보자. 아래의코드를보기바란다. double* setvec(int n_size) { int i; double *vec; vec = (double *) malloc(sizeof(double) * n_size); // ❸ for (i=0; i<n_size; i++) { vec[i] = 1.01 * i; } } return vec; 이프로그램에서는함수 setvec의인자로 n_size가주어지며이값을크기로하는배정밀도부동소수타입 (double) 의배열이 ❸에서할당된다. 필요한배열의크기를미리알수없는경우에는이예제에서보듯 malloc 같은함수를사용하여동적으로메모리를할당받는다. 이때이변수가저장되는영역은힙메모리로부터할당된다. 일반적으로크기가큰변수나메모리를동적으로할당받아야하는변수는힙메모리에저장되고, 그외의경우는스택메모리에저장된다고보면된다. 이에비해파이썬에서는 C처럼스택이나힙이프로그래머에게노출되지않는다. 메모리전반을확보하는데신경을써야할경우는있지만메모리에대한세부사항을신경쓸필요가거의없기때문에파이썬을익히기쉬운언어라고하는것이다. 30 CHAPTER 1 과학기술컴퓨팅과파이썬

57 1.4 정리 세계적인추세를보면파이썬은단지교육용언어로만주목받는것이아니라과학기술컴퓨팅분야에서도널리쓰이고있는언어다. 실제로파이썬이대두하고있는양상은여러가지데이터를봐도알수있다. 이에비해일본에서는과학기술컴퓨팅분야에서아직활발하게쓰이고있는단계는아니지만해외의사례가속속전해지면서인기도가상승하고있다. 그리고그근거로파이썬의뛰어난언어적특성과과학기술컴퓨팅에대한이용을촉진할만한규모의생태계가존재한다는것을설명했다. 파이썬의속도가느리다는오해에대해서는 NumPy 를사용한프로그램을반례로제시했다. 적절한라이브러리만함께사용할수있다면파이썬은 C에도뒤지지않을정도의실행속도를얻을수있다. 이렇듯과학기술컴퓨팅분야에서도적절하게사용한다면파이썬은강력하고효율적인도구가될수있다. 앞으로의장에서는프로그래밍에필요한기본사항 (2장, 3장 ), 언어의스펙 (4~6 장 ), 주요라이브러리 (7~10장), 고속계산 / 최적화기법 (11장, 12장 ) 을소개할것이다. 파이썬의힘을충분히끌어내기위한기초지식을탄탄히다져가도록하자. 1.4 정리 31

Microsoft PowerPoint - chap01-C언어개요.pptx

Microsoft PowerPoint - chap01-C언어개요.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 프로그래밍의 기본 개념을

More information

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx #include int main(void) { int num; printf( Please enter an integer "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을 작성하면서 C 프로그램의

More information

PowerPoint Presentation

PowerPoint Presentation 데이터처리프로그래밍 Data Processing Programming 01 파이썬프로그래밍언어 목차 1. 프로그래밍언어 2. 파이썬소개 3. 파이썬설치와실행 데이터처리프로그래밍 (Data Processing Programming) - 01 파이썬프로그래밍언어 3 1. 프로그래밍언어 프로그래밍언어개념 프로그래밍언어 programming language : 컴퓨터시스템을구동시키는소프트웨어를작성하기위한형식언어

More information

C++ Programming

C++ Programming C++ Programming 예외처리 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 예외처리 2 예외처리 예외처리 C++ 의예외처리 예외클래스와객체 3 예외처리 예외를처리하지않는프로그램 int main() int a, b; cout > a >> b; cout

More information

C++ Programming

C++ Programming C++ Programming 연산자다중정의 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 연산자다중정의 C++ 스타일의문자열 2 연산자다중정의 연산자다중정의 단항연산자다중정의 이항연산자다중정의 cin, cout 그리고 endl C++ 스타일의문자열 3 연산자다중정의 연산자다중정의 (Operator

More information

Multi-pass Sieve를 이용한 한국어 상호참조해결 반-자동 태깅 도구

Multi-pass Sieve를 이용한 한국어 상호참조해결 반-자동 태깅 도구 Python: 파이썬이란무엇인가? Kangwon Natl. University Department of Computer Science Cheoneum Park Intelligent software Lab. 파이썬이란? Python 1990년암스테르담의귀도반로섬 (Guido Van Rossum) 이개발한인터프리터언어 국내외에서교육, 실무등에서많이사용 구글의소프트웨어,

More information

iOS ÇÁ·Î±×·¡¹Ö 1205.PDF

iOS ÇÁ·Î±×·¡¹Ö 1205.PDF iphone ios 5 DEVELOPMENT ESSENTIALS Copyright 2011 Korean Translation Copyright 2011 by J-Pub. co. The Korean edition is published by arrangement with Neil Smyth through Agency-One, Seoul. i iphone ios

More information

JVM 메모리구조

JVM 메모리구조 조명이정도면괜찮조! 주제 JVM 메모리구조 설미라자료조사, 자료작성, PPT 작성, 보고서작성. 발표. 조장. 최지성자료조사, 자료작성, PPT 작성, 보고서작성. 발표. 조원 이용열자료조사, 자료작성, PPT 작성, 보고서작성. 이윤경 자료조사, 자료작성, PPT작성, 보고서작성. 이수은 자료조사, 자료작성, PPT작성, 보고서작성. 발표일 2013. 05.

More information

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과 1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과 학습내용 1. Java Development Kit(JDK) 2. Java API 3. 자바프로그래밍개발도구 (Eclipse) 4. 자바프로그래밍기초 2 자바를사용하려면무엇이필요한가? 자바프로그래밍개발도구 JDK (Java Development Kit) 다운로드위치 : http://www.oracle.com/technetwork/java/javas

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 System Software Experiment 1 Lecture 5 - Array Spring 2019 Hwansoo Han (hhan@skku.edu) Advanced Research on Compilers and Systems, ARCS LAB Sungkyunkwan University http://arcs.skku.edu/ 1 배열 (Array) 동일한타입의데이터가여러개저장되어있는저장장소

More information

<4D F736F F F696E74202D20C1A632C0E520C7C1B7CEB1D7B7A5B0B3B9DFB0FAC1A4>

<4D F736F F F696E74202D20C1A632C0E520C7C1B7CEB1D7B7A5B0B3B9DFB0FAC1A4> 쉽게풀어쓴 C 언어 Express 제 2 장프로그램개발과정 통합개발환경 통합개발환경 (IDE: integrated development environment) 에디터 + 컴파일러 + 디버거 Visual C++: 이클립스 (eclipse): Dev-C++: 마이크로소프트제작 오픈소스프로젝트 오픈소스프로젝트 통합개발환경의종류 비주얼 C++(Visual C++)

More information

Contributors: Myung Su Seok and SeokJae Yoo Last Update: 09/25/ Introduction 2015년 8월현재전자기학분야에서가장많이쓰이고있는 simulation software는다음과같은알고리즘을사용하고있다.

Contributors: Myung Su Seok and SeokJae Yoo Last Update: 09/25/ Introduction 2015년 8월현재전자기학분야에서가장많이쓰이고있는 simulation software는다음과같은알고리즘을사용하고있다. Contributors: Myung Su Seok and SeokJae Yoo Last Update: 09/25/2015 1. Introduction 2015년 8월현재전자기학분야에서가장많이쓰이고있는 simulation software는다음과같은알고리즘을사용하고있다. 2. Installation 2.1. For Debian GNU/Linux 국내에서사용되는컴퓨터들의

More information

슬라이드 1

슬라이드 1 -Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역

More information

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - ch07 - 포인터 pm0415 2015-1 프로그래밍언어 7. 포인터 (Pointer), 동적메모리할당 2015 년 4 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) Outline 포인터 (pointer) 란? 간접참조연산자

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 공개 SW 솔루션설치 & 활용가이드 기타 > AI 제대로배워보자 How to Use Open Source Software Open Source Software Installation & Application Guide CONTENTS 1. 개요 2. 기능요약 3. 실행환경 4. 설치및실행 5. 기능소개 6. 활용예제 7. FAQ 8. 용어정리 - 3-1. 개요

More information

untitled

untitled 시스템소프트웨어 : 운영체제, 컴파일러, 어셈블러, 링커, 로더, 프로그래밍도구등 소프트웨어 응용소프트웨어 : 워드프로세서, 스프레드쉬트, 그래픽프로그램, 미디어재생기등 1 n ( x + x +... + ) 1 2 x n 00001111 10111111 01000101 11111000 00001111 10111111 01001101 11111000

More information

SIGIL 완벽입문

SIGIL 완벽입문 누구나 만드는 전자책 SIGIL 을 이용해 전자책을 만들기 EPUB 전자책이 가지는 단점 EPUB이라는 포맷과 제일 많이 비교되는 포맷은 PDF라는 포맷 입니다. EPUB이 나오기 전까지 전 세계에서 가장 많이 사용되던 전자책 포맷이고, 아직도 많이 사 용되기 때문이기도 한며, 또한 PDF는 종이책 출력을 위해서도 사용되기 때문에 종이책 VS

More information

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 (   ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각 JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( http://java.sun.com/javase/6/docs/api ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각선의길이를계산하는메소드들을작성하라. 직사각형의가로와세로의길이는주어진다. 대각선의길이는 Math클래스의적절한메소드를이용하여구하라.

More information

C# Programming Guide - Types

C# Programming Guide - Types C# Programming Guide - Types 최도경 lifeisforu@wemade.com 이문서는 MSDN 의 Types 를요약하고보충한것입니다. http://msdn.microsoft.com/enus/library/ms173104(v=vs.100).aspx Types, Variables, and Values C# 은 type 에민감한언어이다. 모든

More information

Microsoft PowerPoint - [2009] 02.pptx

Microsoft PowerPoint - [2009] 02.pptx 원시데이터유형과연산 원시데이터유형과연산 원시데이터유형과연산 숫자데이터유형 - 숫자데이터유형 원시데이터유형과연산 표준입출력함수 - printf 문 가장기본적인출력함수. (stdio.h) 문법 ) printf( Test printf. a = %d \n, a); printf( %d, %f, %c \n, a, b, c); #include #include

More information

Microsoft PowerPoint - Java7.pptx

Microsoft PowerPoint - Java7.pptx HPC & OT Lab. 1 HPC & OT Lab. 2 실습 7 주차 Jin-Ho, Jang M.S. Hanyang Univ. HPC&OT Lab. jinhoyo@nate.com HPC & OT Lab. 3 Component Structure 객체 (object) 생성개념을이해한다. 외부클래스에대한접근방법을이해한다. 접근제어자 (public & private)

More information

금오공대 컴퓨터공학전공 강의자료

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 13. 포인터와배열! 함께이해하기 2013.10.02. 오병우 컴퓨터공학과 13-1 포인터와배열의관계 Programming in C, 정재은저, 사이텍미디어. 9 장참조 ( 교재의 13-1 은읽지말것 ) 배열이름의정체 배열이름은 Compile 시의 Symbol 로서첫번째요소의주소값을나타낸다. Symbol 로서컴파일시에만유효함 실행시에는메모리에잡히지않음

More information

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100 2015-1 프로그래밍언어 9. 연결형리스트, Stack, Queue 2015 년 5 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) 연결리스트 (Linked List) 연결리스트연산 Stack

More information

Microsoft PowerPoint - 00_(C_Programming)_(Korean)_Computer_Systems

Microsoft PowerPoint - 00_(C_Programming)_(Korean)_Computer_Systems C Programming 컴퓨터시스템 (Computer Systems) Seo, Doo-Ok Clickseo.com clickseo@gmail.com 목 차 컴퓨터시스템 프로그래밍언어 2 컴퓨터시스템 컴퓨터시스템 컴퓨터하드웨어 컴퓨터소프트웨어 프로그래밍언어 3 컴퓨터시스템 컴퓨터시스템 하드웨어 : 물리적인장비 소프트웨어 : 프로그램 ( 명령어 ) 들의집합 Computer

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 클래스, 객체, 메소드 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 필드만있는클래스 텔레비젼 2 예제 1. 필드만있는클래스 3 예제 2. 여러개의객체생성하기 4 5 예제 3. 메소드가추가된클래스 public class Television { int channel; // 채널번호 int volume; // 볼륨 boolean

More information

17장 클래스와 메소드

17장 클래스와 메소드 17 장클래스와메소드 박창이 서울시립대학교통계학과 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 1 / 18 학습내용 객체지향특징들객체출력 init 메소드 str 메소드연산자재정의타입기반의버전다형성 (polymorphism) 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 2 / 18 객체지향특징들 객체지향프로그래밍의특징 프로그램은객체와함수정의로구성되며대부분의계산은객체에대한연산으로표현됨객체의정의는

More information

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - chap06-2pointer.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.

More information

C 프로그래밍 언어 입문 C 프로그래밍 언어 입문 김명호저 숭실대학교 출판국 머리말..... C, C++, Java, Fortran, Python, Ruby,.. C. C 1972. 40 C.. C. 1999 C99. C99. C. C. C., kmh ssu.ac.kr.. ,. 2013 12 Contents 1장 프로그래밍 시작 1.1 C 10 1.2 12

More information

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 System call table and linkage v Ref. http://www.ibm.com/developerworks/linux/library/l-system-calls/ - 2 - Young-Jin Kim SYSCALL_DEFINE 함수

More information

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조 - Part2- 제 2 장다차원배열이란무엇인가 학습목차 2.1 다차원배열이란 2. 2 2 차원배열의주소와값의참조 2.1 다차원배열이란 2.1 다차원배열이란 (1/14) 다차원배열 : 2 차원이상의배열을의미 1 차원배열과다차원배열의비교 1 차원배열 int array [12] 행 2 차원배열 int array [4][3] 행 열 3 차원배열 int array [2][2][3]

More information

13Åë°è¹é¼Ł

13Åë°è¹é¼Ł 이면은빈공간입니다. National Statistics White Paper 2012 National Statistics White Paper ii _ STATISTICS KOREA 2012 _ iii 2012 National Statistics White Paper 1 26 2 27 3 28 4 29 5 30 6 31 7 32 8 33 9 34 10 35

More information

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770> 연습문제해답 5 4 3 2 1 0 함수의반환값 =15 5 4 3 2 1 0 함수의반환값 =95 10 7 4 1-2 함수의반환값 =3 1 2 3 4 5 연습문제해답 1. C 언어에서의배열에대하여다음중맞는것은? (1) 3차원이상의배열은불가능하다. (2) 배열의이름은포인터와같은역할을한다. (3) 배열의인덱스는 1에서부터시작한다. (4) 선언한다음, 실행도중에배열의크기를변경하는것이가능하다.

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 실습 1 배효철 th1g@nate.com 1 목차 조건문 반복문 System.out 구구단 모양만들기 Up & Down 2 조건문 조건문의종류 If, switch If 문 조건식결과따라중괄호 { 블록을실행할지여부결정할때사용 조건식 true 또는 false값을산출할수있는연산식 boolean 변수 조건식이 true이면블록실행하고 false 이면블록실행하지않음 3

More information

본책- 부속물

본책- 부속물 PROGRAMMING RUBY PROGRAMMING RUBY : THE PRAGMATIC PROGRAMMER S GUIDE, 2nd Ed. Copyright c 2005 Published in the original in the English language by The Pragmatic Programmers, LLC, Lewisville. All rights

More information

사물인터넷비즈니스빅뱅_내지_11차_160421.indd

사물인터넷비즈니스빅뱅_내지_11차_160421.indd 사물인터넷 빅뱅 2016. 연대성 All Rights Reserved. 초판 1쇄 발행 2016년 4월 29일 지은이 연대성 펴낸이 장성두 펴낸곳 제이펍 출판신고 2009년 11월 10일 제406 2009 000087호 주소 경기도 파주시 문발로 141 뮤즈빌딩 403호 전화 070 8201 9010 / 팩스 02 6280 0405 홈페이지 www.jpub.kr

More information

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

Microsoft PowerPoint 자바-기본문법(Ch2).pptx 자바기본문법 1. 기본사항 2. 자료형 3. 변수와상수 4. 연산자 1 주석 (Comments) 이해를돕기위한설명문 종류 // /* */ /** */ 활용예 javadoc HelloApplication.java 2 주석 (Comments) /* File name: HelloApplication.java Created by: Jung Created on: March

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Lecture 02 프로그램구조및문법 Kwang-Man Ko kkmam@sangji.ac.kr, compiler.sangji.ac.kr Department of Computer Engineering Sang Ji University 2018 자바프로그램기본구조 Hello 프로그램구조 sec01/hello.java 2/40 자바프로그램기본구조 Hello 프로그램구조

More information

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2 객체지향프로그래밍 IT CookBook, 자바로배우는쉬운자료구조 q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2 q 객체지향프로그래밍의이해 v 프로그래밍기법의발달 A 군의사업발전 1 단계 구조적프로그래밍방식 3 q 객체지향프로그래밍의이해 A 군의사업발전 2 단계 객체지향프로그래밍방식 4 q 객체지향프로그래밍의이해 v 객체란무엇인가

More information

API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Docum

API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Docum API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 2012.11.23 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Document Distribution Copy Number Name(Role, Title) Date

More information

금오공대 컴퓨터공학전공 강의자료

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include

More information

BMP 파일 처리

BMP 파일 처리 BMP 파일처리 김성영교수 금오공과대학교 컴퓨터공학과 학습내용 영상반전프로그램제작 2 Inverting images out = 255 - in 3 /* 이프로그램은 8bit gray-scale 영상을입력으로사용하여반전한후동일포맷의영상으로저장한다. */ #include #include #define WIDTHBYTES(bytes)

More information

- i - - ii - - iii - - iv - - v - - vi - - vii - - viii - - ix - - x - - xi - - xii - - xiii - - xiv - - xv - - xvi - - xvii - - xviii - - xix - - xx - - xxi - - xxii - - xxiii - - xxiv - - 3 - - 4 -

More information

Microsoft PowerPoint - chap-02.pptx

Microsoft PowerPoint - chap-02.pptx 쉽게풀어쓴 C 언어 Express 제 2 장프로그램개발과정 컴퓨터프로그래밍기초 프로그램작성과정 에디터 (editer) 컴파일러 (compiler) 링커 (linker) 로더 (loader) 소스파일 test.c 오브젝트파일 test.obj 실행파일 test.exe 통합개발환경 (IDE) 컴퓨터프로그래밍기초 2 프로그램작성단계 편집 (edit) 에디터를이용하여원하는작업의내용을기술하여소스코드작성

More information

PowerPoint Presentation

PowerPoint Presentation #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을작성하면서 C 프로그램의구성요소에대하여알아본다.

More information

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074> SIMATIC S7 Siemens AG 2004. All rights reserved. Date: 22.03.2006 File: PRO1_17E.1 차례... 2 심벌리스트... 3 Ch3 Ex2: 프로젝트생성...... 4 Ch3 Ex3: S7 프로그램삽입... 5 Ch3 Ex4: 표준라이브러리에서블록복사... 6 Ch4 Ex1: 실제구성을 PG 로업로드하고이름변경......

More information

Microsoft Word _mentor_conf_output5.docx

Microsoft Word _mentor_conf_output5.docx < 이재성교수님연구실멘토링자료 > 20151012 최현준제작 # 목차 1. 간단한파이썬 1.1 파이썬설치및설명. 1.2 파이썬데이터형과연산자. 1.3 간단한입출력과형변환. 1.4 for, while, if, with ~ as, indent. 1.5 def 함수정의와 default / return values 1.6 import 와 try except, pip.

More information

wtu05_ÃÖÁ¾

wtu05_ÃÖÁ¾ 한 눈에 보는 이달의 주요 글로벌 IT 트렌드 IDG World Tech Update May C o n t e n t s Cover Story 아이패드, 태블릿 컴퓨팅 시대를 열다 Monthly News Brief 이달의 주요 글로벌 IT 뉴스 IDG Insight 개발자 관점에서 본 윈도우 폰 7 vs. 아이폰 클라우드 컴퓨팅, 불만 검증 단계 돌입 기업의

More information

OCW_C언어 기초

OCW_C언어 기초 초보프로그래머를위한 C 언어기초 2 장 : C 프로그램시작하기 2012 년 이은주 학습목표 을작성하면서 C 프로그램의구성요소 주석 (comment) 이란무엇인지알아보고, 주석을만드는방법 함수란무엇인지알아보고, C 프로그램에반드시필요한 main 함수 C 프로그램에서출력에사용되는 printf 함수 변수의개념과변수의값을입력받는데사용되는 scanf 함수 2 목차 프로그램코드

More information

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning C Programming Practice (II) Contents 배열 문자와문자열 구조체 포인터와메모리관리 구조체 2/17 배열 (Array) (1/2) 배열 동일한자료형을가지고있으며같은이름으로참조되는변수들의집합 배열의크기는반드시상수이어야한다. type var_name[size]; 예 ) int myarray[5] 배열의원소는원소의번호를 0 부터시작하는색인을사용

More information

JAVA PROGRAMMING 실습 08.다형성

JAVA PROGRAMMING 실습 08.다형성 2015 학년도 2 학기 1. 추상메소드 선언은되어있으나코드구현되어있지않은메소드 abstract 키워드사용 메소드타입, 이름, 매개변수리스트만선언 public abstract String getname(); public abstract void setname(string s); 2. 추상클래스 abstract 키워드로선언한클래스 종류 추상메소드를포함하는클래스

More information

Microsoft PowerPoint - chap03-변수와데이터형.pptx

Microsoft PowerPoint - chap03-변수와데이터형.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num %d\n", num); return 0; } 1 학습목표 의 개념에 대해 알아본다.

More information

5장. JSP와 Servlet 프로그래밍을 위한 기본 문법(완성-0421).hwp

5장. JSP와 Servlet 프로그래밍을 위한 기본 문법(완성-0421).hwp 1 0 1.7 6 5 'A ' '/ u 4 4 2 2 ' " JS P 프로그래밍 " A ', 'b ', ' 한 ', 9, \ u d 6 5 4 ' c h a r a = 'A '; 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 < % @ p a g e c o n te n

More information

Microsoft PowerPoint - chap06-1Array.ppt

Microsoft PowerPoint - chap06-1Array.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-1 참고자료 배열 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 배열의선언과사용 같은형태의자료형이많이필요할때배열을사용하면효과적이다. 배열의선언 배열의사용 배열과반복문 배열의초기화 유연성있게배열다루기 한빛미디어

More information

Microsoft Word - PLC제어응용-2차시.doc

Microsoft Word - PLC제어응용-2차시.doc 과정명 PLC 제어응용차시명 2 차시. 접점명령 학습목표 1. 연산개시명령 (LOAD, LOAD NOT) 에대하여설명할수있다. 2. 직렬접속명령 (AND, AND NOT) 에대하여설명할수있다. 3. 병렬접속명령 (OR, OR NOT) 에대하여설명할수있다. 4.PLC의접점명령을가지고간단한프로그램을작성할수있다. 학습내용 1. 연산개시명령 1) 연산개시명령 (LOAD,

More information

untitled

untitled Content Ⅰ. 기본방향 1. 목 적 3 2. 적용범위 3 Ⅱ. 사회복지관 운영 1. 사회복지관의 정의 7 2. 사회복지관의 목표 7 3. 사회복지관의 연혁 7 4. 사회복지관 운영의 기본원칙 8 Ⅲ. 사회복지관 사업 1. 가족복지사업 15 2. 지역사회보호사업 16 3. 지역사회조직사업 18 4. 교육 문화사업 19 5. 자활사업 20 6. 재가복지봉사서비스

More information

데이터 시각화

데이터 시각화 데이터시각화 박창이 서울시립대학교통계학과 박창이 ( 서울시립대학교통계학과 ) 데이터시각화 1 / 22 학습내용 matplotlib 막대그래프히스토그램선그래프산점도참고 박창이 ( 서울시립대학교통계학과 ) 데이터시각화 2 / 22 matplotlib I 간단한막대그래프, 선그래프, 산점도등을그릴때유용 http://matplotlib.org 에서설치방법참고윈도우의경우명령프롬프트를관리자권한으로실행한후아래의코드실행

More information

11장 포인터

11장 포인터 누구나즐기는 C 언어콘서트 제 9 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 메모리의구조 변수는메모리에저장된다. 메모리는바이트단위로액세스된다. 첫번째바이트의주소는 0, 두번째바이트는 1, 변수와메모리

More information

Microsoft PowerPoint - additional01.ppt [호환 모드]

Microsoft PowerPoint - additional01.ppt [호환 모드] 1.C 기반의 C++ part 1 함수 오버로딩 (overloading) 디폴트매개변수 (default parameter) 인-라인함수 (in-line function) 이름공간 (namespace) Jong Hyuk Park 함수 Jong Hyuk Park 함수오버로딩 (overloading) 함수오버로딩 (function overloading) C++ 언어에서는같은이름을가진여러개의함수를정의가능

More information

C 프로그램의 기본

C 프로그램의 기본 C 프로그램의기본 목차 C 프로그램의구성요소 주석 main 함수 출력 C 언어의입력과출력 변수 printf 함수 scanf 함수 2 예제 2-1 : 첫번째 C 프로그램 3 2.1.1 주석 주석의용도 프로그램에대한설명 프로그램전체에대한대략적인정보를제공 프로그램수행에영향을미치지않는요소 4 2.1.1 주석 주석사용방법 /* 과 */ 을이용한여러줄주석 // 을이용한한줄주석

More information

쉽게 풀어쓴 C 프로그래밊

쉽게 풀어쓴 C 프로그래밊 Power Java 제 27 장데이터베이스 프로그래밍 이번장에서학습할내용 자바와데이터베이스 데이터베이스의기초 SQL JDBC 를이용한프로그래밍 변경가능한결과집합 자바를통하여데이터베이스를사용하는방법을학습합니다. 자바와데이터베이스 JDBC(Java Database Connectivity) 는자바 API 의하나로서데이터베이스에연결하여서데이터베이스안의데이터에대하여검색하고데이터를변경할수있게한다.

More information

Microsoft PowerPoint - CSharp-10-예외처리

Microsoft PowerPoint - CSharp-10-예외처리 10 장. 예외처리 예외처리개념 예외처리구문 사용자정의예외클래스와예외전파 순천향대학교컴퓨터학부이상정 1 예외처리개념 순천향대학교컴퓨터학부이상정 2 예외처리 오류 컴파일타임오류 (Compile-Time Error) 구문오류이기때문에컴파일러의구문오류메시지에의해쉽게교정 런타임오류 (Run-Time Error) 디버깅의절차를거치지않으면잡기어려운심각한오류 시스템에심각한문제를줄수도있다.

More information

PowerPoint Presentation

PowerPoint Presentation 오에스아이소프트코리아세미나세미나 2012 Copyright Copyright 2012 OSIsoft, 2012 OSIsoft, LLC. LLC. PI Coresight and Mobility Presented by Daniel Kim REGIONAL 세미나 SEMINAR 세미나 2012 2012 2 Copyright Copyright 2012 OSIsoft,

More information

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Function) 1. 함수의개념 입력에대해적절한출력을발생시켜주는것 내가 ( 프로그래머 ) 작성한명령문을연산, 처리, 실행해주는부분 ( 모듈 ) 자체적으로실행되지않으며,

More information

10 강. 쉘스크립트 l 쉘스크립트 Ÿ 쉘은명령어들을연속적으로실행하는인터프리터환경을제공 Ÿ 쉘스크립트는제어문과변수선언등이가능하며프로그래밍언어와유사 Ÿ 프로그래밍언어와스크립트언어 -프로그래밍언어를사용하는경우소스코드를컴파일하여실행가능한파일로만들어야함 -일반적으로실행파일은다

10 강. 쉘스크립트 l 쉘스크립트 Ÿ 쉘은명령어들을연속적으로실행하는인터프리터환경을제공 Ÿ 쉘스크립트는제어문과변수선언등이가능하며프로그래밍언어와유사 Ÿ 프로그래밍언어와스크립트언어 -프로그래밍언어를사용하는경우소스코드를컴파일하여실행가능한파일로만들어야함 -일반적으로실행파일은다 10 강. 쉘스크립트 쉘스크립트 쉘은명령어들을연속적으로실행하는인터프리터환경을제공 쉘스크립트는제어문과변수선언등이가능하며프로그래밍언어와유사 프로그래밍언어와스크립트언어 -프로그래밍언어를사용하는경우소스코드를컴파일하여실행가능한파일로만들어야함 -일반적으로실행파일은다른운영체제로이식되지않음 -스크립트언어를사용하면컴파일과정이없고인터프리터가소스파일에서명령문을판독하여각각의명령을수행

More information

<BFDCB1B9C0CE20C5F5C0DAB1E2BEF7C0C720B3EBBBE7B0FCB0E82E687770>

<BFDCB1B9C0CE20C5F5C0DAB1E2BEF7C0C720B3EBBBE7B0FCB0E82E687770> 외국인 투자기업의 노사관계 요 약 i ii 외국인 투자기업의 노사관계 요 약 iii iv 외국인 투자기업의 노사관계 요 약 v vi 외국인 투자기업의 노사관계 요 약 vii viii 외국인 투자기업의 노사관계 요 약 ix x 외국인 투자기업의 노사관계 요 약 xi xii 외국인 투자기업의 노사관계 요 약 xiii xiv 외국인 투자기업의 노사관계

More information

Windows 8에서 BioStar 1 설치하기

Windows 8에서 BioStar 1 설치하기 / 콘텐츠 테이블... PC에 BioStar 1 설치 방법... Microsoft SQL Server 2012 Express 설치하기... Running SQL 2012 Express Studio... DBSetup.exe 설정하기... BioStar 서버와 클라이언트 시작하기... 1 1 2 2 6 7 1/11 BioStar 1, Windows 8 BioStar

More information

09 강제근로의 금지 폭행의 금지 공민권 행사의 보장 38 10 중간착취의 금지 41 - 대판 2008.9.25, 2006도7660 [근로기준법위반] (쌍용자동차 취업알선 사례) 11 균등대우의 원칙 43 - 대판 2003.3.14, 2002도3883 [남녀고용평등법위

09 강제근로의 금지 폭행의 금지 공민권 행사의 보장 38 10 중간착취의 금지 41 - 대판 2008.9.25, 2006도7660 [근로기준법위반] (쌍용자동차 취업알선 사례) 11 균등대우의 원칙 43 - 대판 2003.3.14, 2002도3883 [남녀고용평등법위 01 노동법 법원으로서의 노동관행 15 - 대판 2002.4.23, 2000다50701 [퇴직금] (한국전력공사 사례) 02 노동법과 신의성실의 원칙 17 - 대판 1994.9.30, 94다9092 [고용관계존재확인등] (대한조선공사 사례) 03 퇴직금 청구권 사전 포기 약정의 효력 19 - 대판 1998.3.27, 97다49732 [퇴직금] (아시아나 항공

More information

View Licenses and Services (customer)

View Licenses and Services (customer) 빠른 빠른 시작: 시작: 라이선스, 라이선스, 서비스 서비스 및 주문 주문 이력 이력 보기 보기 고객 가이드 Microsoft 비즈니스 센터의 라이선스, 서비스 및 혜택 섹션을 통해 라이선스, 온라인 서비스, 구매 기록 (주문 기록)을 볼 수 있습니다. 시작하려면, 비즈니스 센터에 로그인하여 상단 메뉴에서 재고를 선택한 후 내 재고 관리를 선택하십시오. 목차

More information

°æÁ¦Àü¸Á-µ¼º¸.PDF

°æÁ¦Àü¸Á-µ¼º¸.PDF www.keri.org i ii iii iv v vi vii viii ix x xi xii xiii xiv xv 3 4 5 6 7 8 9 10 11 12 13 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 47 48 49 50 51 52 53

More information

170918_hjk_datayanolja_v1.0.1.

170918_hjk_datayanolja_v1.0.1. 모 금융회사 오픈소스 및 머신러닝 도입 이야기 김 형 준 2 0 발표자소개 1 인터넷폐쇄망에서분석시스템구축 (feat. 엔지니어가없을때 ) 2 분석보고서자동화 3 Machine Learning 삽질기 ( 분석 & 개발 ) 3 0 발표자소개 1 인터넷폐쇄망에서분석시스템구축 (feat. 엔지니어가없을때 ) 2 분석보고서자동화하기 3 Machine Learning

More information

PowerPoint Presentation

PowerPoint Presentation Class - Property Jo, Heeseung 목차 section 1 클래스의일반구조 section 2 클래스선언 section 3 객체의생성 section 4 멤버변수 4-1 객체변수 4-2 클래스변수 4-3 종단 (final) 변수 4-4 멤버변수접근방법 section 5 멤버변수접근한정자 5-1 public 5-2 private 5-3 한정자없음

More information

DBMS & SQL Server Installation Database Laboratory

DBMS & SQL Server Installation Database Laboratory DBMS & 조교 _ 최윤영 } 데이터베이스연구실 (1314 호 ) } 문의사항은 cyy@hallym.ac.kr } 과제제출은 dbcyy1@gmail.com } 수업공지사항및자료는모두홈페이지에서확인 } dblab.hallym.ac.kr } 홈페이지 ID: 학번 } 홈페이지 PW:s123 2 차례 } } 설치전점검사항 } 설치단계별설명 3 Hallym Univ.

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 누구나즐기는 C 언어콘서트 제 1 장프로그래밍소개 이번장에서학습할내용 프로그램의이해 프로그래밍언어 알고리즘 프로그램개발과정 프로그램을작성하기에앞서서중요한개념들을살펴봅니다.. 컴퓨터란? Q) 컴퓨터 (computer) 는무엇인가? A) 컴퓨터는기본적으로계산 (compute) 하는기계 Q) 컴퓨터를이용하여데이터를처리하려면반드시데이터가숫자형태이어야한다. 왜? A)

More information

OCW_C언어 기초

OCW_C언어 기초 초보프로그래머를위한 C 언어기초 4 장 : 연산자 2012 년 이은주 학습목표 수식의개념과연산자및피연산자에대한학습 C 의알아보기 연산자의우선순위와결합방향에대하여알아보기 2 목차 연산자의기본개념 수식 연산자와피연산자 산술연산자 / 증감연산자 관계연산자 / 논리연산자 비트연산자 / 대입연산자연산자의우선순위와결합방향 조건연산자 / 형변환연산자 연산자의우선순위 연산자의결합방향

More information

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher( 실행할페이지.jsp); 다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp"); dispatcher.forward(request, response); - 위의예에서와같이 RequestDispatcher

More information

이 장에서 사용되는 MATLAB 명령어들은 비교적 복잡하므로 MATLAB 창에서 명령어를 직접 입력하지 않고 확장자가 m 인 text 파일을 작성하여 실행을 한다

이 장에서 사용되는 MATLAB 명령어들은 비교적 복잡하므로 MATLAB 창에서 명령어를 직접 입력하지 않고 확장자가 m 인 text 파일을 작성하여 실행을 한다 이장에서사용되는 MATLAB 명령어들은비교적복잡하므로 MATLAB 창에서명령어를직접입력하지않고확장자가 m 인 text 파일을작성하여실행을한다. 즉, test.m 과같은 text 파일을만들어서 MATLAB 프로그램을작성한후실행을한다. 이와같이하면길고복잡한 MATLAB 프로그램을작성하여실행할수있고, 오류가발생하거나수정이필요한경우손쉽게수정하여실행할수있는장점이있으며,

More information

이도경, 최덕재 Dokyeong Lee, Deokjai Choi 1. 서론

이도경, 최덕재 Dokyeong Lee, Deokjai Choi 1. 서론 이도경, 최덕재 Dokyeong Lee, Deokjai Choi 1. 서론 2. 관련연구 2.1 MQTT 프로토콜 Fig. 1. Topic-based Publish/Subscribe Communication Model. Table 1. Delivery and Guarantee by MQTT QoS Level 2.1 MQTT-SN 프로토콜 Fig. 2. MQTT-SN

More information

<4D F736F F F696E74202D C61645FB3EDB8AEC7D5BCBA20B9D720C5F8BBE7BFEBB9FD2E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D C61645FB3EDB8AEC7D5BCBA20B9D720C5F8BBE7BFEBB9FD2E BC8A3C8AF20B8F0B5E55D> VHDL 프로그래밍 D. 논리합성및 Xilinx ISE 툴사용법 학습목표 Xilinx ISE Tool 을이용하여 Xilinx 사에서지원하는해당 FPGA Board 에맞는논리합성과정을숙지 논리합성이가능한코드와그렇지않은코드를구분 Xilinx Block Memory Generator를이용한 RAM/ ROM 생성하는과정을숙지 2/31 Content Xilinx ISE

More information

Design Issues

Design Issues 11 COMPUTER PROGRAMMING INHERIATANCE CONTENTS OVERVIEW OF INHERITANCE INHERITANCE OF MEMBER VARIABLE RESERVED WORD SUPER METHOD INHERITANCE and OVERRIDING INHERITANCE and CONSTRUCTOR 2 Overview of Inheritance

More information

PowerPoint Presentation

PowerPoint Presentation public class SumTest { public static void main(string a1[]) { int a, b, sum; a = Integer.parseInt(a1[0]); b = Integer.parseInt(a1[1]); sum = a + b ; // 두수를더하는부분입니다 System.out.println(" 두수의합은 " + sum +

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Chapter 10 포인터 01 포인터의기본 02 인자전달방법 03 포인터와배열 04 포인터와문자열 변수의주소를저장하는포인터에대해알아본다. 함수의인자를값과주소로전달하는방법을알아본다. 포인터와배열의관계를알아본다. 포인터와문자열의관계를알아본다. 1.1 포인터선언 포인터선언방법 자료형 * 변수명 ; int * ptr; * 연산자가하나이면 1 차원포인터 1 차원포인터는일반변수의주소를값으로가짐

More information

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver. 2.0 jbyoo@konkuk.ac.kr http://dslab.konkuk.ac.kr 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 이번장에서학습할내용 이중포인터란무엇인가? 포인터배열 함수포인터 다차원배열과포인터 void 포인터 포인터는다양한용도로유용하게활용될수있습니다. 2 이중포인터

More information

<342EBAAFBCF620B9D720B9D9C0CEB5F92E687770>

<342EBAAFBCF620B9D720B9D9C0CEB5F92E687770> 예약어(reserved word) : 프로그래밍 언어에서 특별한 용도로 사용하고자 미리 지정한 단어 - 프로그램의 구성요소를 구별하게 해주는 역할 => 라벨, 서브 프로그램 이름, 변수에 연관되어 다른 변수나 서브 프로그램 등과 구별 - 식별자의 최대길이는 언어마다 각각 다르며 허용길이를 넘어서면 나머지 문자열은 무시됨 - FORTRAN, COBOL, HTML

More information

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc NTAS and FRAME BUILDER Install Guide NTAS and FRAME BUILDER Version 2.5 Copyright 2003 Ari System, Inc. All Rights reserved. NTAS and FRAME BUILDER are trademarks or registered trademarks of Ari System,

More information

Web Scraper in 30 Minutes 강철

Web Scraper in 30 Minutes 강철 Web Scraper in 30 Minutes 강철 발표자 소개 KAIST 전산학과 2015년부터 G사에서 일합니다. 에서 대한민국 정치의 모든 것을 개발하고 있습니다. 목표 웹 스크래퍼를 프레임웍 없이 처음부터 작성해 본다. 목표 웹 스크래퍼를 프레임웍 없이 처음부터 작성해 본다. 스크래퍼/크롤러의 작동 원리를 이해한다. 목표

More information

<5BC6EDC1FD5DBEEEBEF7C0CCC1D6B3EBB5BFC0DAC0CEB1C7BBF3C8B2BDC7C5C2C1B6BBE7C3D6C1BEBAB8B0EDBCAD28BAB8C0CCBDBABEC6C0CC292E687770>

<5BC6EDC1FD5DBEEEBEF7C0CCC1D6B3EBB5BFC0DAC0CEB1C7BBF3C8B2BDC7C5C2C1B6BBE7C3D6C1BEBAB8B0EDBCAD28BAB8C0CCBDBABEC6C0CC292E687770> 어업 이주노동자 인권상황 실태조사 2012년도 국가인권위원회 인권상황 실태조사 연구용역보고서를 제출합니다 2012. 10. 연구수행기관 한양대학교 글로벌다문화연구원 연구책임자 오경석 연 구 원 이한숙 김사강 김민정 류성환 윤명희 정정훈 연구보조원 최상일 이 보고서는 연구용역수행기관의 결과물로서, 국가인권위원회의 입장과 다를 수 있습니다 연구요약 이 연구는 연근해

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 Power Java 제 7 장클래스와객체 이번장에서학습할내용 객체지향이란? 객체 메시지 클래스 객체지향의장점 String 클래스 객체지향개념을완벽하게이해해야만객체지향설계의이점을활용할수있다. 실제세계는객체로이루어진다. 객체지향이란? 실제세계를모델링하여소프트웨어를개발하는방법 절차지향과객체지향 절차지향프로그래밍 (procedural programming): 문제를해결하는절차를중요하게생각하는방법

More information

02 C h a p t e r Java

02 C h a p t e r Java 02 C h a p t e r Java Bioinformatics in J a va,, 2 1,,,, C++, Python, (Java),,, (http://wwwbiojavaorg),, 13, 3D GUI,,, (Java programming language) (Sun Microsystems) 1995 1990 (green project) TV 22 CHAPTER

More information

설계란 무엇인가?

설계란 무엇인가? 금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 5 강. 배열, 포인터, 참조목차 배열 포인터 C++ 메모리구조 주소연산자 포인터 포인터연산 배열과포인터 메모리동적할당 문자열 참조 1 /20 5 강. 배열, 포인터, 참조배열 배열 같은타입의변수여러개를하나의변수명으로처리 int Ary[10]; 총 10 개의변수 : Ary[0]~Ary[9]

More information

Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드]

Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드] Chapter 03 변수와자료형 2009 한국항공대학교항공우주기계공학부 (http://mercury.kau.ac.kr/sjkwon) 1 변수와자료유형 변수 프로그램에서자료값을임시로기억할수있는저장공간을변수 (variables) 변수 (Variables) 는컴퓨터의메모리인 RAM(Random Access Memory) 에저장 물건을담는박스라고생각한다면박스의크기에따라담을물건이제한됨

More information

그린홈이용실태및만족도조사

그린홈이용실태및만족도조사 2009 년도연구용역보고서 그린홈이용실태및 만족도설문조사 - 2009. 11. - 이연구는국회예산정책처의연구용역사업으로수행된것으로서, 보고서의내용은연구용역사업을수행한연구자의개인의견이며, 국회예산정책처의공식견해가아님을알려드립니다. 책임연구원 이화여자대학교소비자학과교수정순희 그린홈이용실태및만족도 설문조사 2009. 11. 책임연구원 정순희 ( 이화여자대학교소비자학과교수

More information

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx To be an Android Expert 문양세강원대학교 IT 대학컴퓨터학부 Eclipse (IDE) JDK Android SDK with ADT IDE: Integrated Development Environment JDK: Java Development Kit (Java SDK) ADT: Android Development Tools 2 JDK 설치 Eclipse

More information

Microsoft PowerPoint - chap11-포인터의활용.pptx

Microsoft PowerPoint - chap11-포인터의활용.pptx #include int main(void) int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; 1 학습목표 포인터를 사용하는 다양한 방법에

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Deep Learning 작업환경조성 & 사용법 ISL 안재원 Ubuntu 설치 작업환경조성 접속방법 사용예시 2 - ISO file Download www.ubuntu.com Ubuntu 설치 3 - Make Booting USB Ubuntu 설치 http://www.pendrivelinux.com/universal-usb-installer-easy-as-1-2-3/

More information

11장 포인터

11장 포인터 Dynamic Memory and Linked List 1 동적할당메모리의개념 프로그램이메모리를할당받는방법 정적 (static) 동적 (dynamic) 정적메모리할당 프로그램이시작되기전에미리정해진크기의메모리를할당받는것 메모리의크기는프로그램이시작하기전에결정 int i, j; int buffer[80]; char name[] = data structure"; 처음에결정된크기보다더큰입력이들어온다면처리하지못함

More information

Microsoft Word - FunctionCall

Microsoft Word - FunctionCall Function all Mechanism /* Simple Program */ #define get_int() IN KEYOARD #define put_int(val) LD A val \ OUT MONITOR int add_two(int a, int b) { int tmp; tmp = a+b; return tmp; } local auto variable stack

More information

로거 자료실

로거 자료실 redirection 매뉴얼 ( 개발자용 ) V1.5 Copyright 2002-2014 BizSpring Inc. All Rights Reserved. 본문서에대한저작권은 비즈스프링 에있습니다. - 1 - 목차 01 HTTP 표준 redirect 사용... 3 1.1 HTTP 표준 redirect 예시... 3 1.2 redirect 현상이여러번일어날경우예시...

More information

gnu-lee-oop-kor-lec06-3-chap7

gnu-lee-oop-kor-lec06-3-chap7 어서와 Java 는처음이지! 제 7 장상속 Super 키워드 상속과생성자 상속과다형성 서브클래스의객체가생성될때, 서브클래스의생성자만호출될까? 아니면수퍼클래스의생성자도호출되는가? class Base{ public Base(String msg) { System.out.println("Base() 생성자 "); ; class Derived extends Base

More information

유니 앞부속

유니 앞부속 Published by Ji&Son Inc. Printed in Korea. Unityによる3Dゲ-ム : iphone/android/webで ゲ-ムプログラミング (JAPAN ISBN 978-4873115061) Authorized translation from the Japanese language edition of Unityによる3Dゲ- ム. 2011 the

More information

PowerPoint Presentation

PowerPoint Presentation Package Class 3 Heeseung Jo 목차 section 1 패키지개요와패키지의사용 section 2 java.lang 패키지의개요 section 3 Object 클래스 section 4 포장 (Wrapper) 클래스 section 5 문자열의개요 section 6 String 클래스 section 7 StringBuffer 클래스 section

More information