1 번 답 :



결과는 다음과 같다.


----------------------------------------

Title : ASDF2 Modified

Writer : ZZZZ

WrittenDate : 2013-05-13

Content : foo2 modified

----------------------------------------

Title : ASDF3

Writer : ZZZZ

WrittenDate : 2013-05-13

Content : foo3




2 번 답 :


올바르다. 스택은 LIFO( Last In First Out ) 이므로 가장 뒤에서부터 빼는 것이 맞다.




3 번 답 :


우리가 직접 작성한 클래스를 해쉬 테이블의 키로 사용하기 위해서는 Object 클래스로부터 상속받은 ( hashCode ) 메서드와 ( equals ) 메서드를 오우버라이드해야 합니다.


해쉬 테이블 연습


이름, 전화번호, 주소를 해쉬 테이블에 저장한 다음, 이름으로 검색하는 프로그램을 작성하십시오.


힌트 : 전화번호와 주소 필드를 갖는 클래스를 선언해서 사용하십시오.





결과는 다음과 같다.


[ 소똥 ] 전화번호 : 234-676-3682, 주소 : 광주시 논밭

[ 말똥 ] 전화번호 : 123-456-7890, 주소 : 서울시 청계천 다리 및

[ 개똥 ] 전화번호 : 432-236-4938, 주소 : 고양시 아무데나


ArrayList 와 LinkedList 비교.


ArrayList 클래스는 LinkedList 클래스와는 달리 큐로 사용하기에 적합하지 못합니다. 그 이유는 무엇일까요?




ArrayList 클래스는 데이터를 뒤쪽에 추가하게 되어 있다. 결국 큐를 구현하게 되면 앞쪽부터 빼 와야 하는데, 빼 올 때마다 index 파라미터로 넘겨야만 한다. 그래서 불필요하게 많은 함수들을 호출하게 된다.


게다가 앞에서 데이터를 빼 오게 되면, 나머지 데이터를 순서대로 앞쪽으로 채워 주기 위해서 재정렬되어야 하므로 성능 저하가 있을 수 있다.


ArrayList 로 큐를 만들려면, 다음과 같은 식으로 해야 한다.



만약 재정렬되는 것을 막으려고 한다면 데이터를 앞쪽으로 삽입해야 하는데, 이 때 나머지 데이터를 순서대로 뒤쪽으로 채워 주기 위해서 재정렬되어야 하므로 소용이 없다.


무의미하지만, 구현해 보면 다음과 같다.



LinkedList 를 스택으로 사용하기.


LinkedList 의 addFirst, removeFirst 메서드를 사용하여 예제 [ 13-7 ] 과 똑같은 일을 하는 프로그램을 작성하십시오.





결과는 다음과 같다.


7

59

12


장바구니를 리스트로 표현하기


인터넷 쇼핑몰의 장바구니를 리스트 자료구조로 표현해 보십시오. 장바구니에 들어 가는 상품 항목은 상품 코드, 수량, 단가로 구성되어야 합니다.





결과는 다음과 같다.


code : 2, unitPrice : 200, numberOfGoods : 2

code : 3, unitPrice : 300, numberOfGoods : 3

code : 4, unitPrice : 400, numberOfGoods : 1

code : 5, unitPrice : 500, numberOfGoods : 4

sum : 3700


LinkedList 의 검색


LinkedList 클래스에는 ArrayList 클래스와 똑같은 기능을 하는 indexOf, lastIndexOf 메서드가 있습니다. 이 메서드를 이용하여 [ 예제 13-3 ] 과 똑같은 일을 하는 프로그램을 작성하십시오.






결과는 다음과 같다.


첫 번째 사과 : 1

두 번째 사과 : 4


1번 답 :



조심할 것은 eclipse 같이 유니코드로 편집하는 도구들에서 코드를 입력하고 컴파일하면 다음과 같은 에러를 만날 수 있다.


unmappable character for encoding ms949


이럴 때는 javac 의 옵션인 "-encoding" 에 "UTF-8" 을 지정해 줄 필요가 있다.


