65

머리말 - 품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

Embed Size (px)

Citation preview

Page 1: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임
Page 2: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임
Page 3: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

3

독자들의 사랑에 힘입어 이번에 개정판이 나오게 되었습니다. 독자 여러분께

진심으로감사드립니다.

개정판에는초판에서아쉬웠던부분을수정하 습니다. 실무에서사용하지않

는 일부 내용을 삭제하고, 실무에 필요한 for-each 문, Calendar 클래스,

MouseWheelEvent 등의 내용을 추가하 습니다. 연습문제도 추가로 수록하

습니다. 2004년 JDK 1.5 버전 이후에 세상에 나온 제네릭(generics, 일반화)은

그 사용이 점점 늘고, 현재 제네릭 프로그래밍이라는 새로운 패러다임이 정착되

고있어서, 기존에8장에있던‘제네릭과컬렉션’을7장으로옮기고, 군더더기를

없애고, 정성스럽게 수정하 습니다. 책에서 다루는 이클립스와 JDK를 최신 버

전으로 바꾸었습니다. 또한 본문과 소스의 이해력을 높이기 위해 변화를 주었습

니다.

자바(Java)는 그 이전 시 에 있었던 프로그래밍 언어에서 한 차원 진화된 개

념으로 개발된 가히 혁명적 언어이며 플랫폼입니다. 한 번 작성된 자바 프로그램

은 어느 컴퓨터, 어떤 운 체제에서도 실행될 수 있습니다. Write Once Run

Anywhere의세상이만들어지는것입니다. 데스크톱, 웹서버및웹클라이언트,

셋톱 등의 임베디드 장치, 스마트폰을 중심으로 하는 모바일 단말기, 스마트 TV

등의가전제품등생활과산업의전분야에사용되고있습니다. 자바는현재소프

트웨어시장에서가장큰지배력을뽐내고있으며, 미래창조시 를지배할프로

그래밍전문가들이알아야할필수언어입니다.

최초로인터넷웹브라우저를만들고넷스케이프를공동창업한마크앤드리슨

은월스트리트저널에실은 에서‘소프트웨어기업이세상을지배’하는전쟁이

시작되었음을강하게말하 습니다. 그는앞으로의10년이기존업계의강자와새

PREFACE머리말

Page 4: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

PREFACE

4

로운소프트웨어로무장한반란군의엄청난 결이예상된다고힘주어말합니다.

“Over the next 10 years, the battles between incumbents and

software-powered insurgents will be epic.”

소프트웨어가 주목받는 세상이 이미 왔고, 소프트웨어는 이 시 의 IT 세계를

지배할것입니다. 자바(Java)가바로스마트모바일등미래IT 세계를지배할강

력한언어가될것입니다.

이책은다양한독자들이자바를배우기쉽도록노력한여러가지특징을가지

고있습니다. 첫째, 책의내용을충실히정리하고적절한예제를수록하 습니다.

둘째, 어려운개념을쉽게이해하도록많은그림과삽화를삽입하 습니다. 셋째,

각 절마다 Check Time 문제를 두어 배운 내용을 확인할 수 있도록 하 습니다.

넷째, 연습문제는이론문제와실습문제로나누고, 홀수번과짝수번을유사한문

제로 꾸며, 홀수문제에 한 반복으로 짝수문제를 연습할 수 있도록 구성하 습

니다. 다섯째, 각장마다Open Challenge 문제를두어학생스스로도전하는과

정을두었습니다.

좋은 책을 만들고자 저자와 출판사는 최선의 노력을 다하 습니다. 생능출판

사 관계자와 함께 수고한 김효수 교수님께 감사드립니다. 수연, 연수, 수희, 그리

고항상곁에있는아내와부모님께감사합니다. 하나님께감사합니다.

2013년1월

함박눈이쏟아지는날에, 황기태

Page 5: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

5

자바 프로그래밍 책을 집필함에 있어서 많은 주저함과 고민이 있었습니다. 저

의명예를걸고서점의가판 위에세울수있는책을만들어낼수있을까? 이책

을선택한자바독자들을실망시키지않고, 이해하기쉽고가슴에와닿는자바프

로그래밍 책을 과연 쓸 수 있을까? 참으로 많은 고민을 하 습니다. 그러나 현재

모바일 업계에서 일하고 있는 제가 미약하나마 실무적인 측면에서 도움을 줄 수

있는부분이있지않을까생각하고책을쓰기로결심하 습니다.

제가 현재 일하고 있는 모바일 업계에서 자바를 모르고는 취업이 힘들 정도로

자바는 매우 중요한 언어이며 플랫폼입니다. 특히 자바를 기반으로 한 안드로이

드는스마트폰시장에서가장점유율이높은플랫폼으로서자바는모바일업계에

서매우중요합니다. 이책을쓰면서독자에게바라는것은단순히프로그래밍언

어를 공부하는 것에 그치지 않고 자바 언어를 사용하여 주어진 과제를 어떻게 더

잘해결할것인가, 어떻게더좋은프로그램을만들것인가를같이고민하는것입

니다. 이 책이 독자 여러분이 고민할 때 옆에 놓고 찾아볼 수 있는 안내서가 되었

으면좋겠습니다.

함께책을만드느라고고생한황기태교수님께감사를드리고원고를깔끔하게

정리하여좋은책을만들어주신생능출판사여러분께도감사를드립니다.

마지막으로 부모님과 아내, 그리고 책을 기다리고 있는 아들 동환에게 감사를

전합니다.

2013년1월

판교에서김효수

PREFACE머리말

Page 6: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

Objectives

학습 목표로 그 장에서 무엇을 배우는지

를제시하 다.

CHECK TIME

이미 배운 내용을 점검하기 위해 단답형

식의문제를제시하 다.

Tip

학습한 내용의 보충 설명이나 참고 사항

등을정리하 다.

잠깐!

지나치기 쉬운 내용들을 환기시키기 위

해주의사항등을설명하 다.

이 � 책 � 의 � 특 � 징

6

Page 7: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

요약SUMMARY

배운 내용을 정리하기 쉽도록 주요 용어

를중심으로주요내용을요약하 다.

Open Challenge

프로젝트 문제로 그 장에서 학습한 내용

을 응용하여 프로그램을 작성할 수 있도

록하 다.

본문을쉽게이해하도록돕는그림과삽화

내용을 쉽게 이해하고 지루하지 않도록

그림과삽화를다양하게사용하 다.

연습문제EXERCISE

배운 내용을 정확히 이해하고 있는지 스

스로 검토하도록 하기 위한‘이론문제’

와 이론을 바탕으로 실전 응용프로그램

을 작성해보도록 하는 다양한‘실습문

제’를수록하 다.

7

Page 8: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

CONTENTS

8

머리말 3

이책의특징 6

자바 시작

1.1 컴퓨터와프로그래밍 18

1.2 자바의출현과WORA 20

1.3 자바의진화 28

1.4 자바개발환경구축 31

1.5 자바프로그램개발 36

1.6 이클립스를이용한자바프로그램개발 39

1.7 자바응용프로그램의종류 45

1.8 자바의특징 49

●요약 52

●Open Challenge 53

●연습문제 54

자바 기본 프로그래밍

2.1 자바프로그램의구조 58

2.2 식별자 63

2.3 자바의데이터타입 66

2.4 자바에서키입력 76

2.5 연산자 81

2.6 조건문 93

●요약 105

02CHAPTER

01CHAPTER

차례

Page 9: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

9

●Open Challenge 106

●연습문제 107

반복문과 배열 그리고 예외 처리

3.1 반복문 114

3.2 continue 문과break 문 124

3.3 배열 128

3.4 다차원배열 138

3.5 main() 메소드의인자 145

3.6 자바의예외처리 150

●요약 157

●Open Challenge 158

●연습문제 160

클래스와 객체

4.1 객체지향과자바 168

4.2 클래스선언과활용 174

4.3 메소드활용 185

4.4 생성자(constructor) 195

4.5 가비지와가비지컬렉션 204

4.6 접근지정자 208

4.7 static 멤버 215

4.8 final 225

●요약 227

●Open Challenge 228

●연습문제 229

CONTENTS

03CHAPTER

04CHAPTER

Page 10: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

CONTENTS

10

상속

5.1 상속의개념 240

5.2 클래스상속과객체 243

5.3 상속과접근지정자 248

5.4 상속과생성자 252

5.5 객체의타입변환 : 업캐스팅과다운캐스팅 259

5.6 메소드오버라이딩 266

5.7 추상클래스 278

5.8 인터페이스 284

●요약 292

●Open Challenge 293

●연습문제 294

패키지 개념과 자바 기본 패키지

6.1 패키지(Package) 308

6.2 import와클래스경로 311

6.3 패키지만들기 315

6.4 자바 JDK에서제공하는패키지 324

6.5 Object 클래스 327

6.6 Wrapper 클래스 335

6.7 String 클래스 340

6.8 StringBuffer 클래스 347

6.9 StringTokenizer 클래스 350

6.10 Math 클래스 353

6.11 Calendar 클래스 356

●요약 359

●Open Challenge 360

●연습문제 361

05CHAPTER

06CHAPTER

Page 11: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

11

제네릭과 컬렉션

7.1 컬렉션과제네릭 368

7.2 제네릭컬렉션활용 373

7.3 제네릭만들기 399

●요약 406

●Open Challenge 407

●연습문제 408

입출력 스트림과 파일 입출력

8.1 자바의입출력스트림 416

8.2 바이트스트림과파일입출력 421

8.3 문자스트림과파일입출력 427

8.4 버퍼입출력과파일입출력 436

8.5 File 클래스 440

8.6 파일복사응용프로그램작성 444

●요약 448

●Open Challenge 449

●연습문제 450

자바 GUI 기초, AWT와 스윙(Swing)

9.1 자바의GUI 454

9.2 자바GUI 패키지 459

9.3 스윙GUI 프로그램만들기 462

9.4 컨테이너(Container)와배치(Layout) 470

9.5 FlowLayout 배치관리자 474

9.6 BorderLayout 배치관리자 477

CONTENTS07CHAPTER

08CHAPTER

09CHAPTER

Page 12: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

CONTENTS

12

9.7 GridLayout 배치관리자 481

9.8 배치관리자없는컨테이너 483

●요약 487

●Open Challenge 488

●연습문제 489

자바의 이벤트 처리

10.1 이벤트기반프로그래밍(Event Driven Programming) 496

10.2 이벤트객체 500

10.3 이벤트리스너 503

10.4 어댑터(Adapter) 클래스 515

10.5 KeyEvent와 KeyListener 518

10.6 MouseEvent와MouseListener, MouseMotionListener 529

●요약 536

●Open Challenge 538

●연습문제 539

기본적인 스윙 컴포넌트와 활용

11.1 스윙컴포넌트소개 548

11.2 JLabel, 레이블컴포넌트 553

11.3 JButton, 버튼컴포넌트 556

11.4 JCheckBox, 체크박스컴포넌트 561

11.5 JRadioButton, 라디오버튼컴포넌트 567

11.6 JTextField, 텍스트필드컴포넌트 573

11.7 JTextArea, 텍스트 역컴포넌트 575

11.8 JList, 리스트컴포넌트 578

10CHAPTER

1 1CHAPTER

Page 13: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

13

11.9 JComboBox, 콤보박스컴포넌트 582

11.10 JSlider, 슬라이더컴포넌트 587

●요약 593

●Open Challenge 594

●연습문제 595

그래픽

12.1 스윙컴포넌트그리기 602

12.2 Graphics 606

12.3 도형그리기와칠하기 612

12.4 이미지그리기 617

12.5 클리핑(Clipping) 625

12.6 스윙의페인팅메커니즘 628

●요약 634

●Open Challenge 635

●연습문제 636

스레드와 멀티태스킹

13.1 멀티태스킹 644

13.2 자바의멀티스레딩 648

13.3 스레드만들기 650

13.4 스레드생명주기와스케줄링 663

13.5 스레드종료 668

13.6 스레드동기화(Thread Synchronization) 674

13.7 wait(), notify(), notifyAll()을이용한스레드동기화 682

●요약 687

CONTENTS

13CHAPTER

12CHAPTER

Page 14: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

CONTENTS

14

●Open Challenge 688

●연습문제 689

고급 스윙 컴포넌트

14.1 메뉴만들기 700

14.2 툴바 706

14.3 툴팁 710

14.4 다이얼로그만들기 714

14.5 팝업다이얼로그 725

14.6 파일다이얼로그 730

14.7 컬러다이얼로그 737

14.8 탭팬 740

●요약 744

●Open Challenge 745

●연습문제 746

애플릿과 멀티미디어

15.1 애플릿의특징 752

15.2 HTML 파일의 <applet> 태그 757

15.3 Applet으로AWT 애플릿만들기 759

15.4 JApplet으로스윙애플릿만들기 763

