Java + Python = Jython ( 피어슨에듀케이션출판사) 1. Jython 소개 본글은저자의동의없이개인적인목적이외에상업적인목적으로사용하실수없습니다. 학교본수업이외에교육체강의자료로사용하는경우에는출처를밝히셔야합니다. 또한인터넷및통신상에저자의동의없이글을공개할수없습니다. 1.1 Python 소개 Python( 파이썬) 은 C/C++/Java와같은일반프로그래밍언어를배운사람들에게는조금괴상한언어처럼보인다. 그러나파이썬은상당히재미있고, 편리한언어이다. 우선파이썬은스크립트언어이기때문에변수를선언할필요없이사용할수있다. 따라서, 기존 C/C++/Java 등의언어에서처럼변수의자료형을미리선언하지않고, 필요한경우에변수의이름에값을할당하는것만으로충분하다. 두번째특징은파이썬이리스트 (list), 튜플(tuple), 사전(dictionary) 등의고차원적인자료구조를기본적으로제공한다는것이다. 만약다른언어를사용한다면, 프로그래머가작성해야할내용들을파이썬은기본적으로제공하기때문에복잡한자료구조를보다쉽게사용할수있다. 세번째특징으로파이썬은다른언어와쉽게결합될수있다는것이다. 파이썬은 C, C++, Tcl/Tk 등의언어와결합되어서사용될수있다. 네번째특징으로파이썬은인터프리터방식으로실행된다. 즉, 프로그램을작성하면서즉시실행할수있으며, 프로그램을컴파일하는과정이필요없다. 파이썬에관련된모든소프트웨어와문서및튜토리얼들은파이썬홈페이지 (http://python.org/) 에서무료로다운로드받을수있다. 다음그림은파이썬홈페이지의모습이다. -1-
Java + Python = Jython ( 피어슨에듀케이션출판사) 그림 2.Python 홈페이지 파이썬홈페이지에있는파이썬은기본적인기능들만제공하기때문에유용한모듈이나툴들이부족한편이다. 액티브스테이트의파이썬패키지는기본적인기능이외에여러가지유용한모듈과툴들을포함해서배포하고있다. 보다자세한사항은액티브스테이트 (http://activestate.com/) 홈페이지를참조하라. 그림 3. Activestate 홈페이지 국내에도파이썬사용자그룹이만들어져있으며, 이그룹에서는각종세미나개최등을통해활발한활동을하고있다. 다음그림은국내파이썬사용자그룹의홈페이지 (http://python.or.kr/) 이다. 국내사이트는파이썬에관련된한글문서들을많이보유하고있다. -2-
Java + Python = Jython ( 피어슨에듀케이션출판사) 그림 4. 한국 Python 사용자그룹홈페이지 자바혹은 C++ 개발자는 Bruce Eckel 의 "Thinking in Java" 혹은 "Thinking in C++" 를기억할것이다. Bruce Eckel 은인터넷(http://www.mindview.net/Books/TIPython) 에 "Thinking in Python" 의초기버전을공개하고있다. 이책은파이썬의기본적인사항을알고있는독자를위해서개발되고있다. 그림 5. Thinking in Python 파이썬은많은라이브러리들을제공하고있다. 각라이브러리에대한세부적인사항은 http://www.python.org/doc/current/lib/lib.html 사이트에서찾을수있다. 이사이트는각라이브러리에대한설명은물론간단한예제들을제공하고있다. -3-
Java + Python = Jython ( 피어슨에듀케이션출판사) 그림 6.Pythong 라이브러리 참고서적: 파이썬참고서적국내외로많은파이썬책들이소개되었다. 다음과같은책들을추천한다. 파이썬 ( 이강성저) -프리렉출판사 코어파이썬프로그래밍 ( 백종현역) - 피어슨에듀케이션 Python Cookbook (Alex 편집) - Oreilly 1.2 Jython 소개 Jython 은자바언어를이용해서개발된파이썬이다. 따라서 Jython 을이용하면, Python을별도로설치하지않고도파이썬프로그램을작성할수있다. 다만, Python과 Jython의차이점은자바언어와결합부분이다. Jython은자바언어를이용해서개발되었기때문에파이썬프로그램에서자바로작성된라이브러리들을사용할수있다. 또한역으로자바프로그램에서도파이썬프로그램을사용할수있다. 이러한부분들을제외하면, Jython과 Python 은모두파이썬문법을사용한다는의미에서동일하다고볼수있다. 참고: 파이썬과자이썬자이썬(Jython) 은자바언어로만들어진파이썬이기때문에파이썬의문법을따른다. 다만, 자바언어와결합시에 CPython(C 언어로구현된파이썬) 과다르게사용된다. 책에서는 CPython과 Jython의공통적인내용을다루는경우에도용어의일관성을유지하기위해서자이썬(Jython) 이라는용어를사용하기로한다. 1.2.1 J2SDK 설치 Jython은자바언어를이용해서만들었기때문에자바를실행시키기위한 J2SDK(Java 2 Standard Development Kit) 를설치하여야한다. 자바사이트(http://java.sun.com/j2se/) 에 -4-
Java + Python = Jython ( 피어슨에듀케이션출판사) 서가장최근버전인 J2SDK 1.4 를다운로드받아서설치하도록하자. J2SDK 1.4를설치하면다음과같이 C: j2sdk1.4.0 디렉토리가생기면서 J2SDK 가설치된다. 앞으로 <J2SDK> 혹은 <JDK> 는 J2SDK 가설치된디렉토리( 예: C: j2sdk1.4.0) 를의미한다. 그림 7.J2SDK 설치디렉토리 J2SDK를설치하면 C: Program Files Java 디렉토리에도 JRE(Java Runtime Environment) 가설치된다. JRE는자바를실행시킬수있는최소한의명령어와라이브러리들로구성되어있다. 다음그림은 JRE 가설치된디렉토리모습을보여준다. 그림 8.JRE 설치디렉토리 J2SDK 를설치하면, 기본적으로 J2SDK 를사용하기위한환경변수들을설정해주어야한다. 윈도우 2000과 NT 에서환경변수를설정하기위해서는 [ 시작 -> 설정 -> 제어판 -> 시 -5-
스템] 을선택한다. 시스템등록정보에서는 [ 고급 -> 환경변수] 를선택한다. 그림 9. 시스템등록정보 환경변수버튼을클릭하면, 다음그림과같이환경변수를설정할수있는창이나타난다. 이창에서 " 시스템변수(S)" 부분의 " 새로만들기(W)..." 버튼을클릭한다. 그림 10. 환경변수 시스템변수를입력할수있는새로운창이나타나면, 다음과같이변수이름과변수값을입력한다. 입력할변수이름과값은표 1 에서찾아볼수있다. 그림 11. 환경변수등록 -6-
Path 환경변수는이미지정되어있기때문에 " 시스템변수(S)" 에서변수이름이 Path인항을찾아서더블클릭하면, 다음그림과같이환경변수를변경할수있는창이나타난다. 이때 " 변수값(V)" 의처음부분에 C: j2sdk1.4.0 bin; 를입력한다. 그림 12. 환경변수변경 다음표는 J2SDK 를설치한다음에설정해야하는환경변수의이름과값들이다. JAVA_HOME PATH 환경변수이름 C: j2sdk1.4.0 환경변수값 C: j2sdk1.4.0 bin; 표2. 설정할환경변수 1.2.2 Jython 설치 Jython을 http://www.jython.org/download.html 사이트에서 jython-21.class 파일을다운로드받는다. jython-21.class 파일이저장되어있는디렉토리에서다음과같은명령어를이용해서 Jython 을설치한다. 예:Jython설치명령어 C: > java -cp. jython-21 Jython 을설치하면, 다음과같은창이나타나면서프로그램이설치된다. Jython을 C: jython-2.1 디렉토리에설치하도록하자. -7-
그림 13.Jython2.1 설치 Jython이설치된다음에 C: jython-2.1 디렉토리의 jython.jar 파일을 <J2SDK> jre lib ext 디렉토리에복사한다. Jython을설치한다음에 PATH 환경변수에 Jython 의디렉토리를추가할필요가있다. J2SDK 에서환경변수를설정하는것과동일한방법으로 [ 시작 -> 설정 -> 제어판 -> 시 스템] 을선택한다. 시스템등록정보에서는 [ 고급 -> 환경변수] 를선택한다. " 시스템변수 (S)" 에서변수이름이 Path 인항을찾아서더블클릭하면, 다음그림과같이환경변수를 변경할수있는창이나타난다. 이때 " 변수값(V)" 부분에 C: j2sdk1.4.0 bin; 다음에 C: jython-2.1; 를추가한다. 그림 14.PATH 환경변수변경 Jython을시작하기위해서는 C: jython-2.1 디렉토리의 jython.bat 파일을더블클릭해서프로그램을실행시킨다. 배치파일을실행시키면, 다음그림과같은화면이나타나면서 Jython 명령어입력을기다린다. -8-
그림 15.Jython 실행 Jython 은인터프리터방식으로실행되기때문에명령어를입력하면, 즉시실행하게된다. 우선간단하게 "Hello World" 메시지를출력하도록해보자. 창에서 >>> 다음부분에다음과같은명령어를입력한다. 예제: "Hello World" print "Hello World" 메시지출력하기 명령어를입력하면, 다음그림과같이 "Hello World" 메시지가출력된다. 이예제에서알 수있듯이문자열을출력하기위해서는 print 명령어를이용하고, 문자열주변에는따옴표 (") 를사용한다. 그림 16.print문장실행 -9-
Jython을종료하기위해서는 Control과 Z 키를동시에누른다음에엔터키를입력한다. 유 닉스와리눅스사용자는 Control과 D 키를동시에입력한다. 다음그림은 Jython을종료하 는것을보여준다. 그림 17.Jython 종료 참고: 예와예제책에서프로그램코드는 " 예제" 와 " 예" 라는제목을붙여서기술한다. " 예제" 라고붙인내용은그대로실행해볼수있도록만들어진것이다. 그러나, " 예" 라고붙인코드는프로그램의사용방법만보여준것이고, 약간의추가적인내용을붙여야만실행되는코드이다. 1.3 프로그램작성하기 1.3.1 수식계산 자이썬프로그램은명령어창의인터프리터를이용해서즉시실행해보면서개발할수도있고, 편집기를이용해서자이썬프로그램을파일에저장한다음에실행시킬수도있다. 파일로작성하는경우에파일의확장자는.py 로끝난다. 우선 jython.bat 파일을실행시켜서, 간단한프로그램들을작성해보도록하자. jython 명령 어창에서다음예에있는내용들을실행시켜보도록하자. 입력되는명령어들은즉시실행 되고, 결과값을출력하게된다. 계산된내용은 print 명령어가없어도자동적으로출력된 다. 예제: 숫자계산 -10-
>>> 2 + 2 4 >>> 3 / 2 # 정수연산 1 >>> 3.0 / 2.0 # 실수연산 1.5 >>> 5 % 3 # 나머지연산 2 >>> 5.0 % 3.0 # 나머지연산 2.0 다음그림은 jython 명령어창에서예제내용을실행시키는화면이다. 그림 18. 수식계산 자이썬에서 # 문자는주석을만들기위해서사용된다. 따라서, # 문자로시작되는곳부터줄의끝까지는주석에해당된다. 3 / 2 연산과 3.0 / 2.0 연산의결과가다른것에주의하라. 3 / 2 은정수연산이기때문에결과값이정수로나타난다. 반면에 3.0 / 2.0은소수점을포함하기때문에실수연산으로처리된다. 실수연산에서는결과값이실수형으로나타난다.% 연산자는나누기의나머지값을리턴한다. 참고: 주석자이썬은 # 문자다음부터그줄의끝까지주석으로인식한다. 자이썬은다른언어와는달리여러줄에걸쳐있는주석은제공하지않는다. 문자주위에따옴표가있는경우에는이것은문자열로취급된다. 계산이수행되지않는다. Python과 Jython 은한글도지원한다. 문자열에포함된계산식은 예제: 숫자와문자열 -11-
>>> "2+2" # 문자열 '2+2' >>> print 2+2 # 숫자계산 4 >>> print "2+2" # 문자열 2+2 >>> print " 한글" # 한글도사용할수있다. 한글 1.3.2 변수사용 파이썬에서는변수를선언하지않고사용한다. 따라서, 변수에자료형을기술할필요도없으며, 필요한경우에변수에값을할당함으로써사용할수있다. 자이썬에서변수는값을할당하는순간에생성된다. 변수는또한사용되지않는경우에는가비지콜렉터에의해자동적으로메모리에서삭제된다. 다음예제는변수를사용해서계산을수행하는방법을보여준다. 예제: 변수사용 >>> x = 4 >>> x * 4 16 >>> print x 4 자이썬은다른언어와는달리여러개의값을여러개의변수에값을할당할수있다. 예제를살펴보자. 다음 예제: 변수에값할당 >>> x, y, z = 1, 2, 3 # 변수 x, y, z에각각 1, 2, 3 값을할당한다. >>> print x 1 >>> print y 2 >>> print z 3 2 개이상의변수에서값을서로교환하는경우를생각해보자. 대부분의언어에서변수들끼리값을교환하기위해서는임시변수를사용해야한다. 예를들어, 변수 x와 y의값을교환하기위해서는다음예와같이임시변수를사용해야한다. -12-
예:x와 y값교환 -임시변수를사용하는방법 temp = x x=y y=temp 그러나, 자이썬은보다간단한방법으로변수들사이에서값을교환할수있는방법을제공한다. 즉, 다음예와같이여러개의변수에값을할당하는것과동일한방법으로값을교환할수있다. 예:x와 y값교환 -임시변수를사용하지않는방법 x, y = y, x # y값을 x 에할당하고, x값을 y 에할당한다. 실제로 a, b, c, d 의네개변수에값들할당하고, 이변수의값들을교환해보도록하자. 예제: 값교환 >>> a = 1 >>> b = 2 >>> c = 3 >>> d = 4 >>>printa,b,c,d # 변수a,b,c,d 의값을출력한다. 1 2 3 4 >>> a, b, c, d = d, c, b, a # a, b, c, d 의값을교환한다. >>>printa,b,c,d # 변수a,b,c,d 의값을출력한다. 4 3 2 1 참고: 여러줄에걸쳐사용할때파이썬은인터랙티브하게실행될때사용자가입력하는각줄을읽고, 실행하게된다. 만약 문장을한줄에입력하기에는너무긴경우에는줄의끝에 문자를입력하고, 다음줄을 계속해서사용할수있다. 또다른방법은괄호를이용하는방법이다. 첫번째줄에서여는 괄호를사용하고, 다음줄에서괄호를닫는경우에여러줄을사용할수있다. 다음예제는 CPython 의명령어창에서실행된예제이다. 예제:CPython의경우 >>> a = 2 + 3... + 4 >>> print a 9 >>> b = ( 2 + 3... + 4 + 5) >>> print b 14-13-
참고: 자이썬에서여러줄자이썬의명령어창은 문자혹은괄호를이용해서여러줄을사용하는기능을제공하지못하고있다. 그러나, 프로그램을파일에저장한경우에는 문자를사용해서여러줄에걸친문장을작성할수있다. 1.3.3 파일에저장된프로그램 자이썬프로그램은파일에저장해서실행시키는것도가능하다. 이때자이썬프로그램을포 함한파일은확장자가.py 이어야한다. 다음예제는간단한수식을계산하는자이썬프로 그램이다. 예제 : hello.py 1 print "Hello World" 2 x = 4 3 y = 5 4 z = x * y 5 print z 저장된자이썬프로그램은다음과같은명령어를이용해서실행시킬수있다. 결과 C: > jython Hello World 20 hello.py 파일에저장된자이썬프로그램을실행시키면서인터랙티브하게실행하기위해서는 -i 옵션을사용한다. 즉, 다음예와같이 -i 옵션을이용하면, 파일에저장된자이썬프로그램을실행하고, 계속다른프로그램들을인터랙티브하게실행할수있다. 예제:-i옵션 C: > jython -i hello.py Hello World 20 >>> print "abc" abc 1.3.4 콘솔입력 -14-
자이썬은콘솔에서값을입력받기위해서 raw_input() 함수와 input() 이라는함수를이용한다. raw_input() 함수를이용해서읽은값은문자열타입이며, 숫자로변환하기위해서는 int(), float() 등과같은함수를이용하여야한다. input() 함수는문자열을읽기위해서는입력시에따옴표를사용하여야한다. 다음예제는사람이름을입력받아서출력하는프로그램이다. 이예제에서는 input() 함수를사용한다. raw_input() 함수로한글데이터를읽을때는한글이깨지는문제때문이다. 예제 : greeting.py 1 name = input(" 이름을입력해주세요 : ") 2 print " 안녕하세요,", name, " 님" 설명 1 name = input(" 이름을입력해주세요 : ") input() 은콘솔( 키보드) 에서입력받는내용을읽기위한함수이다. 읽은내용은 name 변수에할당한다.input() 함수의매개변수로사용되는문자열은프롬프트와같은역할을한다. 2 print " 안녕하세요,", name, " 님" 여러개의문자열을출력할때는컴마(,) 문자를이용한다. input() 함수를이용하는경우에문자열을입력할때는문자열앞뒤로인용부호(") 를붙인다. 결과 C: > jython greeting.py 이름을입력해주세요 : " 홍길동" 안녕하세요, 홍길동님 print 문은콘솔로데이터를출력할수있을뿐만아니라, 파일에데이터를저장할수있는방법도제공한다. print 문은 >> 문자와같이사용해서파일에내용을출력할수있는방법을제공한다. 이때 print 문은다음과같은형태로사용한다. 형태:print문 print [ >> file-object, ]expression,... 다음예제는 print 문을이용해서파일에내용을저장하는프로그램이다. 예제:print를이용해서파일에저장하기 >>> f = open('hello.txt', 'w') # hello.txt 파일을연다. >>> print >> f, ' 안녕하세요' # 문자열을파일에출력한다. -15-
>>> print >> f, '2+5*3 = ', 2+5*3 # 문자열과계산결과를파일에출력한다. >>> f.close() # 파일을닫는다. more 명령어를이용해서생성된파일을열어보면다음과같은내용들이있는것을확인할수있다. C: >more hello.txt 안녕하세요 2+5*3 = 17 1.3.5 자바코드실행 자이썬은자바에서제공하는클래스들을사용할수있다. 다음예제는자이썬에서자바의 AWT 를이용해서프레임창을만들고, 버튼을프레임에붙이는프로그램이다. 예제: 자바객체사용 >>> import java.awt # java.awt 패키지를임포트한다. >>> f = java.awt.frame(" 윈도우") # Frame 을생성한다. >>> f.setsize(400, 300) # 프레임의크기를지정한다. >>> f.setvisible(1) # 프레밍을화면에보이게한다. >>> b = java.awt.button("ok") # 버튼객체를생성한다. >>> f.add("south", b) # 버튼을프레임에붙인다. java.awt.button[button0,0,0,0x0,invalid,label=ok] >>> f.validate() # 프레임에버튼이보이도록레이아웃을조정한다. 결과 그림 19. 자바프레임 앞의예제에서볼수있듯이, 자이썬은자바클래스들을자유롭게접근해서사용할수있으며, 자바프로그램을동적으로실행할수있는장점을가지고있다. -16-