다음과 같은 결과가 나온다.


 



2번 답 :


올바른 프로그램이다. 왜냐하면 3.14true 는 각각 "Double" 과 "Boolean" 이라는 래퍼 클래스로 자동으로 박싱되기 때문이다.


래퍼 클래스 관련 예외처리


래퍼 클래스의 생성자는 잘못된 문자열을 파라미터로 받으면 NumberFormatException 을 발생합니다. [ 예제 12-2 ] 에서 그 익셉션을 처리하도록 수정하십시오.





다음과 같은 결과를 볼 수 있다.


1 번 답 :



다음과 같이 테스트해서 결과를 얻음.



계좌번호 : 111-22-333333

예금주 이름 : 홍길동

잔액 : 120000000원




2 번 답 : 


obj1 = (10,10)

obj2 = (50,100)


finalize 메서드를 사용했을 때의 장단점


[ 예제 11-12 ] 에서처럼 finalize 메서드를 이용하여 시스템 자원을 해제하는 것과 [ 예제 11-11 ] 에서처럼 일반 메서드를 이용하여 시스템 자원을 해제하는 것에는 장점과 단점이 공존합니다. 어떤 장점과 단점이 있을지 생각해 보십시오.





 방식  장점  단점
 finalize 메서드  명시적으로 메서드를 호출하지 않아도 자원이 해제된다.

 원하는 시점에 자원을 해제할 수 없다.

 가비지 컬렉터가 호출되기 전까지는 자원이 남아 있다.

 일반 메서드  원하는 시점에 자원을 해제할 수 있다.

 메서드를 명시적으로 호출해야 하는 귀찮음이 있다.
 실수로 메서드를 호출하지 않으면 자원이 해제되지 않는다.



복제 가능 클래스의 구분


9장과 10장에서 배웠던 클래스들 중 어떤 클래스가 복제 가능한 클래스이고 어떤 클래스가 복제 불가능한 클래스일까요? API 규격서를 참조하여 구분해 보십시오.





 복제 가능 클래스  복제 불가능 클래스

 Calendar

 GregorianCalendar

 DateFormat

 SimpleDateFormat

 String

 StringBuilder

 StringBuffer

 StringTokenizer

 Math

 Random

 FileReader

 FileWriter

 FileOutputStream

 FileInputStream

 DataInputStream

 DataOutputStream

 ObjectOutputStream

 ObjectInputStream

 BufferedInputStream

 BufferedOutputStream

 BufferedReader

 BufferedWriter

 LineNumberReader

 PrintWriter

 PrintStream

 File


이제는 코드가 상당히 길어져서 답만 올립니다.



1 번 답 :





2 번 답 :





3 번 답 :



BufferedOutputStream 클래스의 활용


BufferedOutputStream 클래스의 사용 방법은 BufferedWriter 클래스의 사용 방법과 비슷합니다. [ 예제 10-5 ] 를 BufferedOutputStream 클래스를 사용하도록 수정해 보십시오.





BufferedReader 클래스 사용 연습


BufferedReader 클래스의 사용법은 BufferedInputStream 클래스의 사용법과 비슷합니다. [ 예제 10-3 ] 을 BufferedReader 클래스를 이용하도록 수정해 보십시오.





강나루 건너서

밀밭 길을


구름에 달 가듯이

가는 나그네.



개체의 직렬화 연습


다음은 일주일 간의 주가 추이를 기록한 데이터입니다. 이 데이터를 파일에 저장하는 프로그램과 그 파일을 다시 읽어서 모니터로 출력하는 프로그램을 작성하십시오.


2006/04/10 1398.29

2006/04/11 1386.08

2006/04/12 1383.59

2006/04/13 1405.72

2006/04/14 1432.72


힌트 : ObjectInputStream 클래스와 ObjectOutputStream 클래스에는 프리미티브 타입의 데이터를 읽고 쓰는 메서드도 있습니다.





다음과 같은 결과가 나온다.


2006/04/10 1398.29

2006/04/11 1386.08

2006/04/12 1383.59