15.5 애플릿에파라미터전달하기 765

15.6 애플릿의보안에따른제약 770

15.7 애플릿에서오디오다루기 771

15.8 데스크톱응용프로그램에서오디오다루기 774

●요약 776

15CHAPTER

14CHAPTER

Page 15: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

15

CONTENTS●Open Challenge 777

●연습문제 779

●Check Time 정답 784

●찾아보기 800

네트워크

16.1 TCP/IP

16.2 URL을이용한웹프로그래밍

16.3 소켓프로그래밍

16.4 서버-클라이언트채팅예제

●요약

●Open Challenge

●연습문제

JDBC 프로그래밍

17.1 데이터베이스

17.2 MySQL

17.3 콘솔에서MySQL 데이터베이스활용

17.4 JDBC 프로그래밍

●요약

●Open Challenge

●연습문제

CD 수록

16CHAPTER

17CHAPTER

Page 16: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임
Page 17: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

1자바 시작

● 컴퓨터 프로그래밍과 프로그래밍 언어가 왜 필요한지를 이해

한다.

● 자바의출현배경을안다.

● 자바의종류를알고발전과정을이해한다.

● 자바개발환경— JDK, 이클립스—을이해한다.

● 자바프로그램의기초를안다.

● 자바응용프로그램의종류를안다.

● 자바의특징을이해한다.

O b j e c t i v e s

Page 18: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

컴퓨터와 소프트웨어

컴퓨터의형태는 [그림 1-1]과같이방하나를차지하는메인프레임, 가장친숙한 PC,

최근에손안의컴퓨터라고불리는태블릿(tablet)이나스마트폰(smartphone), 더작게

는장난감에들어있는원칩컴퓨터(one-chip com) 등과같이다양해졌다. 흔히, 이컴

퓨터하드웨어(hardware)를작동시켜쇼핑을하고신문을보고음악을듣고게임을할

수 있게 하는 것을 소프트웨어(software)라고 하며, 프로그램(program)이라고 부르기

도 한다. 소프트웨어는 컴퓨터의 중앙처리장치(CPU)가 이해할 수 있는 일련의 명령들

(instructions)과데이터로구성되며, CPU는이명령들을순차적으로해석하여실행함

으로써요구된기능을수행한다.

소프트웨어는 보통 CD나 DVD 같은 저장 매체로 제공되지만, 최근에는 인터넷에서

직접 다운로드받을 수 있는 형태로 제공되기도 한다. 특히 태블릿이나 스마트폰에서

작동하는소프트웨어를앱(APP)이라고부르며이들은인터넷앱스토어에서사용자가

바로구입하기도한다.

[그림 1-1] 컴퓨터와 소프트웨어

메인�프레임 PC태블릿 스마트폰

소프트웨어�혹은�앱

장난감 게임기

앱 앱

자바 시작

CH

AP

TE

R JAVA PROGRAMMING

1.1 컴퓨터와프로그래밍

컴퓨터

하드웨어

소프트웨어

프로그램

Page 19: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

애플 사의 아이폰에서 볼 수 있듯이 사용자들이 열광하는 사용자 인터페이스, 앱

스토어, 시리등과같은것들은모두소프트웨어를통해이뤄진혁신들로서, 소프트웨

어가제품경쟁력을좌우하는가장중요한요소가되었다. 하드웨어경쟁력에치중하

던 국내 전자업계에서도 최근에는 소프트웨어 경쟁력 강화를 목표로 세우고 있으며

이를위해엄청난소프트웨어인력들을필요로하고있는상황이다.

프로그래밍 언어

프로그래밍 언어란 프로그램을 작성하기 위한 언어이다. 컴퓨터의 CPU는 이진수

(binary code)로 된 0과 1밖에 이해하지 못하며, 이런 언어를 기계어(machine

language)라고한다. 사람이직접기계어로컴퓨터프로그램을만들기는매우어렵다.

따라서 0과 1로구성되는기계어의각명령을 ADD, SUB, MOVE 등과같이가급적표현하

기 쉬운 상징적인 단어들인 니모닉 기호(mnemonic symbol)로 일 일 응시킨 언어인

어셈블리어(assembly language)가 만들어졌다. 그러나 어셈블리어 역시 사람이 다루

기힘든 저급언어로서 다양한 프로그램의 구조나자료 구조를 표현하기에는 너무복

잡하 다. 이에사람이이해하고표현하기쉬우며, 복잡한알고리즘이나프로그램구

조, 자료 구조를 효율적으로 표현할 수 있는 Pascal, Basic, C/C++, C#, 자바 등의 고급

언어가 생겨나게 되었다. 고급 언어는 크게 절차 지향 언어와 객체 지향 언어로 나눌

수있는데, 자바는객체지향언어이다. 객체지향언어의특징에 해서는 4장에서자

세히알아보기로한다.

컴파일

프로그래밍은 고급 언어를 이용하여 전용 개발 도구나 텍스트 편집기로 프로그램 소

스(source) 파일(혹은 소스 프로그램)을 작성하는 것을 의미한다. 소스 프로그램은 텍

스트 파일이어서 어떤 텍스트 편집기에서도 작성이 가능하다. 기계어는 컴퓨터가 바

로 이해할 수 있는 언어이지만 C나 자바와 같은 고급 언어로 작성된 소스 프로그램은

컴퓨터가이해할수없으므로, [그림 1-2]와같이소스프로그램을기계어로변환하는

과정이 필요하다. 이를 컴파일(compile)이라고 한다. 기계어로 변환해주는 소프트웨

어를 컴파일러(compiler)라고 하며 각 언어마다 고유한 컴파일러가 있다. 그러므로 C

컴파일러로자바소스프로그램을컴파일할수는없다. 또한컴파일러를개발하는회

사는보다효율적인자사만의컴파일러를개발하여판매한다.

소스파일의확장자로프로그램이어떤언어로작성되었는지구분할수있다. 어셈

블리어의 경우 소스 파일의 확장자는 .asm이며, C 언어의 경우 .c이고, C++ 언어의 경

우 .cpp이며, 비주얼베이직의 경우 .vb이고, 자바의 경우 .java이다. 확장자와 소스

프로그램의 언어가 일치하지 않으면 해당 언어의 컴파일러는 제 로 컴파일하지 못

제1장 자바 시작 191 C H A P T E R

소프트웨어경쟁력강화

소프트웨어인력

프로그래밍언어

기계어

어셈블리어

고급언어

절차지향언어

객체지향언어

컴파일

컴파일러

Page 20: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

한다. 자바프로그램의경우컴파일된파일의확장자는 .class이다.

[그림 1-2] 소스 프로그램의 편집과 컴파일 및 실행 과정

자바의 태동

자바는애초 지금과같이 일반컴퓨터나 인터넷 환경에서사용될 목적으로 설계된 것

이 아니었다. 1991년에 선마이크로시스템스(SUN Microsystems)는 제임스 고슬링

(James Gosling)이란 걸출한 엔지니어를 중심으로 그린 프로젝트(green project)라는

이름으로 가전제품에 사용할 소프트웨어를 개발하기 시작했다. 기존의 프로그래밍

소스�프로그램편집�및�개발

소스�프로그램 기계어

프로그램�실행

컴파일

컴파일러

if(i>0) { i=i*10;}i=i-j;System.out.println(i);

0101000001000101010011110101101010100101110101010101000010001110000000

자바 프로그래밍JAVA JAVA PROGRAMMING20

1.2 자바의출현과WORA

� 어셈블리어는주로어디에사용될까?

� 고급프로그램언어를기계어로변환하는과정을무엇이라고하는가?

� 자바컴파일러로 C++ 소스프로그램을컴파일할수있는가?

CHECKTIME

Page 21: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

언어로 작성된 프로그램은 플랫폼(platform) 간에 호환성이 없어 사용자 컴퓨터의 플

랫폼에 따라 다시 소스를 컴파일하거나 아예 프로그램을 재작성해야 하는 단점이 있

었다. 특히매우다양한플랫폼을갖는가전제품을위해플랫폼에독립적인언어의필

요성이 두되었다. 또한가전제품에들어가는제어장치는매우적은양의메모리를

사용해야 하므로 새로운 언어는 이러한 내장형 시스템(embedded system)의 메모리 요

구사항을충족해야만했다.

이에 선마이크로시스템스는 플랫폼 독립적(platform independent)이며 메모리 사

용량이적은새로운언어와실행체계를개발하 고, 처음에는이언어의이름을오크

(oak)라고 지었다. 이 새로운 언어는 초기에는 별로 알려지지 않았다. 그러나 인터넷

과 웹이 엄청난 속도로 발전하면서 이 언어 역시 급속도로 퍼지게 되었다. 웹의 특징

이 웹 콘텐츠가 클라이언트의 다양한 플랫폼상의 웹 브라우저에서 실행되도록 하는

것인데, 이 언어의 플랫폼 독립성이 딱 들어맞았기 때문이다. 선마이크로시스템스는

오크를 인터넷 환경에 적합하도록 발전시켰으며, 마침내 1995년 SunWorld 95에서 자

바(Java)라는이름으로새로운기술을발표하 다. 당시가장많이사용되는브라우저

인넷스케이프(Netscape)에자바기술을적용하면서자바는급격히퍼졌고, 오늘날인

터넷시 의프로그래밍언어로자리매김을하게되었다. 데이터베이스로유명한오

라클 사에서 2009년에 선마이크로시스템스를 인수함으로써 현재는 오라클에서 자바

를제공하고있다.

제1장 자바 시작 211 C H A P T E R

플랫폼독립적

메모리사용량이적은

오크

자바

선마이크로시스템스

오라클

오크란이름은선마이크로시스템스사무실앞의참나무(oak)에서따온것이라고한다. 자바로바뀐

이유는 이미 오크란 상표가 등록되어 있어 이름을 자바로 바꾸었다고 한다. 자바 이름의 유래에는

여러가지설이있는데, 유력한것으로는개발자들이너무커피를많이마셨다는설과개발팀의핵

심멤버인 James Gosling, Arthur Van Hoff, Andy Bechtolsheim의이니셜을따왔다는설이있다.

잠깐!

Page 22: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

WORA(Write Once Run Anywhere)

C나 C++ 등자바이전의프로그래밍언어들의컴파일러는기계어코드로변환할때프

로그램이 실행될 상 컴퓨터의 CPU와 운 체제에 종속적인 코드로 변환한다. 예를

들어, 소스프로그램을 Intel 펜티엄 CPU가탑재된 PC에윈도우운 체제가설치된환

경에서 실행되도록 컴파일된 기계어 코드는 동일한 Intel CPU를 가지지만 리눅스가

설치된 PC에서는 실행되지 않는다. 혹은 다른 CPU가 설치된 윈도우 운 체제에서도

실행되지 않는다. 이러한 특징을 플랫폼 종속성(platform dependence)이라고 한다.

[그림 1-3]은플랫폼종속성을보여준다.

자바는 개발 단계에서부터 플랫폼에 독립적으로 설계되었다. 따라서 기존 프로그

래밍 언어가 가진 플랫폼 종속성을 극복하여, 운 체제나 하드웨어에 상관없이 자바

가상 기계(JVM)가 있으면 어디서나 자바로 작성된 프로그램에 동일한 실행 환경을 제

공하며동일한실행결과를기 할수있다. 또자바는웹브라우저, 분산환경의지원

등으로네트워크에연결된어느클라이언트에서도실행이가능하다. 즉, 한번프로그

램을작성하면어느하드웨어에서나어느운 체제에서나자바프로그램을실행시킬

수있다. 이를 WORA(Write Once Run Anywhere)라고한다.

[그림 1-4]는 자바의 플랫폼 독립적인 WORA의 특징을 보여준다. 개발자가 한 번 자

자바 프로그래밍JAVA JAVA PROGRAMMING22

Intel CPU를�가진리눅스�환경에서�개발

Intel CPU�+�리눅스

Apple사의�MAC PC

Intel CPU�+�윈도우�노트북

실행

실행되지�않음

실행되지�않음

C/C++응용�프로그램

플랫폼은�하드웨어�플랫폼과�운 체제플랫폼으로�되어�있어요.�프로그램의�플랫폼이호환성이�없는�이유는�다음과�같답니다.

�기계어가�CPU마다�상이하기�때문�운 체제마다�API가�서로�다르기�때문�운 체제마다�실행파일�형식이�서로�다르기�때문

[그림 1-3] 플랫폼 종속성

자바가상기계

WORA

Page 23: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

바응용프로그램을 작성하면 수정없이 서로다른플랫폼을 가진 컴퓨터에서 바로실

행가능하다. 즉, Intel CPU를가진리눅스가설치된 PC, Apple사에서만들고 MAC운

체제가실행되는 PC, Intel CPU를가진윈도우가설치된노트북등플랫폼에무관하게

바로실행가능하다.

