제3장 클래스와 객체의 사용
클래스와 객체의 사용 3장 내용 객체 생성 과 객체 참조 String 클래스와 그 메쏘드들 Java 표준 클래스 라이브러리 Random과 Math 클래스들 출력 포맷 열거 타입(enumerated type) 포장 클래스(wrapper class) 그래픽 컴포넌트와 컨테이너 레이블과 이미지 © 2004 Pearson Addison-Wesley. All rights reserved
Outline 객체 생성 String 클래스 패키지 출력 포맷 열거 타입 포장 클래스 컴포넌트와 컨테이너 이미지 © 2004 Pearson Addison-Wesley. All rights reserved
객체 생성 변수 클래스 이름 객체 참조 변수(object reference variable) 기본 타입 값 혹은 객체에 대한 참조를 저장한다. 클래스 이름 객체 참조 변수선언을 위한 타입 이름 String title; 이 선언으로 객체가 생성되는 것은 아님! 객체 참조 변수(object reference variable) 객체의 주소 저장 객체 자체는 별도로 생성되어야 한다. © 2004 Pearson Addison-Wesley. All rights reserved
title = new String ("Java Software Solutions"); 객체 생성 new 연산자 사용하여 객체 생성 title = new String ("Java Software Solutions"); String 구성자 호출: 객체를 구성하는 특수 메쏘드 객체 생성을 실체화(instantiation)라고 한다. 객체는 클래스의 실체(instance)이다. © 2004 Pearson Addison-Wesley. All rights reserved
메쏘드 호출(Method invocation) 도트 연산자(dot operator ) 객체 생성 후에 도트 연산자를 사용하여 메쏘드 호출 count = title.length() 메쏘드는 값을 반환(return) 할 수 있다. 반환 값은 배정 혹은 수식에서 사용됨 메쏘드 호출 객체에 서비스를 요청하는 것으로 생각할 수 있다. © 2004 Pearson Addison-Wesley. All rights reserved
참조(Reference) 비교 객체 참조 기본 타입 변수는 값을 저장하고 객체 참조 변수는 객체의 주소를 저장한다. 객체의 위치에 대한 포인터로 생각할 수 있다. 주소로 표시하는 대신에 화살표를 사용한다. "Steve Jobs" name1 num1 38 © 2004 Pearson Addison-Wesley. All rights reserved
배정(Assignment) 배정은 값을 복사하여 변수에 저장한다. 기본 타입: Before: After: 38 num1 96 num2 = num1; num1 38 num2 After: © 2004 Pearson Addison-Wesley. All rights reserved
참조 배정(Reference Assignment) 객체 참조 배정은 주소를 복사하여 저장한다 ! name1 name2 Before: "Steve Jobs" "Steve Wozniak" name2 = name1; name1 name2 After: "Steve Jobs" © 2004 Pearson Addison-Wesley. All rights reserved
별명(Alias) 별명 별명은 유용하지만 조심해야 한다 ! 한 객체를 참조하는 두 개 이상의 참조 변수들 한 객체를 여러 참조 변수들을 이용하여 접근할 수 있다. 별명은 유용하지만 조심해야 한다 ! 실제로는 한 객체만 존재하므로 어떤 참조를 통해 그 객체를 변경하면 다른 모든 이명 참조들도 변경하게 된다. © 2004 Pearson Addison-Wesley. All rights reserved
쓰레기 수집(Garbage Collection) 객체에 대한 유효한 참조가 없으면 더 이상 사용될 수 없다. 이 객체는 쓰레기가 된다. 자동 쓰레기 수집 Java는 정기적으로 자동 쓰레기 수집을 하여 사용되지 않는 메모리를 시스템에 돌려준다. 다른 언어의 쓰레기 수집 프로그래머가 직접 해야 한다. © 2004 Pearson Addison-Wesley. All rights reserved
Outline 객체 생성 String 클래스 패키지 출력 포맷 열거 타입 포장 클래스 컴포넌트와 컨테이너 이미지 © 2004 Pearson Addison-Wesley. All rights reserved
String 클래스 스트링 생성 title = "Java Software Solutions"; new 연산자 없이 String 객체를 생성할 수 있다. title = "Java Software Solutions"; 이것은 스트링에만 적용되는 특별한 경우 " … "은 String 객체를 나타낸다. title = new String("Java Software Solutions"); © 2004 Pearson Addison-Wesley. All rights reserved
String 메쏘드 String 객체가 생성되면 String 클래스의 어떤 메쏘드는 변경된 스트링을 반환 값도 길이도 변경할 수 없다. String 객체는 변경 불능(immutable) String 클래스의 어떤 메쏘드는 변경된 스트링을 반환 String toLowerCase ( ) String replace (char oldChar, char newChar) String substring (int offset, int endIndex) String concat (String str) © 2004 Pearson Addison-Wesley. All rights reserved
String 인덱스 스트링 내의 특정 문자 참조 스트링 "Hello" 인덱스를 사용해서 인덱스는 0부터 시작 © 2004 Pearson Addison-Wesley. All rights reserved
StringMutation.java // String 클래스와 그 메쏘드들의 사용을 보여준다. public class StringMutation { public static void main (String[] args) // 스트링과 그것의 다양한 변형을 프린트한다. { String phrase = "Change is inevitable"; String mutation1, mutation2, mutation3, mutation4; System.out.println ("Original string: \"" + phrase + "\""); System.out.println ("Length of string: " + phrase.length()); mutation1 = phrase.concat (", except from vending machines."); mutation2 = mutation1.toUpperCase(); mutation3 = mutation2.replace ('E', 'X'); mutation4 = mutation3.substring (3, 30); System.out.println ("Mutation #1: " + mutation1); // 변형된 각 스트링을 프린트한다 System.out.println ("Mutation #2: " + mutation2); System.out.println ("Mutation #3: " + mutation3); System.out.println ("Mutation #4: " + mutation4); System.out.println ("Mutated length: " + mutation4.length()); } } © 2004 Pearson Addison-Wesley. All rights reserved
Outline 객체 생성 String 클래스 패키지 출력 포맷 열거 타입 포장 클래스 컴포넌트와 컨테이너 이미지 © 2004 Pearson Addison-Wesley. All rights reserved
Class 라이브러리 클래스 라이브러리(class library) 프로그램 개발에 사용할 수 있는 클래스들의 모음 Java 표준 클래스 라이브러리(standard class library) Java 개발 환경의 일부 Java 언어 자체의 일부는 아님. System , Scanner, String 도 일부 © 2004 Pearson Addison-Wesley. All rights reserved
패키지(Package) Java 표준 클래스 라이브러리는 패키지로 조직된다. 일부 패키지들 패키지 java.lang java.applet java.awt javax.swing java.net java.util javax.xml.parsers 목적 일반적인 지원 애플릿 그래픽/그래픽 사용자 인터페이스 추가 그래픽 기능 네트워크 통신 유틸리티 XML 문서 처리 © 2004 Pearson Addison-Wesley. All rights reserved
import 선언 패키지 내의 클래스 사용 패키지 내의 모든 클래스 전입 이름을 완전 지정(fully qualified name) java.util.Scanner import 후 클래스 이름만 사용 import java.util.Scanner; 패키지 내의 모든 클래스 전입 import java.util.*; © 2004 Pearson Addison-Wesley. All rights reserved
import 선언 java.lang 패키지의 모든 클래스는 자동 전입 import java.lang.*; Scanner 클래스 마치 다음과 같이 : import java.lang.*; java.lang.String Scanner 클래스 java.util.Scanner import 해야 함 © 2004 Pearson Addison-Wesley. All rights reserved
Random 클래스 java.util.Random 의사난수 발생기 Random 객체는 종자 값(seed value)을 이용하여 복잡한 계산을 수행하여 난수를 발생시킨다. © 2004 Pearson Addison-Wesley. All rights reserved
RandomNumbers.java // Random 클래스를 사용한 의사난수의 생성을 보여준다. import java.util.Random; public class RandomNumbers { //----------------------------------------------------------------- // 다양한 범위에 속하는 난수를 발생시킨다. public static void main (String[] args) { Random generator = new Random(); int num1; float num2; num1 = generator.nextInt(); System.out.println ("A random integer: " + num1); num1 = generator.nextInt(10); System.out.println ("From 0 to 9: " + num1); © 2004 Pearson Addison-Wesley. All rights reserved
RandomNumbers.java num1 = generator.nextInt(10) + 1; System.out.println ("From 1 to 10: " + num1); num1 = generator.nextInt(15) + 20; System.out.println ("From 20 to 34: " + num1); num1 = generator.nextInt(20) - 10; System.out.println ("From -10 to 9: " + num1); num2 = generator.nextFloat(); System.out.println ("A random float (between 0-1): " + num2); num2 = generator.nextFloat() * 6; // 0.0 to 5.999999 num1 = (int)num2 + 1; System.out.println ("From 1 to 6: " + num1); } } © 2004 Pearson Addison-Wesley. All rights reserved
Math 클래스 Math 클래스 수학 함수 java.lang 패키지의 일부 다양한 수학 함수 포함 절대값(absolute value) 제곱근(square root) 지수승(exponentiation) 삼각함수(trigonometric function) © 2004 Pearson Addison-Wesley. All rights reserved
value = Math.cos(90) + Math.sqrt(delta); Math 클래스의 메쏘드는 정적 메쏘드(static method) 정적 메쏘드 객체 없이 클래스 이름을 통해서 호출 가능 value = Math.cos(90) + Math.sqrt(delta); 6장에서 자세히 배웁니다. © 2004 Pearson Addison-Wesley. All rights reserved
Quadratic.java // 사용자 입력을 기반으로 계산을 수행하는데 Math 클래스의 사용을 보여준다. import java.util.Scanner; public class Quadratic { // 이차방정식의 근을 결정한다. public static void main (String[] args) { int a, b, c; // ax^2 + bx + c double discriminant, root1, root2; Scanner scan = new Scanner (System.in); System.out.print ("Enter the coefficient of x squared: "); a = scan.nextInt(); System.out.print ("Enter the coefficient of x: "); b = scan.nextInt(); © 2004 Pearson Addison-Wesley. All rights reserved
Quadratic.java discriminant = Math.pow(b, 2) - (4 * a * c); root1 = ((-1 * b) + Math.sqrt(discriminant)) / (2 * a); root2 = ((-1 * b) - Math.sqrt(discriminant)) / (2 * a); System.out.println ("Root #1: " + root1); System.out.println ("Root #2: " + root2); } } © 2004 Pearson Addison-Wesley. All rights reserved
Outline 객체 생성 String 클래스 패키지 출력 포맷 열거 타입 포장 클래스 컴포넌트와 컨테이너 이미지 © 2004 Pearson Addison-Wesley. All rights reserved
출력 포맷(Formatting Output) 적절한 모양으로 출력 값을 포맷해야 한다. Java 표준 클래스 라이브리러 출력 포맷 기능을 제공하는 클래스 제공 java.text 패키지 NumberFormat 클래스 화폐 단위 , 퍼센트로 포맷 DecimalFormat 클래스 패턴을 기반으로 포맷 © 2004 Pearson Addison-Wesley. All rights reserved
출력 포맷(Formatting Output) NumberFormat 클래스의 정적 메쏘드 getCurrencyInstance() getPercentInstance() 포맷터(formatter) 객체 반환 포맷터(formatter) 객체의 메쏘드 format 적절한 포맷의 명시된 정보를 나타내는 스트링 반환 © 2004 Pearson Addison-Wesley. All rights reserved
Purchase.java //----------------------------------------------------------------- // 출력을 포맷하는데 NumberFormat 클래스 사용을 보여준다. import java.util.Scanner; import java.text.NumberFormat; public class Purchase { //----------------------------------------------------------------- // 사용자가 입력한 값들을 사용하여 구매한 항목의 최종 값을 계산한다. public static void main (String[] args) { final double TAX_RATE = 0.06; // 6% 판매세 int quantity; double subtotal, tax, totalCost, unitPrice; Scanner scan = new Scanner (System.in); © 2004 Pearson Addison-Wesley. All rights reserved
Purchase.java NumberFormat fmt1 = NumberFormat.getCurrencyInstance(); NumberFormat fmt2 = NumberFormat.getPercentInstance(); System.out.print ("Enter the quantity: "); quantity = scan.nextInt(); System.out.print ("Enter the unit price: "); unitPrice = scan.nextDouble(); subtotal = quantity * unitPrice; tax = subtotal * TAX_RATE; totalCost = subtotal + tax; // 적절한 포맷으로 결과를 출력한다 System.out.println ("Subtotal: " + fmt1.format(subtotal)); System.out.println ("Tax: " + fmt1.format(tax) + " at " + fmt2.format(TAX_RATE)); System.out.println ("Total: " + fmt1.format(totalCost)); } } © 2004 Pearson Addison-Wesley. All rights reserved
출력 포맷(Formatting Output) DecimalFormat 클래스 부동소수점을 다양한 형식으로 포맷하는데 사용 예: 소수점 셋째 자리까지의 부동소수점 수 DecimalFormat의 구성자/메쏘드 DecimalFormat (String pattern) 구성자: 지정된 포맷 pattern을 가지는 새로운 DecimalFormat 객체를 생성한다. void applyPattern (String pattern) 이 DecimalFormat 객체에 지정된 pattern을 적용한다. String format (double number) 현재의 패턴에 따라서 포맷된, 지정된 number를 포함하고 있는 스트링을 반환한다. © 2004 Pearson Addison-Wesley. All rights reserved
CircleStats.java // DecimalFormat 클래스를 사용하여 십진수 값을 포맷하는 것을 보여준다. import java.util.Scanner; import java.text.DecimalFormat; public class CircleStats { // 반지름이 주어진 원의 면적과 원주를 계산한다. public static void main (String[] args) { int radius; double area, circumference; Scanner scan = new Scanner (System.in); System.out.print ("Enter the circle's radius: "); radius = scan.nextInt(); area = Math.PI * Math.pow(radius, 2); circumference = 2 * Math.PI * radius; // 출력 결과를 소수점 세 번째 자리에서 반올림한다 DecimalFormat fmt = new DecimalFormat ("0.###"); System.out.println ("The circle's area: " + fmt.format(area)); System.out.println ("The circle's circumference: " + fmt.format(circumference)); } } © 2004 Pearson Addison-Wesley. All rights reserved
Outline 객체 생성 String 클래스 패키지 출력 포맷 열거 타입 포장 클래스 컴포넌트와 컨테이너 이미지 © 2004 Pearson Addison-Wesley. All rights reserved
열거 타입(Enumerated Type) 프로그래머가 열거 타입을 정의할 수 있다. 변수 선언에 사용할 수 있다. 열거 타입은 모든 가능한 값(식별자)을 나열한다. 나열된 값들의 수에 제한이 없음 예제 Season enum Season {winter, spring, summer, fall}; © 2004 Pearson Addison-Wesley. All rights reserved
열거 타입(Enumerated Type) 열거 타입이 정의되면 변수를 선언할 수 있다. Season time; 값을 배정할 수 있다. time = Season.fall; 값은 타입 이름을 통해 명시한다. 열거 타입은 타입-안전( type-safe ) 리스트 된 값 외에 값을 배정(사용) 할 수 없다. © 2004 Pearson Addison-Wesley. All rights reserved
순서 값(Ordinal Values) 내부적으로 열거 타입의 그러나 순서 값을 직접 배정할 수는 없음 열거 타입의 값은 순서 값(정수)으로 저장됨 열거 타입의 첫 번째 값은 순서 값 0 두번째 값은 1 … 그러나 순서 값을 직접 배정할 수는 없음 © 2004 Pearson Addison-Wesley. All rights reserved
열거 타입(Enumerated Type) 열거 타입은 특별한 클래스 열거 타입 값은 객체 열거 타입의 변수는 객체 참조 변수 적용 가능 메쏘드 ordinal(): 열거 타입 값의 순서 값 name(): 열거 타입 값의 이름 © 2004 Pearson Addison-Wesley. All rights reserved
IceCream.java public class IceCream { enum Flavor {vanilla, chocolate, strawberry, fudgeRipple, coffee, rockyRoad, mintChocolateChip, cookieDough} //----------------------------------------------------------------- // Flavor 타입의 변수를 생성해서 사용한다. public static void main (String[] args) { Flavor cone1, cone2, cone3; cone1 = Flavor.rockyRoad; cone2 = Flavor.chocolate; System.out.println ("cone1 value: " + cone1); System.out.println ("cone1 ordinal: " + cone1.ordinal()); System.out.println ("cone1 name: " + cone1.name()); © 2004 Pearson Addison-Wesley. All rights reserved
IceCream.java System.out.println (); System.out.println ("cone2 value: " + cone2); System.out.println ("cone2 ordinal: " + cone2.ordinal()); System.out.println ("cone2 name: " + cone2.name()); cone3 = cone1; System.out.println ("cone3 value: " + cone3); System.out.println ("cone3 ordinal: " + cone3.ordinal()); System.out.println ("cone3 name: " + cone3.name()); } } © 2004 Pearson Addison-Wesley. All rights reserved
Outline 객체 생성 String 클래스 패키지 출력 포맷 열거 타입 포장 클래스 컴포넌트와 컨테이너 이미지 © 2004 Pearson Addison-Wesley. All rights reserved
포장 클래스(Wrapper Class) java.lang 패키지는 기본 타입에 대응되는 포장 클래스 제공 기본 타입 byte Byte short Short int Integer long Long float Float double Double char Character boolean Boolean void Void © 2004 Pearson Addison-Wesley. All rights reserved
포장 클래스(Wrapper Class) 정수 40을 나타내는 Integer 객체 생성 Integer age = new Integer(40); 객체가 필요한 곳에 사용될 수 있다. 포장 클래스가 제공하는 상수/메쏘드 String 형태의 정수를 int 값으로 변환 num = Integer.parseInt(str); 정수를 이진수 스트링으로 변환 String toBinaryString (int num) Integer. MIN_VALUE, Integer. MAX_VALUE © 2004 Pearson Addison-Wesley. All rights reserved
자동 박스(Autoboxing) 기본 타입 값을 상응하는 포장 객체로 자동 변환 Integer obj; int num = 42; obj = int; 이 배정문은 자동으로 Integer 객체를 생성한다. 역변환 (unboxing)도 필요할 때 자동적으로 일어난다. © 2004 Pearson Addison-Wesley. All rights reserved
Outline 객체 생성 String 클래스 패키지 출력 포맷 열거 타입 포장 클래스 컴포넌트와 컨테이너 이미지 © 2004 Pearson Addison-Wesley. All rights reserved
그래픽 응용 지금까지 여기서는 텍스트 기반 명령어-줄 애플리케이션(command-line application) 그래픽 컴포넌트를 갖는 Java 애플리케이션 GUI(Graphical User Interface) © 2004 Pearson Addison-Wesley. All rights reserved
GUI 컴포넌트(component) GUI 컴포넌트 GUI-관련 클래스 버튼, 텍스트 필드 같은 화면 요소를 나타내는 객체 java.awt: Abstract Windowing Toolkit (AWT) 원래 Java GUI 패키지 javax.swing 다양한 컴포넌트 추가 © 2004 Pearson Addison-Wesley. All rights reserved
GUI 컨테이너(Container) GUI 컨테이너 프레임(frame) 패널(panel) 다른 컴포넌트들을 포함하고 조직하는 데 사용되는 컴포넌트 프레임(frame) GUI-기반 Java 애플리케이션을 디스플레이 하는 데 사용하는 윈도우 타이틀 바를 갖는 별개의 윈도우로 디스플레이 위치/크기 조정 가능 패널(panel) 다른 컴포넌트들을 포함하고 조직할 수 있으나 스스로 디스플레이 될 수 없다 ! 디스플레이 하려면 다른 컨테이너에 add 되어야 한다. © 2004 Pearson Addison-Wesley. All rights reserved
레이블(Label) 한 줄의 텍스트를 디스플레이 하는 GUI 컴포넌트 예제 Authority.java 정보를 디스플레이 혹은 다른 컴포넌트 식별하기 위해 예제 Authority.java 두 개의 레이블을 패널에 넣고 패널을 프레임에 디스플레이 © 2004 Pearson Addison-Wesley. All rights reserved
Authority.java import java.awt.*; import javax.swing.*; public class Authority { public static void main (String[] args) { JFrame frame = new JFrame ("Authority"); frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); JPanel primary = new JPanel(); primary.setBackground (Color.yellow); primary.setPreferredSize (new Dimension(250, 75)); JLabel label1 = new JLabel ("Question authority,"); JLabel label2 = new JLabel ("but raise your hand first."); primary.add (label1); primary.add (label2); frame.getContentPane().add(primary); frame.pack(); frame.setVisible(true); } } © 2004 Pearson Addison-Wesley. All rights reserved
중첩 패널 포함 계층구조(containment hierarchy) 예제 NestedPanels.java 컨테이너가 다른 컴포넌트를 포함하여 계층구조 형성 원하는 가시적 효과를 내도록 형성 예제 NestedPanels.java 한 패널 내의 두 개의 패널 중첩 프레임 크기가 변함에 따른 효과 주의 © 2004 Pearson Addison-Wesley. All rights reserved
NestedPanel.java import java.awt.*; import javax.swing.*; public class NestedPanels { //----------------------------------------------------------------- // 세 번째 패널 내부에 중첩되는 두 개의 색상 패널을 제시한다. public static void main (String[] args) { JFrame frame = new JFrame ("Nested Panels"); frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); // 첫 번째 서브패널을 설정한다. JPanel subPanel1 = new JPanel(); subPanel1.setPreferredSize (new Dimension(150, 100)); subPanel1.setBackground (Color.green); JLabel label1 = new JLabel ("One"); subPanel1.add (label1); © 2004 Pearson Addison-Wesley. All rights reserved
NestedPanel.java // 두 번째 서브패널을 설정한다. JPanel subPanel2 = new JPanel(); // 두 번째 서브패널을 설정한다. JPanel subPanel2 = new JPanel(); subPanel2.setPreferredSize (new Dimension(150, 100)); subPanel2.setBackground (Color.red); JLabel label2 = new JLabel ("Two"); subPanel2.add (label2); // primary 패널을 설정한다. JPanel primary = new JPanel(); primary.setBackground (Color.blue); primary.add (subPanel1); primary.add (subPanel2); frame.getContentPane().add(primary); frame.pack(); frame.setVisible(true); } } © 2004 Pearson Addison-Wesley. All rights reserved
Outline 객체 생성 String 클래스 패키지 출력 포맷 열거 타입 포장 클래스 컴포넌트와 컨테이너 이미지 © 2004 Pearson Addison-Wesley. All rights reserved
이미지(Image) 이미지는 그래픽 인터페이스에 자주 사용 JPEG, GIF 포맷 이미지를 처리할 수 있다. JLabel 한 줄의 텍스트 디스플레이 하는데 사용 이미지 디스플레이 하는데 사용 레이블은 텍스트, 이미지, 둘 다로 구성 가능 © 2004 Pearson Addison-Wesley. All rights reserved
이미지(Image) ImageIcon 클래스 레이블 내의 텍스트와 이미지 정렬 가능 예제 LabelDemo.java 레이블에 저장된 이미지를 나타내는데 사용 이미지에 대한 텍스트의 상대적 위치 설정 가능 레이블 내의 텍스트와 이미지 정렬 가능 예제 LabelDemo.java © 2004 Pearson Addison-Wesley. All rights reserved
LabelDemo.java //----------------------------------------------------------------- // 레이블에 포함된 이미지 아이콘의 사용을 보여준다. import java.awt.*; import javax.swing.*; public class LabelDemo { //----------------------------------------------------------------- // 주요 애플리케이션 프레임을 생성하고 디스플레이한다. public static void main (String[] args) { JFrame frame = new JFrame ("Label Demo"); frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); ImageIcon icon = new ImageIcon ("devil.gif"); JLabel label1, label2, label3; © 2004 Pearson Addison-Wesley. All rights reserved
LabelDemo.java label1 = new JLabel ("Devil Left", icon, SwingConstants.CENTER); label2 = new JLabel ("Devil Right", icon, SwingConstants.CENTER); label2.setHorizontalTextPosition (SwingConstants.LEFT); label2.setVerticalTextPosition (SwingConstants.BOTTOM); label3 = new JLabel ("Devil Above", icon, SwingConstants.CENTER); label3.setHorizontalTextPosition (SwingConstants.CENTER); label3.setVerticalTextPosition (SwingConstants.BOTTOM); JPanel panel = new JPanel(); panel.setBackground (Color.cyan); panel.setPreferredSize (new Dimension (200, 250)); panel.add (label1); panel.add (label2); panel.add (label3); frame.getContentPane().add(panel); frame.pack(); frame.setVisible(true); } } © 2004 Pearson Addison-Wesley. All rights reserved
3장 요약 객체 생성 과 객체 참조 String 클래스와 그 메쏘드들 Java 표준 클래스 라이브러리 Random과 Math 클래스들 출력 포맷 열거 타입(enumerated type) 포장 클래스(wrapper class) 그래픽 컴포넌트와 컨테이너 레이블과 이미지 © 2004 Pearson Addison-Wesley. All rights reserved