2006/04/13 1405.72

2006/04/14 1432.72


직렬화 가능 클래스와 직렬화 불가능 클래스의 차이점 비교


직렬화 불가능 클래스인 StringTokenizer 의 개체를 writeObject 메서드를 이용하여 출력하는 프로그램을 작성한 후, 언제 어떤 에러가 발생하는지 테스트해 보십시오.




다음과 같은 코드를 작성한다.



문제없이 컴파일되지만 실행 시점에서 IOException 이 발생한다.


파일로 출력할 수 없습니다.


프리미티브 타입 데이터는 파일에 어떻게 저장될까?


[ 예제 10-6 ] FileDump 프로그램을 이용하여 [ 예제 10-7 ] 의 결과물인 output.dat 파일의 내용을 확인해 보십시오.





결과는 아래와 같다.


00 00 00 00 00 00 00 01 00 00 00 02 00 00 00 03 

00 00 00 04 00 00 00 05 00 00 00 06 00 00 00 07 

00 00 00 08 00 00 00 09 


배열 파라미터를 받는 read 메서드.


배열 파라미터를 받는 read 메서드를 이용하여 [ 예제 10-3 ] 과 똑같은 기능을 하는 프로그램을 작성하십시오.





1. 다음은 똑같은 기능을 하는 프로그램이지만 성능면에서 차이가 있습니다. 어떠한 프로그램의 성능이 더 우수할까요?






첫 번째 코드는 4 개의 String 개체를 생성한다. 하지만 두 번째 코드는 5 개의 String 개체를 생성하므로 첫 번째가 성능이 더 우수하다.




2. 다음은 명령행에서 받은 파라미터를 길게 연결한 하나의 문자열로 만들어서 출력하는 프로그램입니다. StringBuilder 클래스를 이용해어 빈칸을 채워 완성하십시오.



예를 들어서 이 프로그램은 다음과 같이 작동해야 합니다.







3. 다음의 빈칸을 채워서 오늘로부터 100 일 후의 날짜를 계산하여 출력하는 프로그램으로 만드십시오.








4. 다음은 1 부터 5 까지의 수 중 하나를 임의로 선택해서 출력하는 프로그램입니다. 빈칸을 채우십시오.






Random 클래스


Random 클래스를 이용해서 동전을 100 번 던지는 시뮬레이션을 한 후, 앞면이 나온 수와 뒷면의 수를 출력하는 프로그램을 작성하십시오.





앞편 : 38 회, 뒷면 : 62 회


세계 시간 프로그램


뉴욕, 홍콩, 파리의 현재 시간을 다음과 같은 포맷으로 한꺼번에 출력하는 프로그램을 작성하십시오.


뉴욕 2005/11/13    (일)    오후 7:32

홍콩 2005/11/14    (월)    오전 8:32

파리 2005/11/14    (월)    오전 1:32




일단 식별자를 알아야 한다.



위의 코드로 다음과 같은 결과를 획득했다.


Etc/GMT+12

Etc/GMT+11

Pacific/Midway

Pacific/Niue

Pacific/Pago_Pago

Pacific/Samoa

US/Samoa

America/Adak

America/Atka

Etc/GMT+10

HST

Pacific/Honolulu

Pacific/Johnston

Pacific/Rarotonga

Pacific/Tahiti

SystemV/HST10

US/Aleutian

US/Hawaii

Pacific/Marquesas

AST

America/Anchorage

America/Juneau

America/Nome

America/Sitka

America/Yakutat

Etc/GMT+9

Pacific/Gambier

SystemV/YST9

SystemV/YST9YDT

US/Alaska

America/Dawson

America/Ensenada

America/Los_Angeles

America/Metlakatla

America/Santa_Isabel

America/Tijuana

America/Vancouver

America/Whitehorse

Canada/Pacific

Canada/Yukon

Etc/GMT+8

Mexico/BajaNorte

PST

PST8PDT

Pacific/Pitcairn

SystemV/PST8

SystemV/PST8PDT

US/Pacific

US/Pacific-New