[그림 1-4] 자바의 플랫폼 독립성, WORA(Write Once Run Anywhere)

자바의 실행 환경

자바가 WORA의특징을가질수있는것은바이트코드와자바가상기계때문이다.

●바이트 코드(byte code)

바이트 코드는 자바 컴파일러가 자바 소스 프로그램을 컴파일한 기계어로서, 플랫폼

에 한 종속성 없이 자바 가상 기계에서 실행되는 바이너리 코드(binary code)이다.

바이트 코드는 컴퓨터상의 CPU에 의해 직접 실행되지 않으며, 신 자바 가상 기계가

인터프리터 방식으로 이 바이트 코드를 해석하여 해당 플랫폼에서 실행시킨다. 바이

트코드는자바가상기계에서실행되는기계어라고생각하면된다. 자바개발환경인

JDK(Java Development Kit)는 개발자가 바이트 코드를 직접 볼 수 있도록 컴파일된 자

바 클래스 파일을 디어셈블(disassemble)하는 도구를 제공한다. [그림 1-6]은 [그림 1-

5]의 자바 소스 프로그램을 컴파일하여 생성된 클래스 파일(혹은 클래스)을 디어셈블

한바이트코드의예이다. 바이트코드는이진수로되어있어읽어도알기어렵다.

Write Once!!

Run Anywhere!!

Intel CPU�+�리눅스

Apple사의�MAC PC

Intel CPU�+�윈도우�노트북

실행실행

실행

자바응용�프로그램

자바�가상�기계

자바�가상�기계

자바�가상�기계

제1장 자바 시작 231 C H A P T E R

바이트코드

인터프리터방식

Page 24: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

[그림 1-5] Hello.java를 컴파일하고 클래스 파일을 다시 디어셈블하여 Hello.bc 파일 생성

Hello.java를�컴파일하는�명령으로�컴파일되면�Hello.class�파일이�생성된다.

Hello.class�파일을�디어셈블하는�명령으로�디어셈블된�결과�Hello.bc�파일이�생성된다.

