BlueJ 튜토리얼 한국어버전 2.0 BlueJ Version 2.0.x 用 English Version 2.0.1 Michael Kölling Mærsk Insitute University of Southern Denmark Korean Version 2.0 황석형교수 Project Member Ver. 1.0 : 강석진, 민상호, 오경묵, 유형순, 이승환. Ver. 2.0 : 강원준선문대학교컴퓨터정보학부 1
1. 서문 4 1.1. BlueJ의소개 4 1.2. 설명범위와사용자 4 1.3. 복제, 저작권과배포 4 1.4. 피드백 4 2. 설치 5 2.1. Windows에설치하는방법 5 2.2. MacOS에설치하는방법 5 2.3. 리눅스 / 유닉스및기타시스템에설치하는방법 6 2.4. 설치할때발생하는문제점 6 3. 시작하기 - 편집 / 컴파일 / 실행 7 3.1. BlueJ 시작하기 7 3.2. 프로젝트열기 8 3.3. 객체생성하기 8 3.4. 실행하기 10 3.5. 클래스편집하기 12 3.6. 컴파일하기 12 3.7. 컴파일러에러들에관한도움말 13 4. 추가기능 15 4.1. 객체상태검사 15 4.2. 매개변수를통해서객체전달하기 18 5. 새프로젝트만들기 19 5.1. 프로젝트디렉토리만들기 19 5.2. 클래스만들기 19 5.3. 의존관계만들기 20 5.4. 요소들의제거 20 6. 코드패드사용하기 21 6.1. 코드패드보기 21 6.2. 간단한식의표현 22 6.3. 객체가져오기 22 6.4. 객체검사하기 23 6.5. 명령문실행하기 23 6.6. 멀티라인명령문들과일련의명령문들 24 6.7. 변수를이용한명령문실행시키기 24 6.8. 사용자입력이력기능 25 2
7. 디버깅 26 7.1. 중단점설정하기 26 7.2. 코드의단계별실행 28 7.3. 변수들의검사 28 7.4. 중지와종료 29 8. 독립형어플리케이션생성 30 9. 애플릿만들기 32 9.1. 애플릿실행하기 32 9.2. 애플릿만들기 33 9.3. 애플릿테스트하기 33 10. 기타기능들 34 10.1. BlueJ로만들지않은패키지오픈하기 34 10.2. 여러분의프로젝트에기존의클래스들을추가하기 34 10.3. main 메소드와다른정적메소드들의호출 34 10.4. 문서생성하기 35 10.5. 라이브러리를가지고작업하기 35 10.6. 라이브러리클래스로부터객체생성하기 36 11. 요약정리 37 11.1. 시작하기 37 11.2. 추가기능 37 11.3. 새프로젝트만들기 37 11.4. 디버깅 37 11.5. 독립형어플리케이션생성 38 11.6. 애플릿만들기 38 11.7. 기타기능들 38 12. 번역을마치며 39 3
1. 서문 1.1. BlueJ 의소개 본튜토리얼은 BlueJ 프로그래밍환경을사용하는방법을설명하고있습니다. BlueJ는초급자바프로그래밍교육을위해설계된자바개발환경으로서, 호주멜버른의 Monash대학및 Southern Denmark대학의 BlueJ팀에의해설계되고구현되었습니다. BlueJ에관한보다상세한정보는 http://www.bluej.org를참조하기바랍니다. 1.2. 설명범위와사용자 본튜토리얼은 BlueJ 프로그래밍환경에서제공하는제반기능들에익숙해지고자하는사람들을위해작성되었습니다. 따라서, BlueJ 자체의설계및구축, 그리고관련기초연구에관한사항들은설명하지않습니다. 또한, 본튜토리얼은자바언어를교육하기위한목적으로작성되지않았습니다. 따라서, 자바프로그래밍초보자들은자바언어와관련된교재또는관련강좌를참조하여학습하기바랍니다. 본튜토리얼은 BlueJ를이해하기위한참고메뉴얼이아닙니다. 따라서, BlueJ의모든특징들을상세히설명하기보다는, 기본적인특징들만을간략하게설명하고있습니다. 자세한내용은 BlueJ 홈페이지 (www.bluej.org) 에 The BlueJ Environment Reference Manual을참조하시기바랍니다. 본튜토리얼의모든절들은한줄정도의간략한요약문장으로시작됩니다. 따라서, 사용자들에게이미친숙한내용은생략하며선택적으로읽을수있도록구성하였습니다. 제 11장에서는빠른참조 (quick reference) 를위하여전체내용을요약정리해놓았습니다. 1.3. 복제, 저작권과배포 BlueJ 시스템과본튜토리얼은어떤형태로든누구나무료로사용할수있으며, 자유롭게배포할수있습니다. BlueJ 시스템및관련문서들은저작권자의허락없이판매 ( 패키지화한형태 ) 될수없습니다. BlueJ의저작권은 M.Kölling 과 J.Rosenberg에게있습니다. 1.4. 피드백 BlueJ 시스템및본튜토리얼에대한코멘트, 질문, 수정, 평가등을환영하며, Michael Kölling (mik@mip.sdu.dk) 에게메일을보내기바라며, 번역본에대한문의는 shwang@sunmoon.ac.kr로해주시기바랍니다. 4
2. 설치 BlueJ 는 Windows, MacOS 그리고기타다른시스템용이있으며, 설치는매우간단합니다. < 설치를위한필요환경 > BlueJ를사용하기위해서는컴퓨터시스템에 J2SE v1.4( 일명, JDK 1.4) 이후의버전이설치되어있어야합니다. JDK가설치되어있지않을경우 Sun Microsystem사의웹사이트 (http://java.sun.com/j2se/) 에서다운로드받으면됩니다. MacOS X의경우, 최신판 J2SE 버전이이미설치되어있습니다 ( 이경우여러분이직접설치하지않아도됩니다 ). 만약, "JRE"(Java Runtime Environment) 와 "SDK"(Software Development Kit) 를모두제공하는다운로드페이지를찾았다면, "SDK" 를다운로드받아야합니다 (JRE는적합하지않습니다 ). 2.1. Windows 에설치하는방법 Windows용설치파일은 bluejsetup-xxx.exe이며, 여기서 xxx는버전번호를의미합니다. 예를들어, BlueJ 버전2.0.0의경우, 설치파일은 bluejsetup-200.exe입니다. 여러분은이파일을디스크형태로구하거나, BlueJ 웹사이트 (http://www.bluej.org) 에서다운로드받아실행시키면됩니다. 설치파일을실행하면, BlueJ를설치할디렉토리를선택해야합니다. 또한, 바탕화면및시작메뉴에단축키설치여부에관한설정을선택해야합니다. 설치가종료되면 BlueJ 설치디렉토리내에 bluej.exe실행화일을찾을수있습니다. BlueJ를처음실행시키면자바시스템 (JDK) 을찾게될것입니다. 좀더최신의자바시스템을찾으면 ( 예를들어 JDK 1.4.2버전이있다면 JDK 1.5.0를설치 ), 여러분이사용할버전을선택하라는대화상자가나타날것입니다. 찾지못할경우에는, 사용자가스스로파일의위치를찾아야합니다 ( 이런경우는, JDK시스템이설치되었지만, 해당레지스트리엔트리가이미제거된경우에발생합니다 ). 또한, BlueJ설치파일은 vmselect.exe라는프로그램을설치합니다. 이프로그램을사용하면 BlueJ가사용하는자바버전을나중에변경할수있습니다. 즉, vmselect를실행하여, 다른자바버전으로 BlueJ를실행할수있습니다. 어떠한 JDK를선택하였는지에대한정보가각각의 BlueJ 버전에저장됩니다. 서로다른버전의 BlueJ를설치한경우, JDK 1.4.2 + BlueJ 와 JDK 1.5 + BlueJ와같이조합하여사용할수있습니다. BlueJ의 Java버전을변경하면, 동일한사용자를위한동일버전의 BlueJ설치가모두변경됩니다. 2.2. 맥킨토시에설치하는방법 BlueJ는 MacOS X에서만동작한다는사실을명심하십시오. MacOS용설치파일은 BlueJ-xxx.sit 입니다. 여기서 xxx는버전번호를말합니다. 예를들어 BlueJ버전 2.0.0 설치파일은 BlueJ-200.sit 입니다. 여러분은이파일을디스크형태로구하거나또는 BlueJ웹사이트 (http://www.bluej.org) 에서다운로드받을수있습니다. 이파일은 StuffIt Expander를사용하여압축을풀수있습니다. 대부분의브라우저들이압축을풀어주지만, 그렇지않은경우에는파일을더블클릭해서풀어야합니다. 압축을푼후에는 5
BlueJ-xxx라는폴더가생길것입니다. 이폴더를 application폴더 ( 또는, 저장하고싶은폴더어디든지 ) 로이동하면설치과정이완료됩니다. 2.3. 리눅스 / 유닉스및기타시스템에설치하는방법 일반적인설치파일은실행가능한 jar형태의파일, 즉, bluej-xxx.jar입니다. 여기서, xxx는버전번호입니다. 예를들어 BlueJ 버전 2.0.0은 bluej-200.jar입니다. 이파일은디스크형태로구하거나 BlueJ웹사이트 (http://www.bluej.org) 에서다운로드받을수있습니다. 다음명령어에의해설치파일이실행됩니다. ( 아래에서는설치파일 bluej-120.jar 를사용하는경우를말합니다. 여러분들은알맞은버전번호가적힌파일의이름을사용하기바랍니다.) <j2se-path>/bin/java -jar bluej-200.jar 여기서, <j2se-path> 는 J2SE SDK가설치되어있는디렉토리를의미합니다. 윈도우가화면에나타나면, BlueJ설치디렉토리와 BlueJ를동작시키기위해사용할 JDK버전을선택해야합니다. 주의할점은 BlueJ까지의경로명 ( 상위디렉토리중에서어느하나 ) 에는공백을포함해서는안된다는것입니다. 설치 (Install) 를클릭하면 BlueJ가설치됩니다. 2.4. 설치할때발생하는문제점 설치할때문제가발생할경우, BlueJ 웹사이트의 FAQ(http://www.bluej.org/help/faq.html) 를클릭하여 How To Ask For Help(http://www.bluej.org/help/ask-help.html) 를읽어보기바랍니다. 6
3. 시작하기 - 편집 / 컴파일 / 실행 3.1. BlueJ 시작하기 Windows와 MacOS에서는인스톨된 BlueJ 프로그램을실행하십시오. 유닉스시스템에서는 Installer가설치된디렉토리에 bluej 라는스크립트파일을인스톨합니다. GUI(Graphic User Interface) 환경에서는 bluej 파일을더블클릭하여간단히실행할수있습니다. 그리고명령행에서는매개변수없이 bluej만을입력하여실행하거나프로젝트명을매개변수화하여실행하는방법이있습니다. 또는 $ bluej $ bluej example/people 그림 1 : BlueJ 메인윈도우 7
3.2. 프로젝트열기 요약프로젝트를열기위해 Project 메뉴에서 Open 을선택하십시오. 프로젝트란, 관련있는여러개의파일들을묶어서관리하기위한하나의작업단위를말합니다. BlueJ 프로젝트는표준자바패키지들처럼프로젝트에관련된파일들을모아놓은디렉토리입니다. 우선 BlueJ를시작한후에 Project - Open... 메뉴를선택하여프로젝트를여십시오. 표준 BlueJ 배포판의 examples 디렉토리에는몇개의예제프로젝트들이있습니다. 이예제들중이번절에서는 people 프로젝트를다룰것입니다. examples 디렉토리에들어있는 people 프로젝트를선택해서프로젝트를오픈하십시오. examples 디렉토리는 BlueJ 홈디렉토리에서찾을수있습니다. 프로젝트를열면그림 1과유사한윈도우를볼수있을것입니다. 하지만설치환경에따라서보이는모습이차이가날수도있습니다. 3.3. 객체생성하기 요약객체를생성하기위해서는클래스팝업메뉴에서생성자를선택하십시오. BlueJ의기본적인특징들중하나는, 완벽한어플리케이션을실행할수있을뿐만아니라하나의클래스에서생성된객체도 public 메소드들을실행함으로써사용자와단일객체간의상호작용을할수있다는것입니다. BlueJ에서의실행은객체를생성하고, 생성된객체의메소드중하나를호출하는것을말합니다. 이러한실행은작성완료된클래스를개별적으로테스트해볼수있기때문에어플리케이션개발에매우큰도움이됩니다. 따라서, 처음부터완벽한어플리케이션을만들필요는없습니다. 노트 : 정적메소드는객체를만들지않고도직접실행할수있습니다. 메인메소드 (main method) 와같은정적메소드 (static method) 는자바어플리케이션에서일어나는일반적인일들을 ( 정적메인메소드를실행함으로서자바어플리케이션을실행하기 ) 할수있습니다. 위와관련된사항은나중에다시살펴보도록하겠습니다. 우선, 우리는자바환경에서일반적으로할수없는보다흥미로운몇가지다른것들을다뤄보겠습니다. 메인윈도우중앙의사각형들은 (Database, Person, Staff, Student로명명된사각형들 ) 현재작업중인어플리케이션에포함된클래스들을아이콘형식으로보여주는것입니다. 클래스아이콘에서마우스오른쪽버튼을클릭하면 ( 매킨토시 :ctrl+click 1) ) 클래스에서적용가능한 operation들이있는메뉴를볼수있습니다 ( 그림 2). 그림 2의팝업메뉴에는두개의생성자함수들과 BlueJ 개발환경에서제공해주는몇가지기능들을보여줍니다. 1) 이튜토리얼에서마우스오른쪽버튼클릭 (right-click) 은매킨토시사용자들에게는컨트롤버튼 + 클릭 (ctrl-click) 에해당됩니다. 8
그림 2 : 클래스기능들 ( 팝업메뉴 ) Staff 객체를생성하기위해서는 Staff 아이콘에서마우스오른쪽버튼을클릭합니다 ( 그림 2에서보여지는팝업메뉴 ). 팝업메뉴는 Staff 객체를생성할수있는두개의생성자함수들 2) 을보여줍니다. 하나는매개변수들이없는생성자함수이고다른하나는매개변수들을가지고있는생성자함수입니다. 우선매개변수들이없는생성자함수를선택하십시오. 그러면그림 3과같은대화상자가나타날것입니다. 그림 3 : 매개변수없는생성자함수로객체생성하기. 2) new Staff(), new Staff(name, yearofbirth, roomnumber) 9
이대화상자는생성할객체의이름을입력받습니다. 또한동시에기본적인이름 (staff_1) 이제공됩니다. 이이름 (staff1) 은지금사용하기에무리가없기때문에바로 OK 버튼을클릭하십시오. 그러면 Staff 객체가생성될것입니다. 생성된객체는오브젝트벤치 (object bench) 에보여지게됩니다 ( 그림 4). 여기까지가객체생성에관련된모든사항입니다. 다시정리하면, 클래스팝업메뉴에서생성자함수를선택하여실행하면오브젝트벤치에생성된객체가보여지게됩니다. 그림 4 : 오브젝트벤치에생성된객체 Person 클래스아이콘에는추상클래스를나타내는 <<abstract>> 표기가있습니다. 자바언어명세서에서정의되었듯이추상클래스는객체를생성할수없습니다. 정말로, 추상클래스는객체를생성할수없는지직접확인해보기바랍니다. 3.4. 실행하기 요약메소드를실행시키기위해서는객체팝업메뉴에서메소드를선택하십시오. 객체가생성되면 public 메소드들을실행시킬수있습니다. 오브젝트벤치에있는객체에대하여마우스오른쪽버튼을클릭하면객체메소드들이포함된팝업메뉴를볼수있습니다 ( 그림 5). 이메뉴는클릭한객체에서사용할수있는메소드들과 BlueJ 환경에서제공하는두개의특별한기능들 (Inspect, Remove) 을보여줍니다. 이기능들에대해서는나중에다시살펴보도록하고, 우선메소드에대해자세히살펴보겠습니다. 그림 5 : 객체메뉴 10
그림 5와같이 getroom과 setroom 메소드들은각각 staff 멤버의방번호 (room number) 를설정하고반환하는동작을합니다. getroom 메소드를호출해봅시다. 객체메뉴의 getroom 메소드를선택하여실행합니다. 그러면대화상자에서실행결과를볼수있을것입니다 ( 그림 6). 그림 6과같이결과의내용이 "(unknown room)" 이됩니다. 왜냐하면, Staff 객체에대한방번호를지정하지않았기때문입니다. 그림 6 : 메소드호출결과 슈퍼클래스에서상속된메소드들은서브메뉴 (inherited from Person) 에서선택하여사용할수있습니다. 객체팝업메뉴의상단에는두개의서브메뉴 3) 가있을것입니다. 하나는 Object 클래스로부터상속받은메소드들이고다른하나는 Person 클래스로부터상속받은메소드들입니다 ( 그림 5). 따라서, 서브메뉴를선택하면 getname과같은 Person 클래스의메소드들을호출할수있습니다. getname을호출해보세요. 그러면 "(unknown name)" 이라는불분명한결과를보게될것입니다. 왜냐하면 Person 클래스의 name 속성을지정하지않았기때문입니다. 이제방번호 ( 를지정해봅시다. 매개변수를갖는함수호출방법을알게될것입니다. (getroom 과 getname 메소드는반환값들을가지지만, 매개변수들은가지지않습니다.) 객체팝업메뉴의 setroom 메소드를호출하면매개변수들을입력받기위한대화상자가나타납니다. 대화상자에나타나는프롬프트위치에매개변수를입력하십시오 ( 그림 7). 그림 7 : 매개변수들을입력받는메소드호출대화상자 3) inherited from Object inherited from Person 11
이대화상자에서는호출되어지는메소드의인터페이스 ( 주석과시그니처포함 ) 를보여줍니다. 그아래에는매개변수값을입력할수있는텍스트필드가있습니다. 또한, 윗부분의시그니처에는매개변수의데이터형이 String형임을알려줍니다. 이제텍스트필드에새로운방번호 ( 이중인용부호를가진문자열 ) 를입력하시고 OK버튼을누르십시오. 위메소드는반환값이없기때문에더이상의결과창이나타나지않습니다. 그럼, 정말로방번호가변했는지 getroom 메소드를호출하여확인해보십시오. 이밖에다른객체생성과메소드호출을연습해보기바랍니다. 익숙해질때까지, 매개변수들을가진생성자함수를호출해보고, 좀더다양한메소드들을실행해보십시오. 3.5. 클래스편집하기 요약클래스의소스코드를편집하기위해서는클래스아이콘을더블클릭하세요. 지금까지는단지객체의인터페이스만을다루어보았습니다. 지금부터는클래스내부구현부분을다루어보겠습니다. 클래스기능들중 ( 클래스아이콘에서마우스오른쪽버튼을클릭하면나타나는기능들 ) Open Editor를선택하면클래스구현부분을볼수있습니다. 또한클래스아이콘을더블클릭하여똑같은기능을수행할수있습니다. 에디터에대한사용방법이간단함으로이튜토리얼에서는자세히다루지않겠습니다. 에디터에대한자세한내용은후에별도로다루어보겠습니다. Staff 클래스의구현부분을에디터를사용하여오픈한후 getroom 메소드의구현부분을찾아보십시오. getroom 메소드의이름에서알수있듯이 staff 멤버의방번호를반환합니다. 메소드반환값앞부분에 "room" 을추가하여반환값을 "M.3.18" 에서 "room M.3.18" 로변경해보십시오. 즉, 을 return room; return "room" + room; 으로변경합니다. BlueJ는자바를완벽히지원하므로클래스를구현하는데있어서특별한제한사항은없습니다. 3.6. 컴파일하기 요약 클래스를컴파일하기위해서는에디터에있는 Compile버튼을클릭하십시오. 프로젝트를컴파일하기위해서는프로젝트윈도우의 Compile 버튼을클릭하십시오. 에디터를수정한후메인윈도우를확인해보십시오. 그러면 Staff 클래스의아이콘에체크표시가생겼다는것을알수있습니다. 체크표시가생긴클래스는변경된후에컴파일되지않았음을나타냅니다. 다시에디터를살펴보겠습니다. 12
노트 : 프로젝트를처음열었을때왜클래스아이콘에체크표시가되어있지않은지궁금할수있습니다. people 프로젝트내의클래스들은이미컴파일되어있기때문에체크표시가되어있지않습니다. 종종 BlueJ 프로젝트들은컴파일되지않은상태로배포되므로, 프로젝트를처음으로오픈하면대부분의클래스아이콘들은체크표시가되어있을것입니다. 에디터의상단에있는툴바에는자주사용되는기능을수행하는몇개의버튼들이있습니다. 그중의하나가 Compile 버튼입니다. 컴파일기능은에디터에서해당클래스를직접컴파일할수있게해줍니다. Compile 버튼을눌러보십시오. 에러가없다면에디터의아래부분에있는정보창 (information area) 에클래스가컴파일되었다는메시지를출력할것입니다. 만약구문에러 (syntax error) 가생겼다면에러가발생한라인은반전되고, 정보창에에러메세지가출력될것입니다. ( 컴파일을처음해보는경우에는, 세미콜론빼먹기등과같은구문에러를직접만들어보고적절한에러메시지가표시되는지다시한번컴파일하여확인해보십시오.) 노트 : 클래스소스코드를반드시저장할필요는없습니다. 소스들은사용되어질때마다 ( 예를들어, 클래스가컴파일되기전이나에디터가닫힐경우 ) 자동으로저장됩니다. 단, 사용하는시스템이매우불안정하고, 자주충돌을일으킨다거나, 작업내용이사라질것이걱정된다면 Class 메뉴에있는기능을이용하여확실히저장할수있습니다. 클래스를성공적으로컴파일하였다면에디터를닫으십시오. 프로젝트윈도우에툴바역시 Compile 버튼을가지고있습니다. 이컴파일기능은전체프로젝트를컴파일합니다. ( 컴파일이필요한클래스들만올바른순서대로재컴파일합니다.) 두개이상의클래스들을수정한후에 ( 수정된클래스아이콘에체크표시가나타납니다.) Compile 버튼을눌러보십시오. 만약컴파일되는클래스들중에서에러가발생한다면, 에디터창이열려에러가발생한위치와에러메시지가표시될것입니다. 다시오브젝트벤치를보면객체가없을것입니다. 오브젝트벤치의객체는클래스구현부분이변경될때마다사라집니다. 3.7. 컴파일러에러들에관한도움말 요약 컴파일러에러메시지에대한도움말이필요하다면, 에러메시지오른쪽에있는물음표를클릭하십시오. 자바를처음배우는대부분의학생들은자주컴파일러에러메시지를이해하는데어려워합니다. 따라서몇가지도움을주고자합니다. 에디터를다시오픈하십시오. 소스코드파일에에러를만들고컴파일하면에러메시지가에디터정보창에보여질것입니다. 정보창의오른쪽에보여지는물음표를클릭하면지금발생한에러메시지에대한추가정보를볼수있습니다 ( 그림 8). 13
그림 8 : 컴파일러에러와 Help 버튼 여기서모든에러메시지들에대한도움말이제공되는것은아닙니다. 일부도움말은아직작성중입니다. 하지만이미많은에러들이설명되어있기때문에시도해볼가치가있습니다. 아직작성되지않은도움말들은추후에배포될 BlueJ 버전에포함시킬것입니다. 14
4. 추가기능 이번절에서는자바개발환경에서사용가능한몇가지추가기능들에대해서살펴보도록하겠습니다. 여기서소개할추가기능들은필수적인것은아니지만, 매우빈번하게사용됩니다. 4.1. 객체상태검사 요약객체상태검사는객체의내부상태를보여줌으로써디버깅을도와줍니다. 객체의메소드를실행시킬때, 그림 5와같이, 사용자가정의한메소드외에객체들에사용가능한객체상태검사기능을사용할수있습니다. 이기능은객체의인스턴스변수들 (fields) 의상태를체크해줍니다. 사용자로부터값을입력받아서객체를생성해보십시오 ( 예, 사용자로부터매개변수의값을입력받아서실행되는생성자함수를이용하여 Staff 클래스로부터객체를생성 ). 그런후에생성된객체에마우스를올려놓고오른쪽버튼을클릭하여팝업메뉴에서 Inspect를선택합니다. 그러면, 객체의필드들과그들의데이터타입, 그리고필드값들이표시되는대화상자가나타납니다.( 그림 9) 그림 9 : 객체상태검사대화상자 객체상태검사는객체의상태를변화시키는기능이올바르게실행되었는지아닌지를즉시체크할수있습니다. 따라서, 객체상태검사는간단한디버깅도구라고할수있습니다. Staff 예제에서, 모든필드들은간단한데이터형들 ( 기본자료형, 또는문자열형 ) 로구성되어있습니다. 이데이터타입들의값은직접볼수있어서, 생성자함수가올바르게수행되었는지를즉시볼수있습니다. 좀더복잡한경우를살펴보면, 필드들의값들은사용자가정의한객체들을참조할수도있습니다. 이와같은예를살펴보기위해여기에서는다른프로젝트를사용해보겠습니다. 기본적인 BlueJ 배포판에포함되어있는 people2 프로젝트를오픈합니다. People2 는그림 10 에서보여지고있습니다. 보다시피, 이두번째예제에는이전에살펴보았던프로젝트 (People) 의클래스들에더하여 Address 클래스를가지고있습니다. Person 클래스에서필드중하나는사용자정의형 (Address) 입니다. 15
그림 10 : People2 프로젝트윈도우 객체필드들을객체상태검사 (Inspection) 하기위해서, Staff 클래스로부터객체를생성하고이객체의 setaddress 메소드를호출하십시오 (Person의하위메뉴 4) 에서 setaddress 메소드를발견하게될것입니다 ). 주소를입력하고나면내부적으로, Staff 클래스에서생성된객체가갖고있는코드는 Address 클래스의객체를생성하고, 그것의 address 필드에 Address 객체를저장합니다. 이제, Staff 객체를객체상태검사합시다. 객체상태검사결과가나타나는대화상자는그림 11과같습니다. Staff 객체의필드들속에는 address가포함되어있습니다. 보시다시피 address 필드의값은다른객체를참조하고있음을화살표로보여줍니다. 이필드의값은매우복잡한사용자정의형객체이므로, 그림 11의대화상자에직접나타낼수없습니다. address 필드의값을좀더살펴보기위해서, object fields list에나타나는 address 필드를선택하고, 객체상태검사버튼을클릭하십시오. (address 필드를더블클릭해도됩니다.) 그림 12와같이또다른객체상태검사대화상자가오픈되면서, Address 객체의세부사항들이표시됩니다. 4) Person 하위메뉴 : staff 객체생성후, 마우스오른쪽버튼을클릭하여나타나는팝업메뉴에는 staff 클래스의슈퍼클래스 (Person) 로부터계승된메소드들이나열되어있습니다. 16
그림 11 : 객체참조를가지는상태검사 그림 12 : 내부객체의상태검사 선택한필드가 public인경우에는객체상태검사버튼을클릭하는대신에, address 필드를선택하고 Get 버튼을클릭해도됩니다. 이와같은조작을하게되면, 선택된객체가오브젝트벤치에보여지게됩니다. 오브젝트벤치에나타난객체의메소드를호출함으로써, 좀더상세한사항들을시험해볼수있습니다. 17
4.2. 매개변수를통해서객체전달하기 요약 객체아이콘을클릭하면메소드호출의매개변수를통하여객체를전달할수있습니다. 매개변수를통해서다른객체의메소드로객체를전달할수있습니다. 예제를살펴봅시다. Database 클래스의객체를생성합니다. (Database 클래스는매개변수를갖지않는생성자함수를한개가지고있으므로, 객체의생성은매우간단합니다.) Database 객체는사람들 (Person) 의목록을보유하는기능을갖고있습니다. Database 객체는 person 객체들을추가하는기능과, 현재목록에저장된모든사람들을보여주는기능을가지고있습니다. (Database라고부르는것은사실과장된표현입니다.) 만약에오브젝트벤치에 Staff나 Student 객체가없다면, Staff나 Student의객체를생성하십시오. 그렇게하기위해, Database 객체와 Staff나 Student 객체가오브젝트벤치에서동시에필요합니다. 이제 Database 객체의 addperson 메소드를호출합니다. 시그니처에는 Person형의매개변수가필요합니다. Person 클래스는추상클래스이므로, Person형의객체를직접만들수없다는것을기억하십시오. 그러나, Student 객체나 Staff 객체는 Person 객체의서브타이핑 (subtyping) 이므로, Person 객체대신사용할수있습니다. 그래서, Person 객체가필요한곳에 Student 객체나 Staff 객체를대신해서사용할수있습니다. 오브젝트벤치에있는객체를매개변수를통해서, 기동시킨메소드로전달하기위해서는, 매개변수필드안에전달시킬객체이름을입력하는방법과전달시킬객체를클릭하는방법이있습니다. 후자의방법을사용할경우, 메소드호출대화상자에객체이름이입력됩니다. OK버튼을클릭하면함수가호출됩니다. 이메소드는리턴값이없어서, 결과를직접볼수는없습니다. Database 의 listall 메소드를호출하여 addperson 메소드가올바로수행되었는지확인할수있습니다. listall 메소드는 Person 객체의정보를표준출력합니다. Person 객체의정보를보여주기위한텍스트터미널이자동적으로오픈되는것을알수있습니다. 한개이상의 Person 객체들을 Database 객체에삽입해보십시오. 18
5. 새프로젝트만들기 이장에서는새로운프로젝트를만드는방법에대해서살펴보겠습니다. 5.1. 프로젝트디렉토리만들기 요약프로젝트를만들기위해서는, Project 메뉴에서 New Project 를선택합니다. 프로젝트를만들기위해서는, 메뉴에서 Project - New Project... 를선택합니다. 파일입력대화상자가열리게되면이곳에프로젝트이름을입력하고, 저장할위치를선택합니다. 지금한번확인해보십시오. 새프로젝트의이름은어떠한것을사용해도상관없습니다. OK버튼을클릭하시면앞서입력했던이름의디렉토리가생성되고, 메인윈도우에는새로운프로젝트가생성될것입니다. 5.2. 클래스만들기 요약클래스를새로만들때는 New Class 버튼을클릭하고클래스이름을입력합니다. 또다른방법으로서, 프로젝트툴바에있는 New Class 버튼을클릭하여클래스이름을지정하면새로운클래스를만들수있습니다. 여기서클래스이름은반드시적합한자바식별자를입력해야합니다. 클래스는 4가지유형 ( 추상클래스, 인터페이스, 애플릿또는기본적인구상클래스 ) 중에서선택하여만들수있습니다. 어떠한유형을선택하느냐에따라서, 클래스내부에자동적으로만들어지는코드들이결정됩니다. 나중에클래스내의소스코드를편집 / 변경함으로써클래스의유형을변경할수있습니다 ( 예를들어, abstract 란키워드를코드안에삽입하여추상클래스로변경 ). 클래스가만들어지면클래스다이어그램영역에아이콘으로표시됩니다. 만약그것이기본구상클래스가아닌경우, 해당클래스의유형 ( 인터페이스, 추상또는애플릿 ) 이아이콘에표시될것입니다. 새로운클래스에대하여에디터를오픈해보면, 기본적인코드가자동으로작성되어있음을알수있습니다. 이러한기본적인코드는코딩을쉽게시작할수있도록도와줍니다. 이러한기본코드는문법적으로정확하기때문에컴파일될수있습니다 ( 그러나많은일을하지는않습니다 ). 몇개의클래스를만들어보고컴파일을해봅시다. 19
5.3. 의존관계만들기 요약 화살표를만들기위해서는, 화살표버튼을클릭하고다이어그램영역에서화살표를드래그하거나에디터를이용하여소스코드를작성합니다. 클래스다이어그램에서클래스간의의존관계는화살표로나타내는데, 상속관계 (extends 또는 implements) 는더블화살표 ( ) 로보여주고 uses관계는싱글화살표 ( ) 로보여줍니다. 의존관계는다이어그램영역에서직접화살표로추가하거나소스코드에서문자로추가할수있습니다. 만약다이어그램영역에서화살표를추가했다면소스코드에도자동적으로의존관계가입력되고, 소스코드에서의존관계를입력했다면다이어그램영역에서도화살표가추가됩니다. 다이어그램영역에서화살표를추가하려면, 원하는화살표버튼 (extends 또는 implements 는더블화살표, uses관계는싱글화살표 ) 을클릭하고하나의클래스에서다른클래스로화살표를드래그합니다. 클래스나인터페이스의소스코드내에 extends 또는 implements 정의를입력함으로써상속관계화살표를추가할수있습니다. uses관계화살표를추가할경우, 화살표가가리키는대상이다른패키지의클래스가아닌경우, 소스코드는바로변경되지않습니다. ( 다만화살표가가리키는대상이다른패키지의클래스인경우는 import문장이생성됩니다. 그러나지금까지의예에서는다루지않았습니다 ). 소스코드에서실제로사용하지않고있는클래스를가리키는 uses관계화살표를다이어그램에추가하면, 해당클래스가사용되지않으면서 uses관계가선언되었음 이라는경고메시지가발생됩니다. 텍스트로화살표를추가하는것은어렵지않습니다 : 보통때처럼소스코드를입력하십시오. 그러면클래스를저장하자마자, 다이어그램에도추가될것입니다. 5.4. 요소들의제거 요약 클래스나화살표를삭제하려면, 대상클래스또는화살표의팝업메뉴에서 Remove를선택하십시오. 다이어그램으로부터클래스를삭제하려면, 삭제하려는클래스를선택하고 Edit 메뉴로부터 Remove Class를선택하거나, 삭제대상클래스의팝업메뉴에서 Remove를선택하여삭제할수있습니다. 화살표를삭제할때는우선화살표를선택한후 Edit 메뉴에서 Remove 를선택하거나팝업메뉴에서삭제할수있습니다. 20
6. 코드패드의사용 BlueJ 코드패드는자바코드 ( 표현식과명령문 ) 의일부분을쉽고빠르게평가할수있는기능을제공합니다. 따라서, 코드패드는자바언어로작성된프로그램코드의의미를상세히조사하거나구문을예증하고시험하는데사용할수있습니다. 6.1. 코드패드나타내기 요약 코드패드를사용하기위해보기메뉴에서코드패드보기 (Show Code Pad) 를선택하십시오 코드패드는 BlueJ 초기실행화면상에보여지지않습니다. 코드패드를나타내기위해서는보기메뉴에서코드패드보기메뉴를선택하십시오. 그러면, BlueJ 메인화면의오른쪽아랫편, 즉, 오브젝트벤치의오른쪽에나타납니다 ( 그림 13). 코드패드와오브젝트벤치사이에있는가로선과세로선을조정하여크기를바꿀수있습니다. 코드패드영역에는표현식또는문장들을입력할수있습니다. 키보드의 Enter를누르면입력된표현식또는문장이라인단위로평가되어그결과가화면에나타납니다. 그림 13 : 코드패드를나타낸메인화면 21
6.2. 간단한표현식의평가 요약코드패드에자바표현식을간단히입력함으로써평가할수있습니다. 코드패드는간단한표현식을평가하는데사용할수있습니다. 다음의예를입력해봅시다. 4 + 45 hello".length() Math.max(33, 4) (int) 33.7 javax.swing.joptionpane.showinputdialog(null, "Name:") 표현식은표준자바값과객체그리고현재프로젝트내에작성된클래스까지도참조할수있습니다. 코드패드는결과값과함께해당결과값의타입을괄호안에출력할것입니다. 만약잘못된표현식이입력된경우에는에러메시지를출력해줄것입니다. 또한오브젝트벤치위에생성해놓은객체들도코드패드에서사용할수있습니다. 예를들면, Student 클래스로부터한개의객체를생성하여오브젝트벤치에올려놓아봅시다 ( 클래스팝업메뉴를이용해좀더빠르게수행할수있습니다 ). 생성된객체의이름은 student1입니다. 코드패드안에다음과같이입력할수있습니다. student1.getname() 또한, 여러분이작성한프로젝트에있는클래스들이제공하는모든가용한메소드들을참조할수있습니다. 6.3. 객체가져오기 요약 코드패드로부터객체를오브젝트밴치로이동하기위해서는객체아이콘을드래그하십시오 코드패드에서는표현식의결과값이단순한값이아닌객체인경우가있습니다. 이와같은경우, 결과값은 <object reference> 에이어서객체의타입 ( 클래스 ) 이표시됩니다. 또한, 결과값이표시되는라인의선두부분에작은객체아이콘이나타납니다 ( 그림 14) 그림 14 : 코드패드에서객체의결과를표시 22
만약코드패드의표현식평가결과가문자열인경우, 결과값이출력되어지는라인에는문자열의값과더불어작은객체아이콘이출력됨을알수있습니다 ( 왜냐하면, 문자열은객체이므로 ). 객체를생성하기위한표현식몇가지의예는다음과같습니다. new Student() "marmelade".substring(3,8) new java.util.random() "hello" + "world" 위표현식을실행하여얻어진결과값 ( 객체 ) 들을이후의작업에서지속적으로사용하기위해서는객체아이콘을이용하면됩니다. 즉, 코드패드에있는객체아이콘을선택하여오브젝트벤치쪽으로드래그합니다 ( 그림 15). 이와같이함으로써해당객체를오브젝트벤치에위치시킬수있게되고, 오브젝트벤치에들어간객체에대해서는팝업메뉴또는코드패드를이용하여보다많은메소드호출을실행시킬수있습니다. 그림 15 : 코드패드에서생성된객체를오브젝트벤치로가져오기 6.4. 객체검사하기 요약코드패드에서생성된객체를검사하기위해서는객체아이콘을더블클릭하십시오. 코드패드를이용하여표현식을평가한결과로써얻어진객체에대하여, 검사를수행하려는경우, 검사대상객체를오브젝트벤치에위치시키지않고도검사를수행할수있습니다. 즉, 코드패드에나타난객체아이콘을더블클릭함으로써앞서설명했던객체상태검사화면이나타납니다. 6.5. 명령문실행하기 요약코드패드에명령문들을입력하여실행시킬수있습니다. 23
자바명령문들 ( 값을리턴하지않는명령문들 ) 을코드패드를이용하여실행시킬수있습니다. 예를들어다음과같이입력해보십시오. System.out.println("Gurkensalat"); System.out.println(new java.util.random().nextint(10)); 위와같은명령문들은문장의마지막부분에세미콜론을포함하거나, 포함하지않은형태로평가되어올바르게실행됩니다. 6.6. 멀티라인명령문 ( 여러개의라인에이어진명령문 ) 들과일련의명령문들 요약 멀티라인명령문을입력하기위해서는해당라인의끝부분에서 shift-enter를사용하십시오. 일련의명령문들을입력하거나여러개의라인에이어진명령문들 ( 멀티라인명령문 ) 을입력하기위해서는입력라인의끝부분에서 shift-enter를사용하십시오. shift-enter를사용함으로써, 입력된내용을실행시키지않은상태로커서는다음라인에시작부분으로이동하게됩니다. 마지막입력라인에끝부분에서 Enter를입력하게되면지금까지입력한라인들을종합하여평가합니다. 예를들어다음과같은 for문을실행시켜봅시다. for (int i=0; i<5; i++){ System.out.println("number: " + i); } 6.7. 변수를이용한명령문실행시키기 요약 ( 멀티라인 ) 명령문들에는지역변수가사용될수있습니다. 오브젝트벤치에있는객체들에이름은인스턴스필드의역할을합니다. 코드패드에서는다소제한된방법으로변수 ( 인스턴스필드와지역변수 ) 들이사용될수있습니다. 코드패드에서는지역변수들을선언할수있지만멀티라인명령문들에서만사용할수있습니다. 왜냐하면분리된입력라인들사이에서변수들은무시되기때문입니다. 예를들면, 다음과같은문장들을멀티라인방식으로입력하고실행결과를예상해봅시다. int sum; sum = 0; for (int i=0; i<100; i++){ sum+=i; } System.out.println("The sum is : " + sum); 24
한편, 위의명령어들을개별적인라인입력방식으로코드패드에입력할경우, 실행결과는실패합니다. 왜냐하면, 지역변수 sum은각라인을처리할때마다기억되지않기때문입니다. 사용자가입력한내용들은메소드의보디부분내에있는코드들로간주될수있습니다. 자바프로그램의메소드보디에유효하게작성된모든코드들은코드패드에서도또한유효합니다. 그러나, 사용자가입력한내용이서로다른메소드의일부분인경우어느한입력라인으로부터다른입력라인에선언된변수를참조할수없습니다. 또한, 오브젝트벤치에있는객체들을인스턴스필드로간주할수도있습니다. 사용자들은어떤메소드의보디내 ( 또는코드패드내 ) 에서새로운인스턴스필드들을정의할수없으며, 다만오브젝트벤치에있는객체들의인스턴스필드들을참조하거나, 메시지를보낼수있습니다. 생성된객체에새로운인스턴스필드를추가하기위해서는코드패드로부터해당객체를드레그하여오브젝트벤치에옮겨놓아야합니다. 6.8. 사용자입력이력기능 요약입력이력을사용하기위해서는상하화살표를사용하십시오. 코드패드에서는사용자가이전에입력한내용들에대한이력을저장하고있습니다. 상하화살표를이용하여이전에입력한내용을손쉽게다시입력시킬수있을뿐만아니라, 이전에입력했던내용을수정하여재입력시킬수도있습니다. 25
7. 디버깅 이절에서는, BlueJ의디버깅에관한기능들중에서가장중요한측면을소개합니다. 컴퓨터프로그래밍담당선생님들은첫수업에서디버거를사용하는것이매우중요하다고얘기하곤합니다. 그러나정작디버거에대해소개할만한시간은없습니다. 학생들은편집기와컴파일러, 실행을하는것에도힘겨워합니다. 그래서다른복잡한도구를소개할시간이없습니다. 위와같은이유로인해서우리는가능한간단한디버거를만들결심을하였습니다. 선생님이 15분안에설명을할수있고, 학생들은추가적인다른설명없이바로사용할수있도록하는것이우리의목표입니다. 우선, 우리는전통적인디버거의기능들을 3가지로줄였습니다. 중단점 (breakpoints) 설정 단계별코드실행 변수검사위 3가지작업들은아주간단합니다. 지금부터하나씩살펴보도록하겠습니다. 시작하기에앞서, examples 디렉토리안에포함된 debugdemo 프로젝트를오픈하십시오. debugdemo 프로젝트는디버거의기능을시연하기위한목적으로만들어진몇개의클래스들을포함하고있습니다. 7.1. 중단점설정하기 요약 중단점을설정하기위해서는, 에디터에서소스코드의왼쪽부분에위치한중단점영역을마우스의왼쪽버튼으로클릭하면됩니다. 중단점을설정함으로써소스코드의특정지점에서프로그램실행을일시중단시킬수있습니다. 프로그램실행이일시중단되면, 프로그램실행에의해생성되어실행중인객체들의현재상태를조사할수있습니다. 따라서, 프로그램소스코드내에서어떤일이일어나고있는지를이해하는데도움이됩니다. 편집기의소스코드가보여지는곳의왼쪽부분이중단점영역입니다 ( 그림 13). 이영역을마우스왼쪽버튼으로클릭함으로써중단점을설정할수있습니다. 작은 stop 표시가중단점을의미합니다. 바로시도해봅시다. Demo 클래스를오픈하십시오. loop 메소드를찾은후 loop 메소드코드중에서 for 반복문내의임의의라인에중단점을설정하십시오. stop 표시가에디터에나타날것입니다. 26
그림 13 : A breakpoint 프로그램실행중중단점에도달하게되면프로그램은일시중단됩니다. 바로시도해봅시다. Demo 클래스에서객체를생성하여매개변수를 10으로하여 loop 메소드를호출하십시오. 실행후중단점에도달하면, 소스코드의현재라인을보여주는에디터윈도우와디버거윈도우가나타납니다 ( 그림 14). 그림 14 : 디버거윈도우 편집기에서반전된부분은다음차례에실행될라인입니다. ( 프로그램의실행은반전된라인의명령문을실행하기바로앞부분에서정지됩니다.) 27
7.2. 코드의단계별실행 요약 디버거에있는 Step 버튼과 Step Into 버튼을사용하여코드를단계별로실행시킬수있습니다. 현재실행을일시중지한상태이며 ( 메소드는실제로실행이되었고중단점까지도달했음을확인할수있습니다 ), 우리는한단계씩코드를실행시키면서어떻게실행이진행되는지살펴볼수있습니다. 이와같이하기위해서는디버거윈도우의 Step 버튼을반복해서클릭합니다. 이때소스코드의라인이변화하는것을볼수가있습니다. ( 실행이완료된라인을지나서다음라인이반전됩니다.) Step 버튼을누를때마다코드의한라인이실행되고프로그램의실행이다시멈추게됩니다. 디버거윈도우에나타난변수들의값들 ( 예를들면, sum의값 ) 이변하는것을유념하십시오. 단계별로실행을시키면서일어나는일들을관찰할수있게됩니다. 위와같은단계별실행을중지하고싶을때는중단점을다시클릭해서 stop 표시를제거하면되고, 디버거의 Continue 버튼을클릭하여다시이어서실행을시작할수있습니다. 다른메소드를가지고다시한번시도해보겠습니다. 현재실행하고있는 Demo 클래스의 cartest() 메소드내의아래와같은라인에중단점을설정하십시오. places = mycar.seats(); 메소드를호출하십시오. 위에서설정한중단점에도달했을때실행하려는라인에는 Car 클래스의 seats() 메소드를호출하는명령어를포함하고있습니다. 이때 step 버튼을클릭함으로써해당메소드의모든라인을단번에실행합니다. 이번에는 Step Into 버튼을클릭해봅시다. 임의의메소드호출에대해서 Step Into 기능을사용하면, 해당메소드의구현부분으로들어가서한라인씩명령어를실행합니다. 위의경우, Car 클래스에정의된 seat 메소드가해당됩니다. 한라인씩명령어를실행하여끝에도달하게되면메소드를호출한 cartest 메소드쪽으로돌아가게됩니다. 디버거가변화되는상태를어떻게표시하는지주의해서살펴봐주십시오. 현재라인에메소드호출문이포함되어있지않을경우, Step 버튼과 Step Into 버튼은동일한기능을수행합니다. 7.3. 변수들의검사 요약 디버거윈도우에는변수들의상태가자동으로변경되므로변수들을검사하는것이쉽습니다. 소스코드를디버그할때객체들 ( 지역변수들과인스턴스변수들 ) 의상태를검사하는것은중요합니다. 객체들의상태를검사하는것은대부분계속보아온평범한일입니다. 변수들을검사하기위해서특별한명령들을필요로하지는않습니다. 현재객체의정적변수들과인스턴스변수들과현재메소드의지역변수들은항상자동적으로화면에갱신되어보여집니다. 28
일련의함수호출들중에서메소드들을선택하므로써, 현재활성화되어있는다른객체들및메소드들의변수를볼수있습니다. 예를들면, cartest() 메소드에중단점을설정하고다시실행을해보십시오. 디버거윈도우의왼쪽에순차호출을아래와같이볼수있습니다. Car.seats Demo.carTest 이는 Demo.carTest에의해 Car.seats가호출된것을의미합니다. 메소드의현재변수값과소스를검사하는리스트에서 Demo.carTest를선택할수있습니다. 만약 new Car(...) 명령이포함된라인을지나게되면, <object reference> 에서지역변수 mycar의값을확인할수있습니다. 문자열을제외한모든객체형의값들은이와같은방식으로보여지게됩니다. 객체형의값을더블클릭함으로써변수를검사할수있습니다. 이렇게객체검사윈도우를여는것은 4.1절에서말했던내용과동일합니다. 지금객체들을검사하는것과오브젝트벤치의객체들을검사하는것사이에는사실차이가없습니다. 7.4. 중지와종료 요약 중지 (Halt) 와종료 (Terminate) 는실행을일시적으로중지하거나완전종료하는데사용됩니다. 간혹프로그램이오랜시간동안실행하고있으면, 모든것이정상인지의구심이들게됩니다. 아마도무한루프에빠져있거나아니면오랜실행시간을필요로하는프로그램일것입니다. 이런경우에우리는프로그램을점검할수있습니다. Demo 클래스의 longloop() 메소드를실행시켜보십시오. longloop() 메소드는오랫동안실행됩니다. 무엇이어떻게진행되고있는지알고싶어질것입니다. 만약디버거윈도우가화면위에없으면디버거윈도우를오픈하십시오. ( 한편, 프로그램이실행되는동안컴퓨터가작동하고있음을알려주는상태표시바를클릭하므로써간단히디버거를활성화할수있습니다.) Halt 버튼을클릭하세요. Halt 버튼의클릭으로프로그램의실행은중단점을설정한것과같이일시중단됩니다. 몇개의스텝을차례로진행시켜볼수있게되고그러면서변수들을조사해서제대로되어있는지살펴볼수있습니다. 이와같은방법을사용하면프로그램전체를완료시키는데시간이좀필요합니다. Continue 와 Halt 버튼을여러번클릭함으로써얼마나빨리반복되는지알수있습니다. 만약계속진행하기싫으면 ( 예를들면, 무한루프에빠져있는것을발견하는경우 ) Terminate 버튼을눌러서프로그램전체실행을종료시킬수있습니다. 전체실행종료는너무자주사용하면좋지않습니다. 컴퓨터를강제종료시키게되면완벽하게잘쓰여진객체들이비정상적인상태로종료될수있으므로, 긴급상황에서만전체실행종료를사용할것을권장합니다. 29
8. 독립형어플리케이션생성 요약독립형어플리케이션을만들기위해서는 Project 메뉴에서 Export... 를사용합니다. BlueJ는실행가능한 jar파일을생성할수있습니다. 실행가능한 jar파일은더블클릭을함으로써 Windows나 MacOS X 등에서실행시킬수있으며, Unix나 DOS프롬프트상에서는다음과같은명령어를사용하여실행시킬수있습니다. java -jar < 파일명 >.jar 예제프로젝트 hello 를살펴봅시다. 먼저예제디렉토리를열어서프로젝트를컴파일하고, Project 메뉴에서 Export... 를선택합니다. 그림 15: Export 대화상자그림 15와같이형식을지정할수있는대화상자가나옵니다. jar file을선택하여실행가능한 jar파일을생성합니다. jar파일이실행가능하도록하기위해서는메인클래스를지정해야합니다. 이클래스에는다음과같이올바르게정의된메인메소드가있어야합니다. public static void main(string[] args) 위의예제에서는단하나의클래스만존재하기때문에메인클래스를선택하는것은간단합니다. 팝업메뉴에서 Hello를선택하십시오. 만약다른프로젝트를실행하고싶다면메인메소드가있는원하는클래스를선택하십시오. 일반적으로실행파일에는소스코드가포함되어있지않지만, 소스코드를배포하고싶다면사용자가포함시킬수있습니다.( 예를들어, 전자우편을통해다른누군가에게한개파일형태로프로젝트내의모든파일을보내려고할경우, jar 형식을사용할수있습니다.) 사용자라이브러리를사용하기위하여 BlueJ 의환경을설정했을경우 (Preferences/Libraries 를설정하거나 lib/userlib 디렉토리를사용 ), 대화상자의중간부분에 Include User libraries 라는영역이나타납니다.( 어떠한라이브러리도사용하지않을경우에는이와같은영역은나타나지않습니다.) 사용자들은반드시현재작성중인프로젝트에서사용하고있는모든라이브러리들을체크해야합니다. 30
Continue를클릭하십시오. 새로생성할 jar파일의이름을기입할수있는파일대화상자가나타납니다. hello를입력하고 Create버튼을클릭합니다. 포함될라이브러리를갖고있지않을경우에는, hello.jar 파일이생성될것입니다. 만약, 갖고있을경우에는 hello.jar파일이포함된 hello라는디렉토리가생성될것입니다. 또한, 이와같이만들어진디렉토리에는모든필요한라이브러리들이포함됩니다. 이와같이만들어진 jar파일은같은디렉토리내에서참조하고있는라이브러리들을찾아내고자할것이므로, 다른곳으로이동시킬때에는관련된 jar파일들을함께유지할수있도록주의를기울여야합니다. GUI 인터페이스를사용하는어플리케이션의경우에는 jar파일을더블클릭할수있습니다. 우리가살펴보고있는예제프로그램은텍스트입출력을사용하므로텍스트터미널에서 jar 파일을시작하여야합니다. jar파일을실행해봅시다. 터미널이나 DOS 윈도우를열어 jar파일이저장된디렉토리로이동합니다 (hello.jar파일을볼수있을것입니다 ). 자바가올바르게설치되어있다면다음과같이입력함으로서파일을실행할수있습니다. java -jar hello.jar 31
9. 애플릿만들기 9.1. 애플릿실행하기 요약애플릿을실행하기위해애플릿의팝업메뉴에서 Run Applet 을선택하십시오. BuleJ는어플리케이션뿐만아니라애플릿을만들고, 실행할수있습니다. 예제 (examples) 디렉토리안에는애플릿프로젝트가있습니다. 우선애플릿을실행하기위하여, 예제디렉토리에서 appletdemo프로젝트를오픈하십시오. appletdemo프로젝트안에는클래스 (CaseConveter) 가하나존재합니다. CaseConveter 클래스아이콘에는애플릿임을나타내는 <<applet>> 태그가표시되어있습니다. 컴파일을한후에, 클래스팝업메뉴에서 Run Applet명령어를선택하십시오. 그러면몇가지선택을하기위한대화상자가나타납니다 ( 그림 16). 그림 16. Run Applet 대화상자 애플릿을브라우저에서실행시킬지애플릿에서실행시킬지 ( 또는애플릿을실행하지않고웹페이지만을생성시킬지 ) 선택해야합니다. 기타부분은디폴트세팅으로하고, OK 버튼을클릭합니다. 잠시후, 애플릿뷰어가 CaseConverter 애플릿을화면상에보여줍니다. 애플릿뷰어는 JDK와함께설치되어있기때문에여러분이사용하는자바컴파일러와항상같은버전입니다. 따라서, 일반적으로브라우저에서실행하는것보다문제발생률이낮습니다. 여러분이사용하는브라우저의버전에따라서, 웹브라우저가다른버전의자바환경에대응할수도있으므로, 문제점이발생할수있습니다. 그러나, 대부분의브라우저에서는잘작동됩니다. 32
마이크로소프트윈도우즈나 MAC OS시스템에서, BlueJ는여러분의기본브라우저를사용합니다. 유닉스시스템의경우는, BlueJ설정파일내에사용할브라우저가정의되어있습니다. 9.2. 애플릿만들기 요약 애플릿을만들기위해서는 New Class버튼을클릭하고, 클래스형으로 Applet을선택하십시오. 애플릿이어떻게실행되는지알아본후, 직접만들어보기바랍니다. 일반클래스처럼애플릿이포함된새로운클래스를만드십시오. New Class대화상자에서타입을선택할수있습니다. 컴파일을하고나서애플릿을실행시킵니다. 다른클래스처럼애플릿은몇가지코드가포함된기본클래스골격으로만들어집니다. 이코드는 2줄의텍스트로이루어진간단한애플릿을보여줍니다. 여러분은이제에디터를열고, 여러분의코드를삽입하여애플릿을편집할수있습니다. 일반적으로애플릿메소드들은각각그목적을설명해놓은주석을가지고있습니다. 샘플코드는모두 paint 메소드안에있습니다. 9.3. 애플릿테스트하기 어떤경우에는오브젝트벤치에서애플릿객체를다른보통의클래스처럼생성하는것은매우유용합니다. 생성자는애플릿의팝업메뉴에서볼수있습니다. 오브젝트벤치에서여러분은애플릿을완벽히실행할수없을것입니다. 그러나몇가지메소드는실행할수있습니다. 이것은여러분의애플릿구현부분에서작성한한개의메소드를테스트하는데사용할수있습니다. 만약여러분이애플릿에중단점을설정했더라도, 애플릿뷰어나웹브라우저에서애플릿을실행시켰을때어떤영향도미치지않을것입니다. 왜냐하면, 애플릿뷰어와웹브라우저는애플릿을실행시키기위한자체가상머신을사용하기때문에, 어떤 BlueJ의중단점도인식하지못합니다. 만약여러분이애플릿내에서중단점과한단계씩실행기능을사용하려면, Michael Trigoboff가만든 AppletWinodw 클래스를이용해야합니다. 이와같은 AppletWindow 클래스는 BlueJ환경하에서애플릿을직접실행시킬수있게해줍니다. 따라서, 애플릿에대한일반적인디버깅작업이가능합니다. AppletWinodw 클래스는 BlueJ 홈페이지에있는 Resources 메뉴에서데모와함께입수할수있습니다. 33
10. 기타기능들 10.1. BlueJ 로만들지않은패키지오픈하기 요약 BlueJ 로만들지않은패키지들도 Open Non BlueJ... 명령으로오픈할수있습니다. BlueJ는 BlueJ외부에서만들어진패키지들도오픈할수있게해줍니다. 이것을하기위해서는, Project - Open Non BlueJ... 메뉴를선택합니다. 자바소스파일들이포함되어있는디렉토리를선택하고, 메뉴에서 Open in BlueJ 버튼을선택합니다. BlueJ는이디렉토리를열기를원하는지다시한번물어볼것입니다. 10.2. 여러분의프로젝트에기존의클래스들을추가하기 요약 Add Class from File... 메뉴를사용하여외부에있는클래스들을프로젝트에복사할수있습니다. BlueJ 프로젝트를진행하면서 BlueJ프로젝트외부에존재하는클래스를사용하려는경우가있습니다. 예를들면, 선생님이프로젝트에서사용될자바클래스를학생들에게주는경우가있습니다. 여러분은여러분의프로젝트에서 Edit - Add Class from File... 메뉴를선택함으로서받은클래스를쉽게끼워넣을수있습니다. 즉, 이처럼하게되면 import시킬자바소스파일 ( 확장자가.java인파일들 ) 을선택할수있는것입니다. 클래스가프로젝트에 import되면, import된클래스의복사본이만들어져서현재프로젝트디렉토리로옮겨지고저장됩니다. 이와같은방법은, 여러분이직접클래스를만들어서모든소스코드를작성하는것과동일한결과를가져옵니다. 또다른방법으로써, BlueJ 외부로부터프로젝트디렉토리에새로운클래스에해당하는소스파일을추가한후에, 다시프로젝트를오픈하면, 그클래스는클래스다이어그램영역에포함되어표시됩니다. 위의방법은클래스를만들어 import할경우에는소스파일이, 소스파일을만들어추가할경우에는클래스가만들어지는두가지방법모두를사용할수있다는것을말합니다. 10.3. main 메소드와다른정적메소드들의호출 요약정적인메소드들은클래스의팝업메뉴로부터호출됩니다. example 디렉토리에서 hello 프로젝트를여십시오. 프로젝트에있는클래스는 ( 클래스 Hello) 표준 main 메소드로정의합니다. 34
클래스에서마우스오른쪽버튼을클릭하면클래스메뉴에서클래스의생성자뿐만아니라정적 main 메소드가포함된메뉴를볼수있습니다. 이제이메뉴로부터처음에객체를생성하지않고바로정적 main 메소드를호출할수있습니다. 모든정적메소드들은이렇게호출됩니다. 표준 main메소드는매개변수 ( 입력값 ) 로서 String형배열이필요합니다. 배열상수라는조건에적합하게표준자바구문을사용한 String배열을넘겨줄수있습니다. 예를들면, 아래와같이 ( 중괄호포함 ) 메소드에넘겨줄수있습니다. {"one","two","three"} 해보십시오! 노트 : 표준자바에서배열상수들은메소드호출을위한실인자 (arguments) 로서사용될수없습니다. 배열상수들은초기화에만사용될수있습니다. BlueJ 에서는표준 main 메소드의상호호출이가능하도록하기위해매개변수 [ 입력값 ] 로서배열상수의사용을허용합니다. 10.4. 문서생성하기 요약 프로젝트와관련된문서를생성하기위해 Tools메뉴에서 Project Documentation을선택합니다. BlueJ를사용하여표준 javadoc형식으로프로젝트에관련된문서를생성할수있습니다. Tools - Project Documentation메뉴를선택합니다. 이기능은프로젝트에포함되어있는클래스들의소스코드로부터정보를채취하여프로젝트에사용된모든클래스들에대한문서를생성하고, 생성된문서들을보여주기위하여웹브라우저 (web browser) 를오픈합니다. 또한 BlueJ 에디터를이용하여한개의클래스에대한문서를생성하여볼수도있습니다. 에디터를오픈하여에디터의툴바 (toolbar) 에있는팝업메뉴를사용합니다. 팝업메뉴상단우측부분에서 implementation을 Interface로바꿉니다. 이와같이함으로서에디터상에서 javadoc스타일의문서 ( 클래스인터페이스 ) 를볼수있습니다. 10.5. 라이브러리를가지고작업하기 요약 자바표준클래스 API는 Help - Java Standard Libraries를선택하면볼수있습니다. 자바프로그램을작성할때에는, 자주자바표준라이브러리를참조해야합니다. 만약온라인연결상태라면, Help - Java Standard Classes메뉴를선택함으로서 JDK API 문서를웹브라우저에서열수있습니다. JDK 문서는또한오프라인상태에서설치하고사용할수있습니다. 자세한사항은 BlueJ 웹사이트의 help부분에설명되어있습니다. 35
10.6. 라이브러리클래스로부터객체생성하기 요약 라이브러리클래스로부터객체를생성하기위해서는, Tools - Use Libraries Class 메뉴를사용하십시오. BlueJ는 JDK에서제공하는라이브러리의클래스들로부터객체를생성하기위한기능을제공합니다. 예를들면여러분은 ArrayList클래스혹은 String클래스의객체를생성할수있습니다. 이와같은방법을이용하면, 라이브러리로부터객체를생성하여실습하는데큰도움이됩니다. Tools - Use Libraries Class메뉴를선택함으로서라이브러리객체를생성할수있습니다. 위의메뉴를선택하면대화상자가팝업됩니다. 팝업된대화상자에는 java.lang.string과같이완벽하게인증된클래스명을입력해야합니다. 즉, 패키지이름까지포함된완벽한클래스이름을입력해야합니다. 팝업메뉴에표시되는텍스트필드값들은최근에사용된클래스들을보여줍니다. 클래스명을입력하고, 엔터버튼을누르십시오. 그러면대화상자에는입력된클래스의모든생성자함수와정적메소드들의리스트가표시됩니다. 리스트에표시된모든생성자함수와정적메소드들은단순히선택함으로써호출할수있습니다. 위와같이호출된생성자함수와정적메소드들은다른생성자함수또는메소드호출보다우선적으로실행됩니다. 36
11. 요약정리 시작하기 1. 프로젝트를열기위해 Project 메뉴에서 Open 을선택하십시오. 2. 객체를생성하기위해서는클래스팝업메뉴에서생성자를선택하십시오. 3. 메소드를실행시키기위해서는객체팝업메뉴에서메소드를선택하십시오. 4. 클래스의소스코드를편집하기위해서는클래스아이콘을더블클릭하십시오. 5. 클래스를컴파일하기위해서는에디터에있는 Compile 버튼을클릭하십시오. 프로젝트를컴파일하기위해서는프로젝트윈도우의 Compile 버튼을클릭하십시오. 6. 컴파일러에러메시지에대한도움말이필요하다면, 에러메시지오른쪽에있는물음표를클릭하십시오 추가기능 7. 객체아이콘을클릭함으로서메소드호출에대하여매개변수를통하여객체를전달할수있습니다. 8. 객체상태검사는객체의내부상태를보여줌으로써디버깅을도와줍니다. 새프로젝트만들기 9. 프로젝트를만들기위해서는, Project 메뉴에서 New Project 를선택합니다. 10. 클래스를만들기위해서는, New Class 버튼을클릭하고클래스이름을지정합니다. 11. 화살표를만들기위해서는, 화살표버튼을클릭하고다이어그램에서화살표를드래그하거나에디터를이용하여소스코드를작성합니다. 12. 클래스또는화살표를삭제하려면, 팝업메뉴에서삭제기능을선택합니다. 코드패드사용하기 13. 코드패드를사용하기위해보기메뉴에서코드패드보기 (Show Code Pad) 를선택하십시오. 14. 코드패드에자바표현식을간단히입력함으로써평가할수있습니다. 15. 코드패드로부터객체를오브젝트벤치로이동하기위해서는객체아이콘을드래그하십시오. 16. 코드패드에서생성된객체를검사하기위해서는객체아이콘을더블클릭하십시오. 17. 코드패드에명령문들을입력하여실행시킬수있습니다. 18. 멀티라인명령문을입력하기위해서는해당라인의끝부분에서 Shift-Enter를사용하십시오. 19. ( 멀티라인 ) 명령문들에는지역변수가사용될수있습니다. 오브젝트벤치에있는객체들에이름은인스턴스필드의역할을합니다. 20. 입력이력을사용하기위해서는상하화살표를사용하십시오. 37
디버깅 21. 중단점 (breakpoint) 을설정하기위해서는, 편집기에서소스코드의왼쪽부분에위치한중단점 (breakpoint) 영역을마우스의왼쪽버튼으로클릭하면됩니다. 22. 디버거에있는 Step 버튼과 Step Into 버튼을사용하여코드를단계별로실행시킬수있습니다. 23. 디버거윈도우에는변수들의상태가자동으로변경되므로변수들을검사하는것이쉽습니다. 24. 중지 (Halt) 와종료 (Terminate) 는실행을일시적으로중지하거나완전종료하는데사용됩니다. 독립형어플리케이션생성 25. 독립형어플리케이션을만들기위해서는 Project 메뉴에서 Export... 를사용합니다. 애플릿만들기 26. 애플릿을실행하기위해애플릿의팝업메뉴에서 Run Applet 을선택합니다 27. 애플릿을만들기위해서는 New Class 버튼을클릭하고, 클래스형으로 Applet 을선택하십시오. 기타기능들 28. BlueJ 로만들지않은패키지오픈하기 : BlueJ 로만들지않은패키지들도 Open Non BlueJ... 명령으로프로젝트에서오픈할수있습니다. 29. Add Class from File... 메뉴를사용하여외부에있는클래스들을프로젝트에복사할수있습니다. 30. 정적인메소드들은클래스의팝업메뉴로부터호출됩니다. 31. 프로젝트와관련된문서를생성하기위해 Tools 메뉴에서 Project Documentation 를선택합니다. 32. 자바표준클래스 API 는 Help - Java Standard Libraries 를선택하면볼수있습니다. 33. 라이브러리클래스로부터객체를생성하기위해서는, Tools - Use Libraries Class 메뉴를사용하십시오. 38
12. 번역을마치며 Thanks God. It's a BlueJ. - 황석형 : shwang@sunmoon.ac.kr 39