America/Boise

America/Cambridge_Bay

America/Chihuahua

America/Creston

America/Dawson_Creek

America/Denver

America/Edmonton

America/Hermosillo

America/Inuvik

America/Mazatlan

America/Ojinaga

America/Phoenix

America/Shiprock

America/Yellowknife

Canada/Mountain

Etc/GMT+7

MST

MST7MDT

Mexico/BajaSur

Navajo

PNT

SystemV/MST7

SystemV/MST7MDT

US/Arizona

US/Mountain

America/Bahia_Banderas

America/Belize

America/Cancun

America/Chicago

America/Costa_Rica

America/El_Salvador

America/Guatemala

America/Indiana/Knox

America/Indiana/Tell_City

America/Knox_IN

America/Managua

America/Matamoros

America/Menominee

America/Merida

America/Mexico_City

America/Monterrey

America/North_Dakota/Beulah

America/North_Dakota/Center

America/North_Dakota/New_Salem

America/Rainy_River

America/Rankin_Inlet

America/Regina

America/Resolute

America/Swift_Current

America/Tegucigalpa

America/Winnipeg

CST

CST6CDT

Canada/Central

Canada/East-Saskatchewan

Canada/Saskatchewan

Chile/EasterIsland

Etc/GMT+6

Mexico/General

Pacific/Easter

Pacific/Galapagos

SystemV/CST6

SystemV/CST6CDT

US/Central

US/Indiana-Starke

America/Atikokan

America/Bogota

America/Cayman

America/Coral_Harbour

America/Detroit

America/Fort_Wayne

America/Grand_Turk

America/Guayaquil

America/Havana

America/Indiana/Indianapolis

America/Indiana/Marengo

America/Indiana/Petersburg

America/Indiana/Vevay

America/Indiana/Vincennes

America/Indiana/Winamac

America/Indianapolis

America/Iqaluit

America/Jamaica

America/Kentucky/Louisville

America/Kentucky/Monticello

America/Lima

America/Louisville

America/Montreal

America/Nassau

America/New_York

America/Nipigon

America/Panama

America/Pangnirtung

America/Port-au-Prince

America/Thunder_Bay

America/Toronto

Canada/Eastern

Cuba

EST

EST5EDT

Etc/GMT+5

IET

Jamaica

SystemV/EST5

SystemV/EST5EDT

US/East-Indiana

US/Eastern

US/Michigan

America/Caracas

America/Anguilla

America/Antigua

America/Argentina/San_Luis

America/Aruba

America/Asuncion

America/Barbados

America/Blanc-Sablon

America/Boa_Vista

America/Campo_Grande

America/Cuiaba

America/Curacao

America/Dominica

America/Eirunepe

America/Glace_Bay

America/Goose_Bay

America/Grenada

America/Guadeloupe

America/Guyana

America/Halifax

America/Kralendijk

America/La_Paz

America/Lower_Princes

America/Manaus

America/Marigot

America/Martinique

America/Moncton

America/Montserrat

America/Port_of_Spain

America/Porto_Acre

America/Porto_Velho

America/Puerto_Rico

America/Rio_Branco

America/Santiago

America/Santo_Domingo

America/St_Barthelemy

America/St_Kitts

America/St_Lucia

America/St_Thomas

America/St_Vincent

America/Thule

America/Tortola

America/Virgin

Antarctica/Palmer

Atlantic/Bermuda

Brazil/Acre

Brazil/West

Canada/Atlantic

Chile/Continental

Etc/GMT+4

PRT

SystemV/AST4

SystemV/AST4ADT

America/St_Johns

CNT

Canada/Newfoundland

AGT

America/Araguaina

America/Argentina/Buenos_Aires

America/Argentina/Catamarca

America/Argentina/ComodRivadavia

America/Argentina/Cordoba

America/Argentina/Jujuy

America/Argentina/La_Rioja

America/Argentina/Mendoza

America/Argentina/Rio_Gallegos

America/Argentina/Salta

America/Argentina/San_Juan

America/Argentina/Tucuman