public class Hello {

public static int sum(int i, int j) {

return i + j; // i와 j의 합을 리턴

}

public static void main(String[] args) {

int i;

int j;

char a;

String b;

final int TEN = 10;

i = 1;

j = sum(i, TEN);

a = '?';

b = "Hello";

java.lang.System.out.println(a); // ‘?’ 출력

System.out.println(b); // “Hello” 출력

System.out.println(TEN); // 10 출력

System.out.println(j); // 11 출력

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

자바 프로그래밍JAVA JAVA PROGRAMMING24

Hello.java�파일에�저장

Page 25: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

[그림 1-6] 클래스 파일을 디어셈블한 자바 바이트 코드

●자바 가상 기계

자바가상기계는서로다른플랫폼에서동일한자바실행환경을제공한다. 그러나자

바가상기계자체는각플랫폼에맞게포팅되어야하므로플랫폼종속적이다. 자바가

상기계는자바개발사인선마이크로시스템스(현재는오라클)는물론이고 IBM, 마이크

로소프트사등다양한회사에서제작공급하고있다. 한번작성된자바응용프로그램

은어떤회사의자바가상기계가설치되어있든지상관없이정상적으로실행된다.

[그림 1-7]은자바소스프로그램을컴파일하고실행하는과정을보여준다. 자바컴

파일러는 자바 소스 프로그램을 바이트 코드로 컴파일하여 클래스 파일(class file)

을 생성한다. 자바 가상 기계는 클래스 파일에 들어 있는 바이트 코드를 하나씩 실행

한다. 자바가상기계는사용자가작성한자바프로그램을실행하는도중, JDK 라이브

러리에 들어있는 다른클래스 파일이나 사용자가작성한 다른 클래스파일이 필요하

sum()�메소드를�컴파일한�바이트�코드를�디어셈블한�결과(자바의�어셈블리�코드로�출력)

제1장 자바 시작 251 C H A P T E R

자바가상기계

플랫폼종속적

클래스파일

Page 26: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

면, 그때필요한클래스 파일을 로딩하고실행한다. 부분의자바가상기계는실행

중에 JDK 라이브러리 로딩으로 인한 시간 지연을 줄이기 위해 자바 프로그램 실행 시

작 전, 자바 가상 기계가 시작할 때 JDK 라이브러리를 미리 로딩하여 둔다. 그림에서

볼수있듯이자바에서는링크(link) 과정이없다.

자바 응용프로그램 개발 과정과 타 언어(C/C++)에서의 개발 과정 차이

�자바에서의 개발 :컴파일혹은컴파일+ jar압축

�다른 언어에서의 개발 :컴파일+ 링크

●자바와 타 언어(C/C++)의 실행 환경 차이

자바와 C/C++의가장큰차이점은실행환경에있다. 프로그램을작성할때전문개발

도구나텍스트편집기를사용하여프로그램소스를작성하는것에는큰차이가없다.

자바소스를컴파일하면 자바가상기계에서실행가능한바이트코드형태의클래스

파일이 생성된다. 반면 C/C++ 소스를 컴파일하고 나면 플랫폼상에서 바로 실행될 수

있는 실행 파일이 생성된다. C/C++ 소스를 컴파일해서 생성된 실행 파일에는 플랫폼

에종속적인코드가있으며, 플랫폼이바뀌면다시소스를컴파일하고링크해야한다.

그러나 자바의 클래스 파일은 자바 가상 기계상에서 실행되어 플랫폼에 종속적인 코

드를 갖지 않으므로 플랫폼이 달라져도 다시 컴파일할 필요가 없다. [그림 1-8]은 이

들의실행환경차이를보여준다.

자바 프로그래밍JAVA JAVA PROGRAMMING26

자바�프로그래밍

Draw.java

소스�코드 바이트�코드

클래스�로딩

실행에�필요한�자바�클래스�라이브러리(JDK APls)

자바�컴파일러Hello.java

Shape.java

Draw.class

Hello.class

Shape.class

....

자바�가상�기계

윈도우�운 체제

Intel PC H/W

자바�가상�기계

Apple�맥�운 체제

Apple H/W

자바�가상�기계

휴 폰�운 체제

휴 폰�H/W

Object.class

String.class

[그림 1-7] 자바 가상 기계와 자바 응용프로그램의 실행 과정

클래스파일

실행파일

클래스파일을로딩

링크(link) 과정이없다

Page 27: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

[그림 1-8] 자바와 C/C++의 실행 환경 차이

자바�소스�파일(Test.java)

(a)�자바의�경우

바이트�코드(Test.class)

자바컴파일러

자바�프로그램(Test.class)

if(i>0) { i=i*10;}i=i-j;System.out.println(i);

0101000001000101010011110101101010100101110101010101000010001110000000

자바�가상�기계

운 체제

하드웨어

소스�파일(Test.cpp)

(b)�C++의�경우

바이너리�실행�파일(Test.exe)

C++�컴파일러/링커

C++�프로그램(Test.exe)

if(i>0) { i=i*10;}i=i-j;cout<<i;

0101000001000101011011110101101010100101111101010101001010101110001100

운 체제

하드웨어

제1장 자바 시작 271 C H A P T E R

Tip 자바와 C/C++ 실행환경및실행과정

자바와 C/C++의실행환경과실행과정의차이점을정리하면다음과같다.

◆ 자바

�자바는링크과정이없이컴파일러가바로바이트코드를생성한다.

�바이트코드는자바가상기계에서만실행가능하다.

�자바는 런타임에 필요한 클래스들이 자바 가상 기계에 의해 링크되며 클래스 로더가 동적

으로필요한클래스를로딩한다.

�ClassLoader 객체를이용하여프로그래머가직접클래스를로딩할수도있다.

◆ C/C++�C/C++에서는 컴파일러가 중간 단계인 오브젝트 코드를 생성한 후 링커가 필요한 라이브러

리들을링크하여최종실행가능한실행파일을생성한다.

�정적 라이브러리의 경우 라이브러리를 실행 파일에 포함시키므로 실행 파일 크기가 커

진다.

�동적라이브러리의경우런타임에링크가일어난다.

�오브젝트 코드및실행파일은 플랫폼에따라다르므로 플랫폼이 바뀌면컴파일 및링크를

새로해야한다.

Page 28: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

자바는 1995년 발표 이래 인터넷의 보급 확 , 휴 전화와 같은 네트워크 연결 기능

을갖는휴 용기기의발전등으로폭발적으로성장하고있다. 다음은자바가얼마나

성장하 는지단적으로보여주는예이다.

�매년천억달러이상의비즈니스창출

�30억달러이상의자바모바일게임시장

�현재개발중인무선응용프로그램 10개중에 7개는자바실행환경이용

�약 450만명의소프트웨어개발자가자바관련직업에종사

�엔터프라이즈에서는 약 22억 달러의 자바 응용 서버와 천백억 달러 정도의 관련

IT투자

�약 5억 8천 의자바지원단말기와 100여개의사업자가자바플랫폼배치

�약 7억 5천만 의자바카드보급

(출처: “The 10-yr Story: Java and the Networked World”, Financial Express, 2005. 4.)

자바 프로그래밍JAVA JAVA PROGRAMMING28

� 자바의태동원인이아닌것은?

①가전제품에사용할소프트웨어를만들고자하 다.

②플랫폼독립적인언어와실행환경을만들고자하 다.

③내장형시스템에적합한언어와실행환경을만들고자하 다.

④효율적인절차적언어를만들고자하 다.

� 자바의초기이름은무엇인가?

� WORA는무엇의약자이며그뜻은무엇인가?

� 자바 가상 기계는 플랫폼 독립적인가, 의존적인가? 자바 응용프로그램은 플랫폼 독립적인가, 의존

적인가?

� 자바의 WORA를가능하게만드는요인 2가지는무엇인가?

CHECKTIME

1.3 자바의진화

Page 29: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

자바와 오픈 소스

2006년 11월에 선마이크로시스템스(현재는 오라클)는 부분의 자바 소스를 GPL(GNU

General Public License)로오픈하여누구나자바소스를열람하고참조할수있게하

다. 오픈 소스(open source)란 소프트웨어 제공자의 권리를 보존하며 소스 코드를

누구나열람할수있도록무상공개한소프트웨어를말한다. 오픈소스소프트웨어의

장점은다음과같다.

�공개된소스코드를참조함으로써개발시간및비용을단축시킨다.

�공개된소프트웨어를다양하고많은수의인원이참여하여개량함으로써우수한

품질의소프트웨어를개발할수있다.

GPL 오픈 소스를 이용하여 만든 새로운 소프트웨어도 GPL의 규칙에 의해 다시 오픈

소스로 공개해야 한다. 이처럼 오픈 소스는 누구나 자유롭게 소스를 공유하고 발전시

킬 수 있는 권리를 보장하고 있어 많은 소프트웨어 개발자 및 회사가 동참하고 있다.

그러나오픈소스가무조건다좋은것은아니다. 다음과같은단점도내포하고있다.

�무단으로상용화할경우저작권침해가발생할수있다.

�다양한개량버전의소프트웨어로인한호환성문제가생길수있다.

오픈소스중가장유명한리눅스와자바외에도많은오픈소스가있다. 표적인소프

트웨어로는Open Office, Open Solaris, Mozilla, Apache, GNU, WebKit, Android등이있다.

다음은오픈소스를모아놓은유명한사이트의주소이다. 많은개발자들이이곳에

서오픈소스를다운받고수정하여제품을만들거나참고하고있다.

자바의 배포판 종류

오라클 사는 용도에 따라 10여 가지의 서로 다른 자바 배포판을 제공하고 있다. 자바

배포판은 자바 응용프로그램을 개발하고 실행하는데 필요한 총체적 환경을 말하며

JDK(Java Development Kit)라고도 부른다. JDK는 [그림 1-9]와 같이 자바 컴파일러 등

자바 응용프로그램을 개발하는데 필요한 도구와 자바 응용프로그램이 실행될 때 필

요한 자바 가상 기계와 표준 클래스 파일들을 포함하는 JRE(Java Run-time

Environment)로구성된다. 다음은 표적인 3가지자바배포판을설명한다.

● Java SE(Standard Edition)

자바 표준 배포판으로서, 데스크톱 응용프로그램과 서버 응용프로그램의 개발 플랫

폼이다. 이책에서설명되는모든내용은 [그림 1-9]의배포판을기준으로한다.

http://sourceforge.net

제1장 자바 시작 291 C H A P T E R

GPL

오픈소스

배포판

JDK

자바컴파일러

JRE

자바표준배포판

Page 30: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

● Java ME(Micro Edition)

모바일용배포판으로주로휴 전화나 PDA, 셋톱박스와같은제한된리소스를갖는하

드웨어에서응용프로그램개발을위한플랫폼이다. 자바응용프로그램이실행되는동

안사용되는메모리의양을가늠하는메모리풋프린트(foot print)가가장작다는특징

이있다. Java SE의축소판이며임베디드및가전제품을위한 API가정의되어있다.

● Java EE(Enterprise Edition)

기업용 배포판으로 자바를 이용한 다중 사용자, 기업용 규모 응용프로그램 개발을

위한 플랫폼이다. Java SE를 기본으로 인터넷 기반의 서버사이드(Server-side) 컴퓨

팅관련 API가추가되어있다.

자바 프로그래밍JAVA JAVA PROGRAMMING30

Java Language

java javac javadoc jar javap JPDA

Java VisualVMJConsole

IDL Deploy Monitoring

Java Web Start Applet/Java Plug-in

Troubleshoot Scripting JVM TI Web Services

Java DB Security

JavaFX

Swing

IDL JDBC JNDI RMI

Beans

JNI

Security Serialization Extension Mechanism XML JAXP

JARCollectionslang and util

Logging Management Preferences API Ref Objects

InstrumentationZipVersioningReflection

Java HotSpot Client and Server VM

Regular Expressions

Concurrency Utilities

Math Networking Override Mechanism

Int'l Support Input/Output JMX

RMI-IIOP Scripting

Java 2D AWT

Drag and Drop Input Methods Image I/O Print Service Sound

Accessibility

Int'l RMI

Java SEAPI

Java Language

Deployment

User InterfaceToolkits

IntegrationLibraries

Other BaseLibraries

Java Virtual Machine

lang and utilBase Libraries

Tools &ToolAPIs

JDK

JRE

[그림 1-9] Java SE 구조 (출처: http://download.oracle.com/javase/7/docs/)

모바일용배포판

기업용배포판

� 휴 폰에실행될자바응용프로그램을개발하고자할때이용하여야할자바배포판은무엇인가?

� 오라클의자바플랫폼의모든소스는공개되어있는가?

CHECKTIME

Page 31: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

JDK와 JRE

JDK는 Java Development Kit의약자로서, 자바응용프로그램개발에필요한자바컴파

일러 및 기타 도구, JRE(Java Runtime Environment), 클래스 라이브러리의 소스 및 자

바응용프로그램샘플소스등을포함한다. 그구성은 [그림 1-10]과같다.

프로그램을개발하지않는보통사용자의경우자바가상기계등을포함하는자바

실행 환경만 필요하기 때문에 JRE만 있으면 된다. JRE는 부분의 컴퓨터에 설치되어

있기때문에보통사용자는잘모르고사용하는경우가 부분이다. 자바프로그램이

실행되지않는다는시스템메시지가출력되면 JRE만따로다운받을수있다.

[그림 1-10]에서볼수있듯이, JRE는 bin 디렉터리밑에자바클래스파일을해석하

고 실행하는데 필요한 소프트웨어를 두고, lib 밑에는 호출하여 실행할 수 있도록 미

리 컴파일 한 자바 API 라이브러리를 두고 있다. JDK는 다음 오라클의 자바 사이트에

서무료로다운로드받을수있다.

JDK를 다운로드받고 설치하는 방법은 CD를 참조하기 바란다. JDK를 설치하면 [그림

1-10]과같은디렉터리구조가생성된다.

[그림 1-10] Java SE 7(JDK 7) 설치 후 디렉터리 구조

다음은 JDK의 bin디렉터리에포함되어있는주요한개발도구들이다.

자바�개발,�실행하는데�필요한�도구와�유틸리티

자바로�DB�응용프로그램을�개발하는데�필요한�도구

자바�프로그래밍�데모�예제와�소스�코드

네이티브�코드�프로그래밍에�필요한�헤더�파일

자바�프로그램�샘플�소스�코드

자바�API�클래스들에� 한�자바�소스

자바�런타임�환경.�JVM,�클래스�라이브러리�등�실행에�필요한�파일

JDK의�기본�라이브러리�외�추가�클래스�라이브러리와�개발�도구에서�필요로하는�여러�파일

http://www.oracle.com/technetwork/java/index.html

제1장 자바 시작 311 C H A P T E R

1.4 자바개발환경구축

JDK

JRE

Page 32: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

자바 프로그래밍JAVA JAVA PROGRAMMING32

�javac :자바소스를바이트코드로변환하는컴파일러

�java : jre의 bin 디렉터리에도 동시에 설치되어 있는 자바 응용프로그램 실행기

로서, 이도구를통해자바가상기계가작동하며자바프로그램실행

�javadoc :자바소스프로그램으로부터 HTML형식의 API도큐먼트생성

�jar : 자바 클래스 파일을 압축한 자바 아카이브 파일(JAR)을 생성하고 관리하는

유틸리티

�jdb :자바응용프로그램의실행중오류를찾는데사용하는디버거

�javap : 클래스 파일에 담긴 바이트 코드를 자바 소스와 함께 보여주는 디어셈블

러(disassembler). [그림 1-6]은 이도구를이용하여생성하 음

�appletviewer : 웹 브라우저 없이 애플릿 응용프로그램을 실행하고 디버깅하는

유틸리티

자바 API

자바에서서로관련된클래스들을분류하여묶어놓은것을패키지(package)라부른다.

자바 API란오라클사에서제공하는것으로주요한기능들을미리구현한클래스라이

브러리로묶어놓은패키지들이다. 개발자는이 API를이용하여쉽고빠르게자바프로

그램을개발할수있다. 예를들어, 모니터화면에문자를출력하거나키보드에서입력

을받는것과같은매우빈번히사용되는기능들은자바에서미리구현하여 API로제공

한다. 이 API를이용하면개발자는일일이모니터나키보드를제어하는프로그램을작

성하는 노고를 덜게 된다. 이를 위해 개발자는 자바 API로부터 필요한 클래스가 속한

패키지만 import하여사용하면된다. 패키지에 한자세한내용은 6장에서다룬다.

자바 API에 한문서는온라인으로다음사이트에서제공된다.

[그림 1-11]은온라인자바 API 문서를참조하는사례이다. 저자는자바프로그램을

개발하는동안에이사이트를열어놓고참조한다. 독자들도이사이트를꼼꼼히읽어

가면서자바프로그램을개발하기바란다.

http://docs.oracle.com/javase/7/docs/api/

자바응용프로그램실행기

패키지

자바 API

온라인자바 API 문서

제임스고슬링(James A. Gosling, 1955. 5. 19. ~ )은캐나다에서태

어난 소프트웨어 개발자이다. 1995년에 자바 프로그래밍 언어를 최

초로 개발하 으며, 자바 이외에도 Multi-Processor용 UNIX와

Complier, Mail System, 데이터 인식 시스템 등을 개발하 다. 제임

스고슬링은많은가전제품들이하나의거 한네트워크에연동될것

으로 예측하 다. 즉, 가전제품의 기능이 향상되어 프로그램이 바뀔

때마다 가전제품을 공장에 보내어 내장된 프로그램을 교체하는 신(사진출처: 위키백과)

Page 33: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

[그림 1-11] 온라인 자바 API 문서

자바 IDE

IDE란 Integrated Development Environment의 약자로서, 어 단어가 뜻하는 그 로

소스코드편집, 컴파일, 디버깅을한꺼번에할수있는통합개발환경이다. IDE 하면

가장 먼저 떠오르는 것이 마이크로소프트(MS) 사의 비주얼스튜디오일 것이다. 자바

응용프로그램개발에사용되는유사한통합개발환경이있는데, 현재가장널리쓰이

는 것은 이클립스(eclipse)이다. 이클립스는 IBM에 의해 자바로 만들어진 오픈 소스

소프트웨어로서 http://www.eclipse.org/downloads에서 무료로 다운로드받아 사용

할수있다. 이책의모든소스는이클립스로개발되었으며, 이책의 CD에이들소스를

이클립스환경에서설치하는법이들어있다.

제1장 자바 시작 331 C H A P T E R

에 네트워크를 통하여 새로운 프로그램을 다운로드받아 가전제품의 기능을 향상시킬 수 있다고 보았다.

그의 예측은 10년도 되지 않아 현실로 이루어져 지금은 휴 폰은 물론이고 TV셋톱박스, 로봇 등에 자바

로 만든 프로그램이 탑재되어 폭넓게 쓰이고 있다. ‘자바의 아버지’라 불리며, 가장 향력 있는 프로그

래머 중 한 사람이 된 그는 인도네시아의 자바 섬에서 나온 커피를 하루에 10여 잔씩 마시는 Java 예찬

론자이기도하다. 그래서‘Java’라는명칭을커피재배지인자바섬에서따왔다고한다.

IDE

통합개발환경

이클립스

Page 34: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

자바 프로그래밍JAVA JAVA PROGRAMMING34

Tip javadoc을이용한자신만의 API 도큐먼트생성

JDK에 포함된 javadoc을 이용하면 소스의 선언문과 특별한 형식의 주석문을 파싱하여 온라

인 자바 API 문서 [그림 1-11]과 유사하게 HTML 형식의 API 도큐먼트를 생성할 수 있다. 이

문서에는클래스, 인터페이스, 생성자, 메소드, 필드등을기술한다.

API 도큐먼트를 생성하기 위해 개발자는 자바 소스 파일에 다음과 같이 /**와 */ 사이에 정

보를주어야한다.

다음 소스는 Hello.java에 API 도큐먼트 생성을 위한 주석문을 삽입하여 HelloDoc.java 파

일을만든것이다. [그림 1-12]는 javadoc을이용하여자바소스에서 API 도큐먼트를생성하

는과정이며 [그림 1-13]은생성된 API 도큐먼트를브라우저로확인하는그림이다.

/*** javadoc 사용 예제를 위한 클래스

*/public class HelloDoc {

/*** 두 정수의 합을 구하는 메소드

** @param i 합을 구할 첫번째 정수형 인자

* @param j 합을 구할 두번째 정수형 인자

* @return 두 정수의 합을 리턴

*/

public static int sum(int i, int j) {return i + j;

}

public static void main(String[] args) {int i;int j;char a;String b;final int TEN = 10;

i = 1;j = sum(i, TEN);a = '?';b = "Hello";

java.lang.System.out.println(a); // ‘?’ 출력

System.out.println(b); // “Hello” 출력

123456789101112131415161718192021222324252627282930

/**이곳에 기술되는 내용은 javadoc이 API 도큐먼트로 인식함

*/

주목

주목

Page 35: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

제1장 자바 시작 351 C H A P T E R

[그림 1-12] javadoc을 이용하여 HelloDoc.java의 API 도큐먼트인 HelloDoc.html 생성

[그림 1-13] HelloDoc 클래스의 API HTML 문서, HelloDoc.html

System.out.println(TEN); // 10 출력

System.out.println(j); // 11 출력

}}

31323334

HelloDoc.html�파일�생성

주목

주목

Page 36: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

자바프로그램을 개발하는 전체과정을 설명하기 위해다음과 같이간단한 자바프로

그램을준비하 다.

// Hello2030.java 파일에 작성

public class Hello2030 {

public static void main(String[] args) {

int n = 2030;

System.out.println("헬로"+n);

}

}

자바 프로그래밍JAVA JAVA PROGRAMMING36

이클립스(Eclipse)는 다양한 프로그래밍 언어의 통합 개발을 지원하기 위해 IBM이 VisualAge 라

는소프트웨어를만드는과정에서자바언어로개발하게되었다. 2004년에 Eclipse 3.0의배포판

을공급하기시작하여, UI와기능을개선한배포판을매년내놓고있다. 배포판은처음에 4개의목

성 위성 이름으로 붙이기로 결정하여 Calisto(2006년), Europa(2007년), Ganymede(2008년),

Galileo(2009년)로 붙이다가, 2010년에는 태양을 의미하는 Helios, 2011년에는 남색 쪽빛을 의미

하는 Indigo, 2012년에는 로마 신화에 나오는 주피터의 아내 이름인 Juno로 이름을 붙 다. 현재

이클립스는 Ada, C, C++, Perl, PHP, Python, Ruby, Java, Android 등다양한프로그래밍 언어의 통

합개발환경에사용되고있다.

잠깐!

1.5 자바프로그램개발

� 자바응용프로그램을개발하는사람이아닌경우자바응용프로그램을실행할수있는환경을갖추

고싶을때설치하여야하는것은 JDK인가, JRE인가?

� JDK를설치하면 src.zip 파일이있다. 이 zip 파일에는무엇이압축되어들어있는가?

� 자바컴파일러는어느디렉터리에설치되어있으며그이름은무엇인가?

� 자바 명령 실행기로서 자바 가상 기계를 가동시키는 프로그램의 이름은 무엇인가? 또 어디에 설치

되어있는가?

CHECKTIME

Page 37: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

앞의자바프로그램은 "헬로2030" 문자열을화면에출력하는프로그램으로서간단

히설명하면다음과같다.

● public class Hello2030

클래스를정의한다. 클래스의이름은 Hello2030이며여러개의클래스를정의할수도

있다. 모든클래스의정의는‘{’으로시작하여‘}’으로끝난다.

● public static void main(String[] args)

자바클래스는여러개의함수를포함할수있다. 자바에서는함수를멤버메소드라고

부른다. 프로그램 실행은 main() 메소드부터 시작한다. 모든 메소드의 정의도‘{’으

로시작하여‘}’으로끝난다.

● int n = 2030;

지역 변수를 선언한다. 변수 선언과 함께 초깃값을 지정할 수도 있다. 변수 선언문은

‘;’으로끝난다.

● System.out.println(“헬로“ + n);

"헬로"+n의 결과는 "헬로2030" 문자열이며 "헬로2030"을 출력하는 실행문이다.

System.out.println()은JDK에의해개발자에게제공되는자바API이며, 개발자는이를

이용하여화면에숫자와문자, 문자열들을출력한다. 모든실행문은‘;’으로끝난다.

자바 소스 편집

앞의자바프로그램을직접편집하여실행해보자. 먼저윈도우의보조프로그램에있

는 메모장을 실행시켜 아래 [그림 1-14]와 똑같이 입력한다. 그리고 C:\Temp에

Hello2030.java로 저장한다. 나중에 설명하겠지만, 자바에서는 클래스 이름과 자바

소스 파일 이름이 일치하여야 한다. 클래스 이름이 Hello2030이므로 파일 이름은

Hello2030.java이다. 자바 소스 파일의 확장자는 .java이다. 소문자를 구분하므로

주의하기바란다.

[그림 1-14] 메모장으로 Hello2030.java 소스 작성

제1장 자바 시작 371 C H A P T E R

클래스

멤버메소드

main()

지역변수

Hello2030.java

.java

주목

주목

Page 38: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

자바 소스 컴파일

명령창을실행시켜 Hello2030.java 파일이저장된디렉터리로이동한다. 그러고나서

[그림 1-15]와 같이 Hello2030.java 소스 파일을 확인한 후에 JDK의 자바 컴파일러인

javac를 실행하여 Hello2030.java 소스를 컴파일한다. 그 결과 Hello2030.class 파일

이생성된다. 컴파일된바이트코드가들어있는파일은확장자가 .class이다.

[그림 1-15] Hello2030.java 프로그램 컴파일, Hello2030.class 클래스 파일 생성

자바 응용프로그램 실행

이제 JDK에서제공되는 java 명령으로 Hello2030.class를실행시켜보자. 이때확장자

.class는빼고클래스이름 Hello2030만입력하는것에주의한다. Hello2030 응용프로

그램의실행과결과는 [그림 1-16]과같다.

[그림 1-16] Hello2030 응용프로그램 실행

자바 프로그래밍JAVA JAVA PROGRAMMING38

javac

Hello2030.java

Hello2030.class

.class

java

컴파일

클래스�파일�생성

.class�확장자를�붙이지�않는다.

C:\Temp�디렉터리로�이동

실행�결과

Page 39: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

이 책에서는 특별한 경우를 제외하고는 모든 예제의 작성과 실행은 이클립스를 이용

한다. 앞서 만든 Hello2030.java 프로그램을 이클립스를 이용하여 작성하고 실행해

보자.

이클립스 실행

이클립스를실행하면 [그림 1-17] (a)의첫화면이보이고바로 workspace를묻는다이

얼로그가 출력된다. 이클립스에서 workspace란 개발자가 자바 프로그램을 개발하는

작업공간으로서일종의폴더이다. 독자들은미리‘C:\자바학습’폴더를만들어두고,

[그림 1-17] (b)의윈도우에서‘Browse’버튼을눌러‘C:\자바학습’폴더를지정한다.

처음으로이클립스를사용하면 Welcome 페이지가출력될것이다. 이페이지를닫으

면 [그림 1-18]과같이이클립스의사용자인터페이스가보인다.

제1장 자바 시작 391 C H A P T E R

1.6 이클립스를이용한자바프로그램개발

� 자바프로그램의실행이시작되는메소드이름은?

� JDK는자바프로그램개발에필요한많은명령들을제공한다. 다음명령이의미하는바를설명하라.

(1) javac prog.java

(2) java binarycopy

� 다음자바프로그램에서 빈칸에적절한것은무엇인가? 그리고이소스파일을어떤이름으로저장

해야하는가?

public JavaApp {public static void main(String[] args) {

int x = 2080;System.out.println("헬로" + x);

}}

CHECKTIME

이클립스

workspace

Page 40: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

(a) 초기 화면

(b) 작업 공간(workspace)을 지정하는 윈도우

[그림 1-17] 이클립스 실행

[그림 1-18] 이클립스의 사용자 인터페이스

자바 프로그래밍JAVA JAVA PROGRAMMING40

이클립스�Juno�배포판

작업�공간�폴더�지정

Page 41: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

프로젝트 생성

프로그램을작성하기에앞서우선프로젝트(project)를생성한다. 이클립스에서프로

젝트를 생성하려면 메뉴에서 [그림 1-19]와 같이 File→ New→ Project를 선택한다.

[그림 1-20]과 같이 프로젝트의 종류를 선택하는 윈도우가 나타나고 여기서 Java

Project를 선택한다. 이제 [그림 1-21]의 프로젝트 생성 윈도우가 나타난다. Project

name 칸에프로젝트 이름을입력한다. 이예에서는 프로젝트의이름을 SampleProject

로 입력하 다. 이 컴퓨터에 JDK 7이 설치되어 있기 때문에 프로젝트 생성 윈도우의

JRE 환경이 JavaSE-1.7로설정되어있는것을볼수있다. Finish 버튼을누르면프로

젝트의생성이완료된다.

[그림 1-19] 이클립스의 사용자 인터페이스. Project 메뉴 선택

제1장 자바 시작 411 C H A P T E R

Project�메뉴�선택

이클립스에서 프로젝트는 하나의 자바 응용프로그램에 속하는 여러 개의 자바 소스 파일과 이미

지, 동 상 같은 리소스, 컴파일 된 클래스 파일들을 일괄적으로 관리하기 위한 개념이다. 프로젝

트가 생성되면 프로젝트 이름의 폴더가 생기고 그 안에 개발자가 만든 소스와 컴파일 된 클래스

파일들이생겨나게된다.

잠깐!

프로젝트

Java Project

Project name 칸

프로젝트생성윈도우

Page 42: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

[그림 1-20] 프로젝트의 종류, Java Project 선택

[그림 1-21] 프로젝트 생성 윈도우. 프로젝트 이름을 SampleProject로 입력

자바 프로그래밍JAVA JAVA PROGRAMMING42

Java Project�선택

프로젝트�이름�지정

이�컴퓨터에�JDK 7이�설치되어�있음.�자동

Finish 선택

Page 43: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

클래스 생성

프로젝트를 생성하고 나면, 자바 응용프로그램을 작성하기 위해 클래스를 생성해야

한다. 메뉴에서 File→ New→ Class를 선택하면 [그림 1-22]와 같이 클래스 생성 윈

도우가 나타난다. Name 칸에 클래스 이름 Hello2030을 입력한다. 나머지 옵션은 수정

할필요가없으므로 Finish 버튼을눌러클래스생성을마치면, [그림 1-23]과같이소

스편집윈도우에 Hello2030 클래스의선언을포함하는소스가자동생성된다.

[그림 1-22] 클래스 생성 윈도우. 클래스 이름을 Hello2030으로 입력

제1장 자바 시작 431 C H A P T E R

클래스생성윈도우

Name 칸

소스가자동생성

주목

클래스�이름�입력

Finish 선택

Page 44: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

자바 프로그래밍JAVA JAVA PROGRAMMING44

[그림 1-23] 생성된 Hello2030 클래스 소스. Hello2030.java 파일에 저장

소스 편집과 컴파일 및 실행

[그림 1-23]의소스편집윈도우에, 앞서메모장에작성한것과동일한소스를입력한

다. 이클립스는소스입력과동시에자동으로컴파일하기때문에컴파일과정이따로

없이 바로 실행할 수 있다. 작성된 자바 프로그램의 실행은 Run→ Run 메뉴를 선택하

거나툴바에서아이콘( )을클릭하면된다. 작성된프로그램을실행하면 [그림 1-

24]와같이실행결과가콘솔윈도우에출력된다.

[그림 1-24] 이클립스에서 자바 응용프로그램 실행. ‘헬로2030’출력

소스편집윈도우

자바프로그램의실행

콘솔윈도우

주목

주목

주목

실행�결과

콘솔�윈도우

실행�버튼 Run → Run 실행�메뉴

Page 45: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

자바 언어는 현재 IT 현장에서 가장 많이 사용되는 언어로서 다양한 분야에서 사용된

다. 자바 언어로 개발되는 응용프로그램의 종류에는 어떤 것들이 있을까? 자바 언어

로개발되는응용분야를살펴보자.

데스크톱 응용프로그램

자바 언어로 개발하는 가장 일반적인 응용프로그램으로서 PC 등의 데스크톱 컴퓨터

에 설치되어 실행되는 응용프로그램이다. 자바 개발 환경으로 사용하는 이클립스도

이유형에속한다. 자바실행환경(JRE)이설치된어떤컴퓨터에서도실행되며다른응

용프로그램의도움없이단독으로실행된다. 이책에서설명하는 부분의내용이데

스크톱 응용프로그램의 개발에 관한 것이다. [그림 1-25]는 자바로 개발된 스네이크

게임의예를보여준다.

[그림 1-25] 자바 언어로 작성된 자바 데스크톱 프로그램 예

애플릿 응용프로그램

웹페이지에내장되어 실행되는자바응용프로그램을 애플릿(applet)이라고 한다. 애

플릿은단독으로실행될수없고익스플로러와같은웹 브라우저에 의해 구동되고 실

행이 제어된다. 애플릿은 웹 서버에서 사용자 컴퓨터에 다운로드되어 사용자 컴퓨터

제1장 자바 시작 451 C H A P T E R

1.7 자바응용프로그램의종류

단독으로실행

데스크톱응용프로그램

애플릿

웹 브라우저에 의해 구동되

고실행이제어

Page 46: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

에설치된웹브라우저에의해실행된다. 웹브라우저가애플릿을실행하기위해서는

자바가상기계를가지고있어야한다. 데스크톱응용프로그램은내컴퓨터에설치되

어 있어야 실행할 수 있는 반면, 애플릿은 어디서든지 웹 서버에 접속하여 실행할 수

있는 장점이 있다. 애플릿은 서버에서 다운로드 되어 사용자 컴퓨터에서 실행되므로

보안의이유로접근할수있는자원(리소스)에제약이있다. 예를들면, 애플릿은실행

중에 사용자 컴퓨터의 파일을 접근할 수 없다. 자세한 내용은 15.6절에서 다룬다. [그

림 1-26]은 웹에서 엑셀 스프레드시트와 같은 기능을 수행하는 애플릿 응용프로그램

의예이다.

[그림 1-26] 애플릿 응용프로그램 예

자바 서블릿(servlet) 응용프로그램

자바 서블릿(java servlet)은 애플릿과 반 로 서버에서 실행되는 서버용 자바 프로

그램이다. 서블릿은 [그림 1-27]과 같이 서버-클라이언트 모델로 구성되는 시스템에

서서버의역할을하며, 웹브라우저상에서실행되는애플릿이나자바스크립트코드

등과 통신한다. 애플릿은 웹 사용자에게 GUI 환경을 제공하는 간단한 기능을 구현하

는반면, 서블릿은 Java EE의일부분으로서웹서버에연동되는데이터베이스나다른

서버와 연동하여 쇼핑몰이나 온라인 뱅킹 등의 규모의 복잡한 응용프로그램을 구

현할 때 쓰인다. 자바 서블릿은 사용자 인터페이스를 필요로 하지 않으며 웹 서버에

의해 실행이 제어된다. [그림 1-27]은 서블릿과 애플릿이 서로 통신하며 작동하는 예

를보여준다.

자바 프로그래밍JAVA JAVA PROGRAMMING46

Page 47: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

[그림 1-27] 서블릿 응용프로그램 예

모바일 응용프로그램

자바는 설계 당시부터 플랫폼 독립적이고 메모리 사용량이 적으며 통신 환경을 지원

하도록개발되었다. 그러므로다양한하드웨어, 소프트웨어플랫폼을갖는모바일기

기에적합하여다양한모바일응용프로그램개발에사용되고있다.

● Java ME

Java ME는 모바일 기기를 위한 자바 배포판으로서, 많은 이동 통신사와 단말기 제조

웹�브라우저

인터넷

서버

서버…

웹�서버

JVM

servlet

제1장 자바 시작 471 C H A P T E R

[그림 1-28] Java ME 실행 화면

Java ME

Page 48: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

사에 채택되어 게임, 멀티미디어 응용프로그램 등에 사용되고 있다. 유럽이나 미국

에서출시되는 부분의단말기에는자바기술이탑재되어있으며, 노키아, 삼성, LG,

소니 에릭슨, 모토롤러 등과 같은 세계 유수의 단말기 제조사들은 자바 기술이 탑재

된단말기를출시하고있다. [그림 1-28]은 Java ME를사용한사례를보여준다.

●안드로이드(Android)

검색 엔진으로 유명한 구 (Google)의 주도로 여러 모바일 회사가 모여 구성한

OHA(Open Handset Alliance)에서 개발한 무료 모바일 플랫폼을 안드로이드라고 한다.

개발언어는 자바를사용하나 오라클 사의자바 라이선스를 피하기위해 별도의개발

도구를 개발하 으며, Dalvik이라는 새로운 자바 가상 기계를 개발하 다. 안드로이

드는자바바이트코드의효율을개선한새로운바이트코드체계를개발하 으며, 기

존바이트코드는호환성이없어변환이필요하다. 현재 다수의모바일단말기제조

사에서 안드로이드를 채택하고 있다. 안드로이드는 스마트폰뿐만 아니라 모바일 학

습기기, 태블릿 PC, PMP 등 다양한 종류의 모바일 기기의 플랫폼으로 사용될 것으로

예측된다. [그림 1-29]는안드로이드에뮬레이터에서실행되는안드로이드앱의사례

를보여준다.

[그림 1-29] 안드로이드 앱의 실행 화면

자바 프로그래밍JAVA JAVA PROGRAMMING48

안드로이드

Page 49: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

제1장 자바 시작 491 C H A P T E R

자바언어와자바시스템은다음과같은독특한특성을가진다.

●객체 지향

자바는 객체 지향 언어로서 클래스 계층 구조, 상속성, 다형성, 캡슐화 등을 지원한

다. 객체 지향 프로그램은 해결할 과제를 실제 세상의 객체와 객체 간의 상호 관계로

모델링하여인간의사고에가깝게표현한다. 객체지향특징은 4장과 5장을참조하기

바란다.

●멀티스레드

자바는 하나의 프로그램에서 다수의 스레드가 동시에 실행할 수 있는 환경을 지원한

다. 멀티스레드 프로그램을 작성하기 위해서는, 운 체제가 멀티스레드를 지원하고

멀티스레드와 관련된 API나 라이브러리를 제공해야만 한다. C, C++ 등 많은 언어들은

자체적으로 멀티스레드를 지원하지 않아 운 체제의 도움을 받는다. 그러나 자바는

운 체제의 도움 없이 멀티스레드 프로그래밍이 가능하다. 멀티스레드를 지원하지

않는 운 체제에서도 자바를 이용하면 멀티스레드 프로그램을 개발할 수 있다. 멀티

스레드프로그래밍은 13장을참조하기바란다.

●플랫폼 독립성

자바는하드웨어, 운 체제등플랫폼에종속되지않는독립적인바이트코드로컴파

� 애플릿응용프로그램의약점은무엇인가?

� 웹서버에서실행되는자바응용프로그램을무엇이라고부르는가?

� 구 의주도로만든자바기반의모바일플랫폼은?

� 다음중사용자인터페이스를만들필요가없는자바응용프로그램의종류는?

①데스크톱응용프로그램 ②애플릿 ③서블릿 ④모바일응용프로그램

CHECKTIME

1.8 자바의특징

클래스계층구조

상속성

다형성

캡슐화

다수의스레드

동시에실행

Page 50: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

일 되며 자바 가상 기계만 있으면 하드웨어나 운 체제를 막론하고 자바 프로그램의

실행이가능하다.

●소스와 클래스 파일

하나의 자바 소스 파일에는 여러 개의 클래스를 작성할 수 있지만, 하나의 클래스 파

일(.class)에는반드시하나의컴파일된자바클래스만이포함된다. 하나의자바소스

파일에여러개의클래스를작성한경우, 컴파일후클래스마다별도의클래스파일이

생성된다. [그림 1-30]은 A.java에 4개의클래스가작성된예이다. A.java를컴파일하

면 4개의 클래스 파일이 생성된다. 클래스 D는 클래스 C 내에 작성된 내부 클래스

(innner class)로서 C$D.class 이름으로 생성된다. 하나의 자바 소스 파일에 작성된

클래스 중 오직 한 클래스만 public으로 선언할 수 있다. 소스 파일 내에 public으로

선언된클래스의이름과소스파일의이름이동일하게작성되어야한다.

[그림 1-30] 소스 파일과 클래스, 클래스 파일의 관계

●실행 모듈

자바응용프로그램은한개의클래스파일또는다수의클래스파일로구성된다. 다수

의클래스파일을 jar 파일형태로압축하여배포및실행이가능하다. 자바의실행은

main() 메소드에서 시작되며, 하나의 클래스 파일에 하나 이상의 main() 메소드가 있

을수없지만다수의클래스파일이각각 main()메소드를가지는것은상관없다.

●클래스로 캡슐화

자바는객체지향언어의캡슐화(encapsulation)의원칙을철저히지켜변수나메소드

자바 프로그래밍JAVA JAVA PROGRAMMING50

자바가상기계

내부클래스

C$D.class

main() 메소드

캡슐화

Page 51: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

는 반드시 클래스 내에 구현한다. 클래스에 속하지 않은 변수나 메소드는 있을 수 없

다. 클래스안에새로운클래스, 즉내부클래스를만들수있다.

●패키지

패키지는 자바의 독특한 개념이다. 서로 관련 있는 클래스는 패키지로 묶어 관리한

다. 패키지는 파일 시스템의 폴더 개념과 같다. 예를 들어, java.lang.System 클래스

는 java\lang 폴더의 System.class 파일을 나타내며, 여기서 java.lang을 패키지라고

부른다.

제1장 자바 시작 511 C H A P T E R

패키지

파일시스템의폴더개념

� 하나의자바소스파일에서정의할수있는클래스의개수는?

� 10개의클래스파일이있을때 main() 메소드는최 몇개가있을수있는가?

� 클래스에속하지않은변수와메소드가있을수있는가? 이것은어떤객체지향속성과관련되는가?

CHECKTIME

Page 52: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

자바 프로그래밍JAVA JAVA PROGRAMMING52

SUM

MARY

요약 ●프로그램또는소프트웨어는컴퓨터가이해하고처리할수있는일련의명령들이다.

●프로그래밍언어는컴퓨터를구동시키는프로그램을작성하기위한언어이다.

●소스파일을컴퓨터가이해할수있는기계어로변환하는것을컴파일이라한다.

●자바는 1991년 선마이크로시스템스(현재 오라클)의 제임스 고슬링에 의해 개발되기 시작하여

1995년에발표되었다.

●자바의 개발 목적은 매우 다양한 플랫폼을 갖는 가전제품을 위해 플랫폼에 독립적인 언어를

개발할 필요성에 있었다. 또한 가전제품에 들어가는 제어 장치는 매우 적은 양의 메모리를 사

용하므로, 이러한 내장형 시스템(embedded system)의 메모리 요구 사항을 충족할 수 있는 새

로운언어의개발필요성에있었다.

●자바는 GPL(GNU General Public License)로소스를오픈한오픈소스소프트웨어이다.

●자바의 배포판은 개발 응용의 실행 환경에 따라 데스크톱이나 서버 응용을 위한 Java SE, 모

바일장치를위한 Java ME, 규모기업용응용을위한 Java EE로나누어진다.

●자바 프로그램을 개발하고 실행하기 위한 환경은 JDK에서 제공하며, IDE 환경을 제공하는 도

구에는이클립스가있다.

●자바에서 제공하는 API는 http://docs.oracle.com/javase/7/docs/api/에서 온라인으로

참조할수있다.

●자바 프로그램은 클래스 정의로 시작하며, 클래스 내에서 모든 변수나 메소드를 정의한다. 실

행은 main() 메소드부터시작한다.

●하드웨어독립적인바이트코드와이를실행하는자바가상기계에의해한번프로그램을작

성하면 어느 플랫폼에서도 자바 프로그램을 실행시킬 수 있는데, 이를 WORA(Write Once Run

Anywhere)라고한다.

●자바 소스 파일의 확장자는 .java이며 자바 컴파일러에 의해 컴파일된 파일은 클래스 파일로

서확장자는 .class이다.

●자바 컴파일러에 의해 컴파일된 코드를 바이트 코드(byte code)라고 부른다. 이 코드는 자바

가상기계상에서실행되는코드로서특정 CPU에의존적이지않기때문에 WORA를실현하는데

기여한다.

●하나의클래스파일에는반드시하나의자바클래스가포함되어있다.

●자바 응용프로그램은 웹 클라이언트, 서버, 웹 스타트, 데스크톱, 모바일 등과 같이 광범위한

분야에서사용되고있다.

●자바언어는객체지향, 멀티스레드, 캡슐화, 플랫폼독립성, 패키지등을지원한다.

●다수의클래스파일로자바응용프로그램이구성된경우에 jar 파일형태로압축하여배포및

실행이가능하다.

Page 53: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

화면에 자신의 이름, 나이, 학과 등의 정보를 출력하는 자바 응용프로그램을 작성해보자. 이클립스를 실

행하고프로젝트를만들어라. 클래스이름을 MyInfoApp로하면 MyInfoApp.java 파일로자동저장된다.

이프로그램을실행하면다음과같이출력된다.

제1장 자바 시작 531 C H A P T E R

Open Challenge 가위바위보게임

Page 54: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

1. C언어소스파일의확장자는 .c이고컴파일하면 .obj파일이된다. 그러면자바소스

파일의확장자와컴파일된파일의확장자는무엇인가?

2. 자바언어를처음개발한목적은무엇이었는가?

3. 자바의특징은 WORA라고말할수있다. WORA의목적은무엇인가?

4. 다음중에서틀린것은무엇인가?

①자바의클래스파일은바이트코드이다.

②자바의클래스파일은자바가상기계가설치된어떤곳에서도실행된다.

③자바는링크과정없이컴파일러가바로바이트코드를생성한다.

④자바가상기계는오직선마이크로시스템사에서만들어배포한다.

5. JDK와 JRE는 어떤 차이가 있는가? 만일 자바 응용프로그램을 개발하고자 한다면 이

둘중어떤것이필요한가?

6. 자바 언어로 만들 수 있는 응용프로그램의 종류를 나열하라. 그리고 각각의 특징을

설명하라.

7. 다음중자바의특징이잘못설명된것을모두골라라.

①객체지향언어이다.

②하나의소스파일에여러개의클래스를작성할수있다.

③하나의클래스파일에다수의클래스를포함할수있다.

④멀티스레드를지원한다.

⑤플랫폼에독립적이다.

⑥클래스는캡슐화를위한것이다.

⑦패지키의목적은자바응용프로그램을판매하기쉽게하기위해서이다.

이론문제

자바 프로그래밍JAVA JAVA PROGRAMMING54

연습문제E X E R C I S E

Page 55: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

8. 다음코드는하나의소스파일에저장된다.

(1) 이소스파일의이름은무엇인가?

(2) 이소스파일이컴파일되면어떤클래스파일이생성되는가?

9. 다음자바소스프로그램을저장할때적절한파일이름은?

public class Add {

public static void main(String [] args) {

System.out.println(“Add“);

}

}

public class A {

............

class B {

............

}

}

class C {

............

class D {

............

}

}

제1장 자바 시작 551 C H A P T E R

Page 56: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

1. 화면에“Welcome!!”을 출력하는 자바 프로그램을 작성하라. 이클립스를 이용하고,

작업 공간(workspace)은 C:\Temp로 하고, 프로젝트 이름은 1-1로 한다. 클래스 이름

은 Welcome으로한다.

2. 화면에“Sorry~~”을 출력하는 자바 프로그램을 작성하라. 이클립스를 이용하고, 작

업 공간(workspace)은 C:\Temp로 하고, 프로젝트 이름은 1-2로 한다. 클래스 이름은

Sorry로한다.

실습문제

자바 프로그래밍JAVA JAVA PROGRAMMING56

Page 57: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

가비지 194, 203, 204

가비지 컬렉션 스레드 206, 662

가비지 컬렉터 203, 206

가상 키 521, 522

가지비 컬렉션 206

값 369, 389, 823

강제 타입 변환 73, 74, 259

객체 174

객체 배열 181

객체 소멸 202

객체 지향 49

객체 지향 데이터베이스 823, 824

객체 지향 언어 19, 49, 168

객체 지향 프로그래밍 170

객체 치환 193

경량 컴포넌트 455

고급 언어 19

관계 823

관계형 데이터베이스 823, 824, 834

구 48

구분 문자 350

구체화 370, 399

기계어 19

기본 생성자 198, 254

기본 타입 66

기업용 배포판 30

나열 135, 136

날짜 356

내부 클래스 50, 511

내장형 시스템 21

논리 연산자 87

논리 타입 리터럴 71

다운캐스팅 259, 260

다이얼로그 714

다중 if 문 96

다중 상속 244, 287

다차원 배열 138

다형성 173

입 연산자 89

데몬 스레드 662

데스크톱 응용프로그램 45, 752

데이터 타입 66

데이터베이스 822

도메인 이름 787

도형 그리기 612

도형 칠하기 615

동기화 객체 665

동적 바인딩 266, 268, 274, 277

드라이버 클래스 파일 840

드래깅 706

디어셈블 23

디폴트 185

디폴트 생성자 198

디폴트 패키지 322

라디오버튼 567

라디오버튼 컴포넌트 567

라운드 로빈 665

런타임 오류 150

레이블 컴포넌트 553

레코드 823, 832

레코드 추가 836

레퍼런스 66, 177

레퍼런스 배열 생성 181

레퍼런스 변수 129, 130, 178

레퍼런스 타입 66

로컬 문자 집합 427

리스너 인터페이스 503

리스트 컴포넌트 578

리터럴 68

리턴 타입 185

링크 26, 27

마이크로소프트 823

멀티스레드 49, 674

멀티스레딩 646

멀티태스킹 644

멀티프로세싱 646

메뉴 467, 700

메뉴 아이템 467, 700

메뉴바 463, 467, 700

메소드 60, 171, 177, 185

메소드 오버라이딩 266, 270, 277

메소드 오버로딩 189, 277

메소드 이름 185

메소드 중복 189

메소드 코드 185

메소드 호출 60

메시지 다이얼로그 727

메인 스레드 666

명령행 인자 146

모달 720, 725

모달리스 720

모바일 응용프로그램 47

모바일용 배포판 30

무한 반복 116, 121, 122

문자 버퍼 스트림 437

문자 스트림 417, 427, 809

문자 집합 428, 430

문자 타입 리터럴 70

문자열 67

문자열 레이블 554

문자열 리터럴 71

문자열 체크박스 562

문장 62

찾아보기

JAVA PROGRAMMING

Page 58: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

바이너리 데이터 421

바이너리 코드 23

바이너리 파일 복사 446

바이트 버퍼 스트림 437

바이트 스트림 417, 421, 809

바이트 코드 23, 49

박싱 338

반복문 114

배열 128

배열 리턴 143

배열 생성 129, 130

배열 선언 129, 130

배열 참조 131

배열에 한 레퍼런스 선언 181

배치관리자 470

배치관리자 제거 484

배포판 29

버튼 그룹 567, 568

버튼 컴포넌트 556

버퍼 436

버퍼 스트림 436, 809

버퍼 입출력 436

변수 선언 60, 67

보안 754, 770

부모 클래스 172

블록 62

비교 연산자 87

비정방형 배열 138, 140

비트 연산자 84

산술 연산자 82

삼항 연산자 91

상속 172, 240

상수 72, 225

생명 주기 168, 753

생성자 176, 195, 196, 252

서버 801

서버 소켓 801, 804, 809

서브 클래스 172, 241

서블릿 46

서비스 관리자 832

소멸자 202

소스 파일의 확장자 19

소켓 800

소프트웨어 18

소프트웨어의 재사용 168

손잡이 587

수직 슬라이더 587

수직 정렬 559

수평 슬라이더 587

수평 정렬 559

슈퍼 클래스 172, 241

스레드 644, 645

스레드 객체 생성 652

스레드 동기화 674, 676

스레드 스케줄링 649

스레드 시작 652

스레드 종료 668

스레드 코드 652, 662

스윙 애플릿 754, 763

스윙 컨테이너 461

스케쥴링 646

스크롤바 575

스키마 824

스트림 416

스트림 연결 419

스트링 리터럴 341

슬라이더 587

슬라이더 컴포넌트 587

시간 356

시프트 연산자 85

식별자 63

실수 타입 리터럴 69

실행 파일 26

안드로이드 48

애플릿 45, 752, 754

애플릿 응용프로그램 45

애플릿뷰어 761

애플릿의 생명 주기 755

앱 18

어댑터 클래스 515

어셈블리어 19

언박싱 338

업캐스팅 259, 260, 261

연산자 81

연산자 우선순위 81

열 138, 823, 834

예약어 64

예외 150

예외 처리 151

오디오 클립 771

오라클 21, 823

오류 메시지 255

오버라이딩 276

오버로딩 276

오브젝트 데이터베이스 824

오크 21

오픈 소스 29

우선순위 81, 665

웹 브라우저 45

윈도우 서비스 829

유니코드 66, 427, 520, 844

유니코드 키 519

이미지 그리기 617

이미지 레이블 554

이미지 아이콘 557

이미지 체크박스 562

이벤트 496, 498

이벤트 객체 499, 500

이벤트 기반 프로그래밍 496

이벤트 리스너 496, 499

이벤트 분배 스레드 498, 499

이벤트 소스 498, 499, 506

이벤트 처리 스레드 470

이스케이프 시퀀스 70

이클립스 33, 39, 147, 315

익명 클래스 512, 513

인덱스 128, 132, 133

인스턴스 174, 279

인스턴스 멤버 216

인자 전달 방식 186

인터페이스 284, 291

인터페이스 구현 287

인터페이스 상속 286

일차 키 823

임계 역 676, 678

입력 다이얼로그 725

입력 스트림 416

자동 박싱 339, 370, 379

자동 언박싱 339, 377, 379

자동 타입 변환 73

자바 API 324

자바 가상 기계 22, 25, 48, 50, 648

찾아보기 801

Page 59: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

자바 서블릿 46

자바 스레드 648, 649

자바 인터페이스 285

자바 컴파일러 29

자바 키워드 64

자바 표준 배포판 29

자식 클래스 172

자원 이름 789, 791

작업 공간 39

잘 알려진 포트 788

전역 변수 217, 221

전역 함수 221

절차 지향 언어 19, 168

절차 지향 프로그래밍 169

접근 지정자 59, 185, 208, 248

정방형 배열 140

정수 타입 리터럴 69

정적 바인딩 277

제네릭 368, 369

제네릭 메소드 403

제네릭 클래스 399

제네릭 타입 370

제어판 832

제임스 고슬링 20

조건 연산자 91

조건문 93

조건식 93, 115, 119, 121

주석문 61

중량 컴포넌트 454

중첩 반복 123

증감 연산자 89

지역 변수 117

체크박스 컴포넌트 561, 564

초기 툴팁 출력 지연 시간 712

최상위 컨테이너 461

추상 메소드 278, 503

추상 클래스 279, 291

출력 스트림 416

캐스팅 259

캡슐화 50, 170, 221

컨테이너 369, 460, 461

컨텐트팬 463, 467

컬러 다이얼로그 737

컬렉션 368

컴파일 19

컴파일 오류 150, 280

컴파일러 19

컴포넌트 461, 602

코드의 재사용 172

콤보박스 583

콤보박스 컴포넌트 582

클라이언트 801

클라이언트 소켓 801, 802, 809

클래스 37, 59, 171, 174

클래스 멤버 216

클래스 파일 25, 26, 50

클리핑 625

클리핑 역 625

클리핑 역 설정 626

키 369, 389, 823

타이틀 466

타이틀 달기 466

타입 매개 변수 369, 370, 399, 400

타입 변환 73

탭 740

탭팬 740

테이블 823, 832, 834

텍스트 역 컴포넌트 575

텍스트 파일 421

텍스트 파일 복사 444

템플리트 370

토큰 350

툴바 706

툴팁 710, 712

툴팁 시간 제어 712

툴팁 활성화 712

특수문자 리터럴 70

파라미터 766

파일 다이얼로그 730

파일 열기 다이얼로그 730

파일 저장 다이얼로그 730, 734

파일 필터 731

파일의 끝 422

팝업 다이얼로그 725

패키지 32, 51, 308, 309

포커스 518

포트 787, 788

포트 번호 791

표준 설정 829

표준 패키지 325

프레임 464

프로그래밍 언어 19

프로그램 18

프로젝트 41

프로토콜 식별자 789, 790

플랫폼 21

플랫폼 독립성 49

플랫폼 독립적 21

플랫폼 종속성 22

피연산자 81

필드 171

하드웨어 18

해시맵 389

핸들 706

행 138, 823, 834

호스트 이름 791

확인 다이얼로그 726

흐름도 169

Abs(double a) 354

abstract 278, 279

abstract class 279

abstract method 278

accept() 801, 804, 807

Action 이벤트 556, 576, 585, 704

ActionListener 503, 704

actionPerformed() 506

Activity 754

Adapter 515

add() 375, 383, 467, 474, 476, 701

add(E element) 374, 382

add(int index, E element) 374, 382

addActionListener 506, 507

addFocusListener() 507

addItem() 583

addKeyListener() 520

addMouseListener() 507

addTab() 741

AdjustmentEvent 502

AIFF 771

JAVA PROGRAMMING802 찾아보기

Page 60: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

alt 속성 758

Android 48

anonymous class 512

append(String str) 348

append(StringBuffer sb) 348

applet 45, 754

appletviewer 32

appletviewer.exe 761

ArithmeticException 153

ArithmeticException 예외 151

array 128

ArrayIndexOutOfBoundsException 153

ArrayList<E> 369, 381

assembly language 19

AU 771

audio clip 771, 774

auto boxing 339, 370, 379

auto unboxing 339, 379

AWT 454

AWT 애플릿 754, 759

AWT 컨테이너 460

AWT 컴포넌트 454

BinarySearch() 396

bitCount(int i) 336

BLOCK 664

Boolean 335

BorderLayout 472, 473, 477, 707

boxing 338

break 124

break 문 100, 124, 125

Buffered I/O 436

Buffered Stream 436

BufferedInputStream 437

BufferedOutputStream 437

BufferedReader 437

BufferedWriter 437

ButtonGroup 568

Byte 335

byte code 23

Calendar 356

Calendar 클래스 356

call-by-value 186

capacity() 348, 374, 377

CardLayout 472, 485

case 문 99, 102

casting 259

catch 152

ceil(double a) 354

ChangeEvent 590

ChangeListener 590

Character 335

charAt() 344

charAt(int index) 342

class 171, 176, 328, 840

class file 25

ClassCastException 153

ClassNotFoundException 840

CLASSPATH 313

classpath 314

classpath 옵션 314

CLASSPATH 환경 변수 313

clear() 374, 382, 384, 390

Clet 754

clipRect 626

clone() 327, 422, 423, 425, 434, 803

CLOSED_OPTION 726

code 속성 757

codebase 속성 758

codePointAt(int index) 342

collection 368, 396

Color 609

column 823

command line argument 146

Comparable 398

compareTo() 343

compareTo(String anotherString) 342

compiler 19

Component 459, 461

ComponentAdapter 516

ComponentEvent 502

concat() 344

concat(String str) 342, 343

connect() 795, 798

Connection 객체 840

constructor 176

Container 460

ContainerAdapter 516

ContainerEvent 502

contains(CharSequence s) 342

contains(Object o) 374, 382

containsKey(Object key) 390

containsValue(Object value) 390

Content Pane 463

continue 124

continue 문 124

cos(double a) 354

countTokens() 352

create 명령 835

critical section 676

Daemon thread 662

Dalvik 48

data type 66

database 822

DataBase Management System 823

DataInputStream 421

DB2 823

DBMS 823, 831

default 212, 249

default constructor 198

default package 322

default 문 100

delete 명령 838, 839

delete 문 847

delete() 441

delete(int start, int end) 348

delimeter 350

destroy() 755, 756, 759, 763

destructor 202

disassemble 23

DNS 787

do-while 문 114, 120

doInput 796

Domain Name Server 787

doOutput 796

Double 335

downcasting 259, 260

drawArc 614

drawImage() 619, 620

drawLine() 612

drawOval() 612

drawPolygon 614

drawRect() 604, 612

찾아보기 803

Page 61: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

drawRoundRect() 612

DriverManager 840

dynamic binding 268

Eclipse 33

elementAt() 376, 384

elementAt(int index) 374, 382

embedded system 21

Encapsulation 50, 170

enum 136

EOF 422

equals() 330, 331

equals(Object obj) 327

ERROR_MESSAGE 727

escape sequence 70

Event Dispatch Thread 470, 498, 499

event listener 496, 499

EventObject 500

Exception 150

executeQuery() 842

executeUpdate() 842, 847

exists() 441

exit 469

exp(double a) 354

extends 243, 287

False 71

field 171

File 440, 441

file filter 731

File 클래스 440, 441

FileInputStream 419, 421

FileNameExtensionFilter 731

FileOutputStream 419, 424

FileReader 419, 428

FileWriter 419, 433

fillArc() 615

fillRect() 615

final 72, 225, 226

final 메소드 225

final 클래스 225

final 필드 225

finally 152

Float 335

floatValue() 336

FlowLayout 471, 473, 474, 475

flush() 425, 439, 803, 805, 808, 810

FocusAdapter 516

FocusEvent 502

Font 609

for 문 114, 115

for-each 문 135, 136

forName() 840

FTP 788

Garbage 194, 203, 204

garbage collection 206

garbage collector 203, 206

gc() 206

generic type 370

generics 368, 369

GET 797

get() 356, 376, 384, 389, 390

get(int index) 374, 382

get(Object key) 390

getButton() 501, 531

getClass() 327, 328

getClickCount() 501, 530

getEncoding() 434

getInputStream() 796, 802, 804

getInstance() 356

getKeyChar() 521, 522

getKeyCode() 521, 522

getKeyText() 523

getName() 328, 441

getOutputStream() 802, 804

getParameter() 766

getPath() 441

getPoint() 501, 530

getSelectedIndex() 585

getSelectedItem() 585

getSource() 501, 506

getX() 501, 530

getY() 501, 530

Google 48

GPL 29

Graphics 603, 606, 607

GridLayout 472, 481

GUI 454

GUI 컴포넌트 454

HashCode() 327, 328

HashMap<K, V> 369, 389

HashSet<E> 369

hasMoreTokens() 352

hasNext() 387

heavy weight component 454

height 속성 758

HTTP 788, 790

IBM 823

IDE 33

identifier 63

if 문 93

if-else 문 95

IllegalArgumentException 153

Image 객체 619

ImageIcon 554, 617

implements 287

import 32, 311, 312, 325, 462, 471

index 128

indexOf(Object o) 374, 382

infinite loop 116

Inheritance 172

init() 753, 755, 756, 759, 763

innner class 50

InputStream 793

InputStreamReader 430

insert 명령 836

insert 문 847

instance 174

instanceof 261, 262

int parseInt(String s) 336

int parseInt(String s, int radix) 336

Integer 335

interface 284, 285

interrupt() 668

InterruptedException 669

intValue() 336

IOException 153

IP 786, 787

IP 버전 787

IP 주소 786

ipconfig 787

isDirectory() 441, 442

isEmpty() 374, 382, 390

JAVA PROGRAMMING804 찾아보기

Page 62: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

isFile() 441, 442

ISO-8859-1 844, 847

Item 이벤트 564, 570, 585

ItemEvent 502

ItemListener 564

itemStateChanged 564

itemStateChanged() 564, 570

iterator() 387

Iterator<E> 387

JApplet 754, 763

jar 32

java 32, 38

Java Development Kit 324

Java EE 30

Java ME 30, 47

Java Run-time Environment 29

Java SE 29

java servlet 46

java.awt 326

java.io 326

java.lang 325, 327, 335

java.lang.Object 244, 245

java.net 791, 802

java.util 326

java.util.Random 354

javac 32, 38

javadoc 32

javap 32

JButton 556

JCheckBox 561

JColorChooser 737

JComboBox 578, 582

JComponent 459, 461, 548

jdb 32

JDBC 824, 831

JDBC 드라이버 825, 831, 840

JDBC 매니저 825

JDBC 프로그래밍 840

JDialog 714

JDK 23, 31, 324, 831

JDK 1.5 339, 370, 375, 468

JDK 7 102

JFileChooser 730

JFrame 463, 464

JLabel 553

Jlet 754

JList 578

JMenu 700, 701

JMenuBar 700, 701

JMenuItem 700, 701

JOptionPane 725

JPanel 604

JRadioButton 567, 570

JRE 29, 31, 325, 831

JScrollPane 575, 576, 578

JSlider 587

JTabbedPane 740

JTextArea 575

JTextField 573

JToolBar 706

JVM 22, 649

Key 823

Key 이벤트 518

KeyAdapter 516

KeyEvent 502

KeyEvent 객체 521

keyPressed() 519, 520

keyReleased() 519, 520

keySet() 390

keyTyped() 519, 520

KSC5601 431

LastModified() 441

Layout Manager 470

length 134

length 필드 134, 141, 148

length() 342, 441

life cycle 168

light weight component 455

link 26

LinkedList<E> 369, 396

list() 441, 442

listFiles() 441

localhost 787, 809

Long 335

longValue() 336

loop() 772

Machine language 19

main 스레드 469, 666

main() 145, 465, 645

main() 메소드 37, 59, 145, 146, 465

majorTickSpacing 588

MalformedURLException 792

Math 353

Math 클래스 353

max() 396

max(double a, double b) 354

method 171, 177

method overloading 189

method overriding 266

MIDI 771

Midlet 754

min() 396

min(double a, double b) 354

minorTickSpacing 588

mkdir() 441

modal 720

modeless 720

Mouse 이벤트 529

MouseAdapter 515, 516

mouseClicked() 529

mouseDragged() 529

MouseEvent 502

MouseListener 503, 529

MouseMotionAdapter 516

MouseMotionListener 529

mouseMoved(MouseEvent e) 529

mousePressed() 529

mouseReleased() 529

MouseWheelEvent 535

MouseWheelListener 535

MS949 430, 431

multi-processing 646

multiple inheritance 244

multitasking 644

MySQL 823, 826, 831, 832

MySQL Server 828

MySQL 명령행 829

MySQL 서버 829, 830, 832

mysql.exe 834

mysqladmin.exe 833

Name 속성 765

찾아보기 805

Page 63: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

nested loop 123

new 130, 178, 196, 202, 204, 663

newAudioClip() 771, 774

next() 79, 387

nextByte() 79

nextDouble() 79

nextFloat() 79

nextInt() 79

nextLine() 79

nextLong() 79

nextShort() 79

nextToken() 352

non-deamon thread 662

non-static 215

notify() 327, 663, 682

notifyAll() 327, 663, 682

NO_OPTION 726

null 376, 383, 391

null 리터럴 71

NullPointerException 153

NumberFormatException 153

NumberFormatException 예외 768

Oak 21

object 174, 327

object database 824

object oriented database 823

Object 클래스 244

openConnection() 795

openStream() 792, 793

Oracle 823

orientation 587

OutOfMemoryException 153

OutputStream 424

overloading 276

overriding 276

Package 32, 309

package-private 212

paint() 755, 759

paint(Graphics g) 628

paintBorder(Graphics g) 628

paintChildren(Graphics g) 628

paintComponent() 602, 755, 763

paintComponent(Graphics g) 628

parseBoolean() 337

parseFloat() 337

parseInt() 337

platform 21

platform dependence 22

platform independent 21

play() 771

Polymorphism 173

port 788

POST 797, 798

primary key 823

private 185, 210, 249

project 41

protected 185, 211, 249

public 59, 176, 185, 210, 249

put() 389, 390

put(K key, V value) 390

Random() 354

read() 422, 423

Reader 419

record 823

relation 823

relational database 823

remove() 377, 384, 387, 391

remove(int index) 374, 382

remove(Object key) 390

remove(Object o) 374, 382

removeAllElements() 374, 377

removeAllItems() 583

removeItem(Object obj) 583

removeItemAt(int index) 583

renameTo(File dest) 441

repaint() 630

replace 342, 348

requestFocus() 519

reserved word 64

ResultSet 844

ResultSet 클래스 842

reverse() 348, 396

rint() 354

rint(double a) 354

RMF 771

round robin 665

round() 354

round(double a) 354

row 823

rt.jar 310, 325

run() 652, 653

Runnable 655

RUNNABLE 663

Runnable 인터페이스 655

Scanner 76, 311

Scanner 클래스 76, 78

select 명령 837

select 문 843

separator 707

ServerSocket 801, 804, 805

ServerSocket 클래스 804

Servlet 46, 754

set() 356, 357

setClip 626

setDefaultCloseOperation 469

setDismissDelay(int mills) 712

setDoOutput() 798

setEditable 575

setEnabled(boolean b) 712

setFileFilter() 732

setFocusable() 519

setFont 575

setHorizontalAlignment 559

setInitialDelay(int mills) 712

setJMenuBar() 701

setLayout() 473, 484

setLength(int newLength) 348

setMajorTickSpacing 589

setMaximum 589

setMinimum 589

setMinorTickSpacing 589

setOrientation 589

setPaintLabels 589

setPaintTicks 589

setPaintTrack 589

setSelected() 564, 570

setSize 464

setText 575

setTitle() 467

setToolTipText(String msg) 710

setValue 589

JAVA PROGRAMMING806 찾아보기

Page 64: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

setVerticalAlignment 560

setVisible 464

Short 335

shortValue() 336

showConfirmDialog() 726

showDialog() 737, 738

showInputDialog() 725

showMessageDialog() 727

showOpenDialog() 732, 733

showSaveDialog() 734

sin(double a) 354

size() 374, 377, 382, 390, 391

sleep() 653

Socket 800, 801, 802, 803, 804

sort() 396

specialization 399

split() 350

split(String regex) 342

SQL 824

SQL Server 823

sqrt(double a) 354

Stack<E> 369

Standard Configuration 829

start() 652, 653, 753, 755, 759, 763

stateChanged 590

Statement 클래스 842

static 215

static 메소드 222

static 멤버 216

stop() 755, 756, 759, 763, 772

Stream 417

String 340

String toBinaryString(int i) 336

String toHexString(int i) 336

String toOctalString(int i) 336

String toString(int i) 336

String value = dic.get(key); 393

String 클래스 67, 71, 340

StringBuffer 347

StringBuffer 클래스 347

StringTokenizer 350

StringTokenizer 클래스 350

Structured Query Language 824

sub class 172, 241

subString(int beginIndex) 343

super 274

super class 172, 241

super() 256, 257

super.paintComponent() 604

Swing 454

Swing 컴포넌트 454

switch 문 99

synchronized 678

System.exit(0) 153

System.gc() 206

System.in 76

Tab 740

tan(double a) 354

TCP 786, 800

TCP 프로토콜 786

Telnet 788

template 370

TERMINATED 664

TextEvent 502

this 191, 192, 193, 222

this() 200, 202

thread 644, 645

Thread Control Block 662

Thread Synchronization 676

Thread 클래스 651

TIMED_WAITING 663

toArray() 374, 382

token 350

toLowerCase() 343

ToolTipManager 712

Top Level Container 461

toString() 327, 329

toUpperCase() 343

track 588

trim() 343, 344

true 71

try 152

try-catch-finally 문 151

Unboxing 338

Unicode 66, 520

upcasting 259

update 명령 838

update 문 847

URL 789, 791, 797, 800

URL 클래스 791

URLConnection 795, 796, 797, 800

URLConnection 클래스 795

US-ASCII 431

Value 823

value 속성 765

Vector<E> 369, 373

Virtual Key 521

Wait() 327, 663, 682

WAITING 663

WAV 771

where 절 843

while 문 114, 118

width 속성 758

WindowAdapter 516

WindowEvent 502

windows service 829

WORA 22

workspace 39

Wrapper 335

Wrapper 클래스 335, 370, 379

Write Once Run Anywhere 22

write(int b) 425

write(int c) 434

Writer 419

YES_NO_OPTION 726

YES_OPTION 726

yield() 665

<applet> 태그 757, 765

<Enter> 키 518, 573

<param> 태그 765, 766

<Tab> 키 519

2차원 배열 138

찾아보기 807

Page 65: 머리말 -  품... · PDF file13.2 자바의멀티스레딩 648 13.3 스레드만들기 ... 소켓프로그래밍 16.4 서버- ... 을하고신문을보고음악을듣고게임

명품 JAVA Programming

황기태∙김효수 지음

초 판 발 행 : 2011. 7. 11.

개 정 판 : 2013. 2. 7.

발 행 인 : 김 승 기

발 행 처 : 생능출판사

신 고 번 호 : 제406-2005-000002호

신 고 일 자 : 2005. 1. 21

I S B N : 978-89-7050-764-4(93000)

� � � ─���

경기도 파주시 문발동 507-12 파주출판도시표전화 : (031)955-0761, FAX : (031)955-0768

홈페이지 : http://www.booksr.co.kr

�파본및잘못된책은바꾸어드립니다. 정가 29,000원�이책을불법복사할경우저작권법에의해

5년이하의징역이나5,000만원이하의벌금에처해질수있습니다.

황기태

현 한성 학교 컴퓨터공학과 교수

서울 학교 컴퓨터공학과 박사

서울 학교 컴퓨터공학과 석사

서울 학교 컴퓨터공학과 학사

비트교육센타 센타장

IBM Watson Research Center 방문 연구원

University of California, Irvine 방문 교수

University of Florida 방문 교수

김효수

현 터치타이프 모바일 지사장/한성 학교 컴퓨터공학과 겸임 교수

서울 학교 컴퓨터공학과 석사

서울 학교 컴퓨터공학과 학사

LG전자 선임 연구원

한국 Rational Software, 한국 Openwave Systems 근무

M-Systems 지사장

IKIVO 지사장

저 자 약 력

저자와의 협의에 의해인지를 생략합니다.

<개정판>