America/Argentina/Ushuaia

America/Bahia

America/Belem

America/Buenos_Aires

America/Catamarca

America/Cayenne

America/Cordoba

America/Fortaleza

America/Godthab

America/Jujuy

America/Maceio

America/Mendoza

America/Miquelon

America/Montevideo

America/Paramaribo

America/Recife

America/Rosario

America/Santarem

America/Sao_Paulo

Antarctica/Rothera

Atlantic/Stanley

BET

Brazil/East

Etc/GMT+3

America/Noronha

Atlantic/South_Georgia

Brazil/DeNoronha

Etc/GMT+2

America/Scoresbysund

Atlantic/Azores

Atlantic/Cape_Verde

Etc/GMT+1

Africa/Abidjan

Africa/Accra

Africa/Bamako

Africa/Banjul

Africa/Bissau

Africa/Casablanca

Africa/Conakry

Africa/Dakar

Africa/El_Aaiun

Africa/Freetown

Africa/Lome

Africa/Monrovia

Africa/Nouakchott

Africa/Ouagadougou

Africa/Sao_Tome

Africa/Timbuktu

America/Danmarkshavn

Atlantic/Canary

Atlantic/Faeroe

Atlantic/Faroe

Atlantic/Madeira

Atlantic/Reykjavik

Atlantic/St_Helena

Eire

Etc/GMT

Etc/GMT+0

Etc/GMT-0

Etc/GMT0

Etc/Greenwich

Etc/UCT

Etc/UTC

Etc/Universal

Etc/Zulu

Europe/Belfast

Europe/Dublin

Europe/Guernsey

Europe/Isle_of_Man

Europe/Jersey

Europe/Lisbon

Europe/London

GB

GB-Eire

GMT

GMT0

Greenwich

Iceland

Portugal

UCT

UTC

Universal

WET

Zulu

Africa/Algiers

Africa/Bangui

Africa/Brazzaville

Africa/Ceuta

Africa/Douala

Africa/Kinshasa

Africa/Lagos

Africa/Libreville

Africa/Luanda

Africa/Malabo

Africa/Ndjamena

Africa/Niamey

Africa/Porto-Novo

Africa/Tunis

Africa/Windhoek

Arctic/Longyearbyen

Atlantic/Jan_Mayen

CET

ECT

Etc/GMT-1

Europe/Amsterdam

Europe/Andorra

Europe/Belgrade

Europe/Berlin

Europe/Bratislava

Europe/Brussels

Europe/Budapest

Europe/Copenhagen

Europe/Gibraltar

Europe/Ljubljana

Europe/Luxembourg

Europe/Madrid

Europe/Malta

Europe/Monaco

Europe/Oslo

Europe/Paris

Europe/Podgorica

Europe/Prague

Europe/Rome

Europe/San_Marino

Europe/Sarajevo

Europe/Skopje

Europe/Stockholm

Europe/Tirane

Europe/Vaduz

Europe/Vatican

Europe/Vienna

Europe/Warsaw

Europe/Zagreb

Europe/Zurich

MET

Poland

ART

Africa/Blantyre

Africa/Bujumbura

Africa/Cairo

Africa/Gaborone

Africa/Harare

Africa/Johannesburg

Africa/Kigali

Africa/Lubumbashi

Africa/Lusaka

Africa/Maputo

Africa/Maseru

Africa/Mbabane

Africa/Tripoli

Asia/Amman

Asia/Beirut

Asia/Damascus

Asia/Gaza

Asia/Hebron

Asia/Istanbul

Asia/Jerusalem

Asia/Nicosia

Asia/Tel_Aviv

CAT

EET

Egypt

Etc/GMT-2

Europe/Athens

Europe/Bucharest

Europe/Chisinau

Europe/Helsinki

Europe/Istanbul

Europe/Kiev

Europe/Mariehamn

Europe/Nicosia

Europe/Riga

Europe/Simferopol

Europe/Sofia

Europe/Tallinn

Europe/Tiraspol

Europe/Uzhgorod

Europe/Vilnius

Europe/Zaporozhye

Israel

Libya

Turkey

Africa/Addis_Ababa

Africa/Asmara

Africa/Asmera

Africa/Dar_es_Salaam

Africa/Djibouti

Africa/Juba

Africa/Kampala

Africa/Khartoum

Africa/Mogadishu

Africa/Nairobi

Antarctica/Syowa

Asia/Aden

Asia/Baghdad

Asia/Bahrain

Asia/Kuwait

Asia/Qatar

Asia/Riyadh

EAT

Etc/GMT-3

Europe/Kaliningrad

Europe/Minsk

Indian/Antananarivo

Indian/Comoro

Indian/Mayotte

Asia/Riyadh87

Asia/Riyadh88

Asia/Riyadh89

Mideast/Riyadh87

Mideast/Riyadh88

Mideast/Riyadh89

Asia/Tehran

Iran

Asia/Baku

Asia/Dubai

Asia/Muscat

Asia/Tbilisi

Asia/Yerevan

Etc/GMT-4

Europe/Moscow

Europe/Samara

Europe/Volgograd

Indian/Mahe

Indian/Mauritius

Indian/Reunion

NET

W-SU

Asia/Kabul

Antarctica/Mawson

Asia/Aqtau

Asia/Aqtobe

Asia/Ashgabat

Asia/Ashkhabad

Asia/Dushanbe

Asia/Karachi

Asia/Oral

Asia/Samarkand

Asia/Tashkent

Etc/GMT-5

Indian/Kerguelen

Indian/Maldives

PLT

Asia/Calcutta

Asia/Colombo

Asia/Kolkata

IST

Asia/Kathmandu

Asia/Katmandu

Antarctica/Vostok

Asia/Almaty

Asia/Bishkek

Asia/Dacca

Asia/Dhaka

Asia/Qyzylorda

Asia/Thimbu

Asia/Thimphu

Asia/Yekaterinburg

BST

Etc/GMT-6

Indian/Chagos

Asia/Rangoon

Indian/Cocos

Antarctica/Davis

Asia/Bangkok

Asia/Ho_Chi_Minh

Asia/Hovd

Asia/Jakarta

Asia/Novokuznetsk

Asia/Novosibirsk

Asia/Omsk

Asia/Phnom_Penh

Asia/Pontianak

Asia/Saigon

Asia/Vientiane

Etc/GMT-7

Indian/Christmas

VST

Antarctica/Casey

Asia/Brunei

Asia/Choibalsan

Asia/Chongqing

Asia/Chungking

Asia/Harbin

Asia/Hong_Kong

Asia/Kashgar

Asia/Krasnoyarsk

Asia/Kuala_Lumpur

Asia/Kuching

Asia/Macao

Asia/Macau

Asia/Makassar

Asia/Manila

Asia/Shanghai

Asia/Singapore

Asia/Taipei

Asia/Ujung_Pandang

Asia/Ulaanbaatar

Asia/Ulan_Bator

Asia/Urumqi

Australia/Perth

Australia/West

CTT

Etc/GMT-8

Hongkong

PRC

Singapore

Australia/Eucla

Asia/Dili

Asia/Irkutsk

Asia/Jayapura

Asia/Pyongyang

Asia/Seoul

Asia/Tokyo

Etc/GMT-9

JST

Japan

Pacific/Palau

ROK

ACT

Australia/Adelaide

Australia/Broken_Hill

Australia/Darwin

Australia/North

Australia/South

Australia/Yancowinna

AET

Antarctica/DumontDUrville

Asia/Yakutsk

Australia/ACT

Australia/Brisbane

Australia/Canberra

Australia/Currie

Australia/Hobart

Australia/Lindeman

Australia/Melbourne

Australia/NSW

Australia/Queensland

Australia/Sydney

Australia/Tasmania

Australia/Victoria

Etc/GMT-10

Pacific/Chuuk

Pacific/Guam

Pacific/Port_Moresby

Pacific/Saipan

Pacific/Truk

Pacific/Yap

Australia/LHI

Australia/Lord_Howe

Antarctica/Macquarie

Asia/Sakhalin

Asia/Vladivostok

Etc/GMT-11

Pacific/Efate

Pacific/Guadalcanal

Pacific/Kosrae

Pacific/Noumea

Pacific/Pohnpei

Pacific/Ponape

SST

Pacific/Norfolk

Antarctica/McMurdo

Antarctica/South_Pole

Asia/Anadyr

Asia/Kamchatka

Asia/Magadan

Etc/GMT-12

Kwajalein

NST

NZ

Pacific/Auckland

Pacific/Fiji

Pacific/Funafuti

Pacific/Kwajalein

Pacific/Majuro

Pacific/Nauru

Pacific/Tarawa

Pacific/Wake

Pacific/Wallis

NZ-CHAT

Pacific/Chatham

Etc/GMT-13

MIT

Pacific/Apia

Pacific/Enderbury

Pacific/Fakaofo

Pacific/Tongatapu

Etc/GMT-14

Pacific/Kiritimati


다음과 같은 코드로 시간을 획득해서 출력한다.



결과는 다음과 같다.


뉴욕 2013/04/21 (일) 오전 11:14

홍콩 2013/04/21 (일) 오후 11:14

파리 2013/04/21 (일) 오후 05:14


토큰 추출 프로그램


"고슴도치, 앵무새 | 토끼" 라는 문자열에 있는 "고슴도치", "앵무새", "토끼" 를 토큰으로 추출하는 프로그램을 작성하십시오.




StringTokenizer 를 사용하되, 좌우 공백을 없애기 위해서 trim() 메서드를 호출한다.



StringBuilder 의 메서드


StringBuilder 의 클래스에는 문자열 조작에 사용되는 replace, setCharAt, reverse 라는 메서드도 있습니다. 다음은 그 메서드들을 사용하는 프로그램입니다. 이 프로그램을 컴파일하여 실행해 보십시오.





어떤 돌이 내 얼굴을 물끄러미 쳐다보는 것만

어떤 꽃이 내 얼굴을 물끄러미 치어다보는 것만

만것 는보다어치 미러끄물 을굴얼 내 이꽃 떤어


String 개체의 내용이 변경 가능하다면?


String 클래스의 개체는 일단 생성되고 나면 문자열 내용이 바뀌는 일이 절대 없습니다. 만약 String 개체의 문자열 내용이 바뀔 수 있다면 어떤 문제가 발생할까요?




1. 전역으로 정의된 리터럴의 내용이 바뀌어 버릴 수 있다.


2. 문자열 조작할 때마다 조작하기 전의 내용을 복사해 두어야 한다.

문자열에서 문자/부분 문자열 검색하기


String 클래스에는 문자열 안에 있는 문자나 부분 문자열의 위치를 찾는 indexOf, lastIndexOf 라는 메서드도 있습니다. 다음은 그 메서드들을 사용하는 프로그램입니다. String 클래스의 API 규격서를 찾아 보고 이 프로그램이 어떤 결과를 낼지 예측해 보십시오. 그리고 이 프로그램을 컴파일해서 실행해 보고, 예측했던 결과와 일치하는 지 비교해 보십시오.





다음과 같은 결과를 예상했다.


0

13

0

13

37

13

13

13


결과는 그대로 나왔다.


String 클래스의 특성 확인하기.


다음의 프로그램을 컴파일해서 실행해 보십시오. 어떤 결과가 나옵니까? 결과로부터 무엇을 알 수 있습니까?





뇌를 자극하는 C

뇌를 자극하는 하드웨어

뇌를 자극하는 하드웨어입문


원본 문자열은 변경되지 않고, 새로운 String 개체가 생성된다.

1. 다음은 오늘의  날짜를 출력하는 프로그램인데, 이 프로그램에서는 JDK 라이브러리에 있는 java.util 패키지의 GregorianCalendar 클래스와 Calendar 클래스를 사용하고 있습니다. import 문을 사용하여 이 프로그램을 좀 더 같단하게 고쳐 보십시오.








2. 인터넷 쇼핑몰의 재고 관리에 사용하려고 다음과 같은 클래스를 만들었습니다.



그런데 이 클래스를 상속하는 또 다른 클래스를 다음과 같이 만들려고 합니다. 이 서브클래스 안에서는 GoodsStock 클래스의 어떤 구성요소들을 사용할 수 있을까요?





이 서브 클래스에서는 GoodsStock 클래스에서 public 이나 protected 로 선언된 것들만 접근할 수 있다. 그러므로 GoodsStock.goodsCode 와 GoodsStock.stockNum 을 모두 사용할 수 있다.




3. JDK 에 포함되어 있는 javap 라는 명령은 클래스 파일로부터 그 안에 들어 있는 클래스와 인터페이스의 정보를 읽어서 출력하는 명령입니다. 예를 들어 이 장에서 작성했던 Square 클래스( [ 예제 8-14 ] ) 를 컴팡리한 디렉토리에서 이 명령을 입력하면 다음과 같이 Square 클래스와 구성요소에 대한 정보를 볼 수 있습니다.



이 명령을 사용해서 이 장에서 작성했던 Movable 인터페이스( [ 예제 8-17 ] )의 내용을 확인해 보십시오. 결과를 통해 어떤 사실을 확인할 수 있습니까?





interface 의 메서드는 자동적으로 public 추상 메서드로 선언된다는 것을 알 수 있다.


좁은 접근 범위로의 메서드 오버라이딩.


만약 자바에서 좁은 접근 범위로의 메서드 오버라이딩을 허용한다면 어떤 문제가 발생할 수 있을까요?




클래스에서 일반 메서드를 선언하는 의도야 자기 맘이니 어쩔 수 없다고 해도, 인터페이스의 메서드의 같은 경우에는 문제가 발생할 수 있다.


인터페이스의 메서드는 기본적으로 public 권한을 갖는다. 즉 이를 구현한 클래스에 접근해 해당 메서드를 호출할 수 있다는 가정을 깔고 있는 것이다. 만약 이를 protected 나 private 권한으로 바꿔 버린다면, 인터페이스가 가지고 있던 약속을 어겨 버리는 것이 된다. 


컴파일은 어찌 어찌 된다고 하더라도, 런타임에 제대로된 동작을 할 수 없을 것이다.

접근 제어 연습문제


[ 예제 8-14 ] 의 클래스를 가지고 ( 100, 200 ) 위치에 변의 길이 15 인 정사각형을 만는 후, 각 꼭지점의 좌표를 출력하는 프로그램을 작성하십시오.





1. 다음은 [ 예제 7-8 ] 에 있는 Account 클래스와 CheckingAccount 클래스를 사용하는 프로그램입니다. 표시된 부분에 if 문을 추가하여 checkingAccount 개체일 때만 카드 번호를 출력하도록 만들어 보십시오.








2. 다음과 같이 정의된 열거 타입을 자바 문법으로 선언하십시오.


 [ 열거 값 ]

 노랑

 빨강

 파랑







3. 다음은 6장에서 작성했던 대출가능 인터페이스와 그 인터페이스를 구현하는 단행본 클래스입니다. 대출가능 인터페이스에 선언되어 있는 상수를 열거 타입으로 바꾸고, 단행본 클래스의 관련 부분도 수정하십시오.






  1. 찬가리 2013.04.24 04:52

    질문이 있습니다. 3번 문제에서 열거타입으로 바꾸고 state에 초기값을 정해주질 않았는데 checkOut메소드드의 if 문에서 state랑 열거상수(NOMAL)랑 어떻게 비교하나요? 객체를 만드는 클래스에서 STATE에 초기값을 정해주는건가요?
    궁금해서 질문드려 봅니다 ㅎㅎ

    • lifeisforu 2013.04.25 14:40 신고

      아... enum 의 첫 번째 값을 초기화하지 않는 경우에는 0 으로 지정됩니다.

      그리고 다음 값들부터 순서대로 1 씩 늘어 나게 됩니다.

+ Recent posts