PowerPoint 프레젠테이션

Similar documents
1

PowerPoint 프레젠테이션

JAVA PROGRAMMING 실습 08.다형성

PowerPoint Presentation

PowerPoint Presentation

07 자바의 다양한 클래스.key

02 C h a p t e r Java

Design Issues

슬라이드 1

PowerPoint 프레젠테이션

gnu-lee-oop-kor-lec06-3-chap7

C# Programming Guide - Types

PowerPoint Presentation

Microsoft PowerPoint - 2강

PowerPoint 프레젠테이션

PowerPoint Presentation

슬라이드 1

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

PowerPoint 프레젠테이션

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1"); void method() 2"); void method1() public class Test 3"); args) A

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

제11장 프로세스와 쓰레드

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - CSharp-10-예외처리

PowerPoint Presentation

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

PowerPoint 프레젠테이션

Microsoft PowerPoint - lec12 [호환 모드]

Cluster management software

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Network Programming

10.0pt1height.7depth.3width±â10.0pt1height.7depth.3widthÃÊ10.0pt1height.7depth.3widthÅë10.0pt1height.7depth.3width°è10.0pt1height.7depth.3widthÇÁ10.0pt1height.7depth.3width·Î10.0pt1height.7depth.3width±×10.0pt1height.7depth.3width·¡10.0pt1height.7depth.3width¹Ö pt1height.7depth.3widthŬ10.0pt1height.7depth.3width·¡10.0pt1height.7depth.3width½º, 10.0pt1height.7depth.3width°´10.0pt1height.7depth.3widthü, 10.0pt1height.7depth.3widthº¯10.0pt1height.7depth.3width¼ö, 10.0pt1height.7depth.3width¸Þ10.0pt1height.7depth.3width¼Ò10.0pt1height.7depth.3widthµå

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

쉽게 풀어쓴 C 프로그래밍

JAVA PROGRAMMING 실습 05. 객체의 활용

(Microsoft PowerPoint - java1-lecture11.ppt [\310\243\310\257 \270\360\265\345])

JAVA PROGRAMMING 실습 09. 예외처리

PowerPoint Presentation

Microsoft PowerPoint - Introduction to Google Guava.pptx

PowerPoint Presentation

PowerPoint Presentation

Tcl의 문법

JVM 메모리구조

05-class.key

쉽게 풀어쓴 C 프로그래밍

ilist.add(new Integer(1))과 같이 사용하지 않고 ilist.add(1)과 같이 사용한 것은 자바 5.0에 추가된 기본 자료형과 해당 객체 자료 형과의 오토박싱/언박싱 기능을 사용한 것으로 오토박싱이란 자바 컴파일러가 객체를 요구하는 곳에 기본 자료형

Microsoft PowerPoint - 04-UDP Programming.ppt

PowerPoint Presentation

PowerPoint Presentation

(Microsoft PowerPoint - java2-lecture3.ppt [\310\243\310\257 \270\360\265\345])

int total = 0; for( int i=1; i<=5; i++ ) { for( int j=1; j<=i; i++ ) { total ++; System.out.println( total ); 대구분 : 객체와 Class 소구분 : 객체생성과사용 / Class 선언

gnu-lee-oop-kor-lec11-1-chap15

쉽게 풀어쓴 C 프로그래밍

쉽게

Microsoft PowerPoint - lec2.ppt

PowerPoint Presentation

Microsoft PowerPoint - ch07 - 포인터 pm0415

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과

금오공대 컴퓨터공학전공 강의자료

Microsoft Word - java19-1-midterm-answer.doc

JUNIT 실습및발표

12-file.key

Microsoft PowerPoint - chap04-연산자.pptx

비긴쿡-자바 00앞부속

A Tour of Java V

11장 포인터

Microsoft PowerPoint - Java7.pptx

Microsoft PowerPoint - chap05-제어문.pptx

PowerPoint 프레젠테이션

PowerPoint Presentation

Microsoft PowerPoint - chap06-2pointer.ppt

슬라이드 1

rmi_박준용_final.PDF

01-OOPConcepts(2).PDF

Spring Boot/JDBC JdbcTemplate/CRUD 예제

Java ~ Java program: main() class class» public static void main(string args[])» First.java (main class ) /* The first simple program */ public class

Spring Data JPA Many To Many 양방향 관계 예제

Microsoft PowerPoint - Lect04.pptx

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

PowerPoint 프레젠테이션

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

JAVA PROGRAMMING 실습 02. 표준 입출력

4장.문장

03-JAVA Syntax(2).PDF

Java ...

ThisJava ..

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

PowerPoint 프레젠테이션

chap 5: Trees

C++ Programming

예외 예외정의예외발생예외처리예외전파 단정 단정의선언 단정조건검사옵션 2

Microsoft PowerPoint - Lect07.pptx

강의 개요

유니티 변수-함수.key

PowerPoint Presentation

C프로-3장c03逞풚

Transcription:

SCJP 5.0 자격증학습용 보조자료

목 차 1-1. J2SE 5.0 소개 1-2. SCJP 5.0 자격증소개 1-2-1. 자격증상세내용 1-2-2. 출제경향 1-3. J2SE 5.0 에추가된기능들 1-3-1. 제너릭 (Generics) 1-3-2. 향상된루프문 (Enhanced for Loop) 1-3-3. AutoBoxing/Unboxing 소개 1-3-4. Typesafe Enums 1-3-5. V arargs 1-3-6. Static imports 1-3-7. Annotations 1-3-8. StringBuilder 1-3-9. Formatting 2

1-1. J2SE 5.0 소개 3

J2SE 5.0 2004 년 9 월코드명 J2SE 5.0 Tiger 로소개됨 J2SE5.0 의가장중요한테마는개발용이성 (Ease of Development) 사용자편의성, 성능확장성, 시스템모니터링및관리성향상 제너릭, 열거타입, 오토박싱기능탑재로신속한코딩지원 자바플랫폼과프로그래밍언어진화의중요한계기 4

1-2. SCJP 5.0 자격증소개 5

SCJP 5.0 자격증소개 SCJP 5.0 (CX-310-055) 자격증상세내용 SCJP 5.0 은자바프로그래머를위한자격증시험입니다. 본자격증취득은프로그래머가자바언어의기본적인 syntax 와구조를이해하고있으며 J2SE 5.0 을사용하는서버와데스크탑상에서운영되는 Java technology applications 를구현할수있음을증명해줍니다. 시험번호 전제조건 시험문항 CX-310-055 없음 72 문항 시험가격 \200,000( 부가세포함 ) 합격점 59% (72 문항중 43 문항이상통과 ) 시험시간 시험유형 175 분 객관식 ( 단일선택과다중선택 ), 단답형 (Drag and Drop) 6

SCJP 5.0 Upgrade 자격증소개 SCJP 5.0 은자바프로그래밍언어사용경험이있는프로그래머를위한자격증시험입니다. 본자격증취득은프로그래머가자바언어의기본적인 syntax 와구조를이해하고있으며 J2SE 5.0 을사용하는서버와데스크탑상에서운영되는 Java technology applications 를구현할수있음을증명해줍니다. 특히, 본시험은이전버전의 SCJP(SCJP 1.2 이하, SCJP 1.4) 취득자들이최신버전의 Java Programming Language 에대한지식과프로그래밍능력을검증받을수있는시험입니다. 단, 기존의 SCJP 자격증이없으신분은 SCJP Upgrade 시험에응시하실수없습니다. SCJP 5.0 (CX-310-056) Upgrade 자격증상세내용 시험번호 CX -310-056 전제조건 시험문항 이전버전의 SC JP 취득자 46 문항 시험가격 \100,000( 부가세포함 ) 합격점 58% (46 문항중 27 문항이상통과 ) 시험시간 시험유형 105 분 객관식 ( 단일선택과다중선택 ), 단답형 (Drag and Drop) 7

SCJP 5.0 출제경향 Section 1: 선언, 초기화, 범위 (Declarations, Initialization and Scoping) ( 문제구성비율 : 19%) -추상클래스, nested 클래스, 인터페이스, enum 선언방법, package 와 import 문 - static import 사용방법 - primitive type 의사용과 Arrays 와 static, instance, local 변수 - static, non-static 메소드선언과 JavaBeans Naming Convention - 메소드의오버라이드, 오버라이딩을올바르게하는지여부의판단 - 하위클래스의생성자에서상위클래스의생성자자동호출과명시적호출 - nested 클래스인스턴스생성하는방법 Section 2: 제어구문 (Flow Control) ( 문제구성비율 : 15%) - if, switch-case 구문을이용한코드작성 - for, enhanced for loop,do, while, labels, break, continue 와관련된 Loop 구문의사용 - assertion 구문의적절한사용법과부적절한사용법에대한구별 - exception 처리 (try, catch, finally ) 사용 - 메소드오버라이드할때의 exception 처리규칙 - runtime exception, checked exception, error 의구별 8

SCJP 5.0 출제경향 Section 3: API 컨텐츠 (API Contents) ( 문제구성비율 : 13%) - primitive wrapper 클래스 (Boolean, Character, Double, Integer 등 ) - autoboxing & unboxing 을사용한코드작성. - String, StringBuilder, StringBuffer 클래스들간의구별. - java.io 패키지의 FileWriter, FileReader, PrintWriter 클래스의사용 - ObjectInput/OutputStream, Object Serialization, transient keyword - java.util.locale 클래스의사용 - java.util,regex 패키지의 Matcher, Pattern 클래스의사용 - String.split() 메서드사용 - java.text.dateformat 클래스의사용 9

SCJP 5.0 출제경향 Section 4: 동시성 (Concurrency) ( 문제구성비율 : 10%) - java.lang.thread 와 java.lang.runnable 을사용하여 thread 정의, 시작하는방법 - thread 의동시성문제, synchronized keyword 사용방법 - wait(), notify(), notifyall(),join() 메소드 - static member 의 multi thread 에안전 (safe) 하지의여부 Section 5: 객체지향개념들 (OO Concepts) ( 문제구성비율 : 12%) - Encapsulation 의규칙, loose coupling, high cohesion - Polymorphism 의사용, reference type casting 할때의 runtime error 와 compile error - Inheritance 관계일때의 instance, static 변수의 modifier - Inheritance 관계일때의 instance, static 메서드의 modifier - override, overloading 된메서드의선언과호출방법 - overloading 된생성자의선언과호출방법 - is-a 와 has-a 관계 10

SCJP 5.0 출제경향 Section 6: 콜렉션 / 일반 (Collections/ Generics) ( 문제구성비율 : 16%) - Comparable 인터페이스의사용 - 주어진시나리오에서어떠한 Collection 을사용해야하는지를판단 - 각컬렉션클래스들의용도파악 ( 예를들면 TreeSet 정렬기능을가진다.) - hashcode() 와 equals() 메서드의올바른오버라이드와잘못된오버라이드의구분 - Set<E>, List<E>, Queue<E>, Map<K,V> 인터페이스의사용 - generic 을사용한 Collction 작성방법 - generic 이아닌 Collection API 의한계및 generic 버전을사용하기위해코드를재분해하는방법 - generic 메소드또는와일드카드타입을이용하는메서드작성 - List 정렬또는 binary 검색수행, 배열을 List 로변환하는코드작성 - java.util.comparator, java.util.comparable 을이용한 List 나배열의정렬 11

SCJP 5.0 출제경향 Section 7: 자바프로그램기초문법 (Fundamentals) ( 문제구성비율 : 15%) - 주어진코드예제에서 access modifier, package 선언, import 문의사용 - command-line argument 예에서예상되는런타임동작의판단 - reference 혹은 primitive 타입의값이메서드의인수로전달될때의값의변화 - 코드내에서 garbage collection 대상이되는지점알아내기, System.gc() - jar 파일의위치를 CLASSPATH 에지정하는방법 - assignment 연산자, arithmethic 연산자, relational 연산자, logical 연산자 12

1-3. J2SE 5.0 추가된기능들 13

Generics Generics 의특징 Generics 을사용하면타입안전성 (type safety) 을갖춘컬렉션을만들수있다. Generics 가도입되기전에는모든컬렉션에 Object 유형의객체들을넣을수있어어떤객체를넣든컴파일러에서체크하지않았음 Generics 가도입된이후에는 ArrayList<String> 에는 String 객체만넣을수있어서 Integer 객체가들어가면컴파일러에서체크해주므로실행도중이아닌컴파일시점에에러를체크할수있다. 기존의코드 (runtime 시점에에러가체크됨 ) List mylist = new ArrayList(10); mylist.add(new Integer(10)); mylist.add("hello, World"); Integer myint = (Integer)myList.iterator(). next(); generic 이적용된코드 (compile 시점에에러가체크됨 ) List<Integer> mylist = new ArrayList<Integer>(10) mylist.add(10); mylist.add("hello, World"); Integer myint = (Integer)myList.iterator().next(); 14

J2SE 5.0 추가된주요기능들 Generics 데이터타입의안전성 (compile-time type safety) 을제공하며, 캐스팅작업이필요없다. Enhanced for loops Iterator 를생성하거나카운터변수의시작과끝을계산할필요없이컬렉션을반복할수있게해준다. Autoboxing / Unboxing primitive data type 를 Wrapper data type 으로자동변환처리를해준다. Typesafe enums 클래스와같이정의 enum 은단순한정수의나열이아니라클래스도함께정의할수있다. Varargs C/C++ 에서처럼인수의개수가일정하지않는가변길이인수를지원한다. Static import static member 를포함하는타입으로부터의상속없이 static member 를 access 할수있다. Annotation(metadata) 툴을통해소스코드의주석으로부터반복사용코드를생성하게해주어코드작성의수고를덜어준다. 15

Generics Generics 의선언방법 E 가있는곳에는 ArrayList 를선언하고생성할때사용할실제타입이들어간다. public class ArrayList<E> extends AbstractList<E> { public boolean add(e o) E 가무엇이든간에그타입에의해서 ArrayList 에넣을수있는객체의타입이결정된다. 개 E 는 ArrayList 의인스턴스를만들때 < > 안에넣는타입 E 는 컬렉션에저장하고컬렉션에서리턴할원소의타입 (E 는 Element( 원소 )) new ArrayList<String>() 이면 E 는 String 이되며, < > 안의 String 은유형매 변수 (type parameter) 이다. add() 메소드는 add(string o) 가된다. String 타입을저장하는클래스 (ArrayList) 의인스턴스를만드는방법 List<String> strlist = new ArrayList<String>(); Generics 을인자로받아들이는메서드선언 ( 호출 ) 방법메서드선언 : void foo(list<string> list) 메서드호출 : x.foo(strlist) 16

Generics Generics 의유형매개변수 (Type Parameter) public <T extends Animal> void takething (ArrayList<T> list) public void takething ( ArrayList<Animal> list) 둘다문법적으로는올바른코드이지만, 위두코드는서로다른기능을한다. 첫번째코드의 <T extends Animal> 은 Animal 의하위클래스 (Dog, Cat) 타입으로구성된 ArrayList 라면무엇이든아규먼트로사용할수있다는뜻이다. ArrayList<Dog>, ArrayList<Cat>, ArrayList<Animal> 모두아규먼트로사용할수있다. 두번째코드는 ArrayList<Animal> 만아규먼트로사용할수있다. 17

Generics Generics 의 wildcard 을사용한 Type Parameter public <T extends Animal> void takething (ArrayList<T> list) public void takething ( ArrayList<? extends Animal> list 위의두코드는똑같은기능을한다. 두번째코드는 ArrayList<? extends Animal> 는 Animal 의하위타입으로구성된 ArrayList 을받아들일수있는메서드인자를만들면서 wildcard 를사용하였다. extends 키워드는유형에따라확장 (extends) 을뜻할수도있고, 구현 (implements) 를뜻할수도있다. extends 는오른쪽에있는것이클래스인지인터페이스인지는중요하지않으며무조건 extends 를사용한다. Pet 인터페이스를구현하는하위타입으로구성된 ArrayList 를인자로받아들일수있으려면 ArrayList<? extends Pet> 으로선언하면된다. 18

Generics Generics 의 Type Parameter 메소드에인자가두개있는데둘다 Animal 을확장하는타입으로구성된 ArrayList 인경우에는아래와같이 type parameter( 유형매개변수 ) 를한번만선언하는것이효율적이다. public <T extends Animal> void takething (ArrayList<T> one, ArrayList<T> two) 아래와같은식으로매번타이핑하는것보다는위에있는코드가훨씬더효율적이다. public void takething ( ArrayList<? extends Animal> one, ArrayList<? extends Animal> two) 19

Generics Generics 를사용한 sort() 메서드 컬렉션에저장된오브젝트를정렬하고싶다면 TreeSet 이나 java.util.collections.sort() 메서드를쓸수있다. sort() 메서드는 generics 를사용한다. sort() 메서드는 Comparable 객체로구성된목록만받아들일수있다. T 가반드시 Comparable 타입이어야한다는뜻. public static <T extends Comparable<? super T>> void sort (List<T> list) Comparable 을확장하는 타입으로구성된 List 나 ArrayList 을인자로전달할있다는뜻 Comparable 의 type parameter 가 T 또는 T 의상위타입이어야한다는뜻. 20

Generics Comparable 을구현한객체 ArrayList<Score> 을 sort() 메소드에전달하려면 Score 클래스에서 Comparable 을구현해야한다. Comparable 인터페이스를구현하는객체에서는 compareto() 메소드를구현해야하고, compareto() 메소드내에서정렬하는기준을설정해야합니다. 아래의예제는 Student 의 score 순서대로정렬한다. sort() 메소드호출의예 ArrayList<Student> list = new ArrayList<Student>(); scorelist.add(new Student( Ann,87)); scorelist.add(new Student( Dan,25)); scorelist.add(new Student( Eve,76)); Collections.sort(scoreList); Comparable 를구현한객체 public class Student implements Comparable<Student> { private String name; private int score; public Student(String _name, int _score) { name = _name; score = _score; public int compareto(student o){ return score ((Student)o).score; 21

Enhanced for loop 향상된루프구문의사용 향상된새로운 for 루프는컬렉션및배열에서반복적으로사용하기위한간단하면서도일관된구문을제공한다. 루핑전에엘리먼트의길이와증가치를지정할필요가없다. 기존의루프구문 int[] squares = {0,1,4,9,16,25; for (int i=0; i< squares.length; i++){ System.out.printf("%d squared is %d.\n",i, squares[i]); 향상된루프구문 int j = 0; int[] squares = {0,1,4,9,16,25; for (int i : squares) { System.out.printf("%d squared is %d.\n", j++, i); 22

Enhanced for loop 컬렉션을반복하는기존의루프구문 warning : unchecked call add(e) as a member of the raw type java.util.list 기존의루프구문 List squares = new ArrayList(); for (int i = 0; i < 6; i++){ squares.add(i * i); for (int i = 0; i < squares.size(); i++) { System.out.printf("%d squared is %d.\n", i, squares.get(i)); Iterator 를사용한기존의루프구문 List squares = new ArrayList(); for (int i = 0; i < 6; i++){ squares.add(i * i); Iterator iterator = squares.iterator(); int j=0; for (; iterator.hasnext();) { System.out.printf("%d squared is %d.\n", j++, iterator.next()); 컴파일시발생하는 warning 을해결하기제너릭을사용해야한다. 23

Enhanced for loop Generics 을사용하면서컬렉션을반복하는향상된루프구문 for (TechTip tip: RecentTips) "for each TechTip in RecentTips(RecentTips 안에각각의 TechTip)" 이라고읽는다. 콜렉션내의 TechTip 의현재인스턴스를가리키기위해 tip 변수가사용되었다. "for each" 단어때문에, 향상된생성문은 for-each 생성문으로도불린다. Iterator 를사용한향상된루프구문 List<Integer> squares = new ArrayList<Integer>(); Iterator iterator = squares.iterator(); for (int i = 0; i < 6; i++) { squares.add(i * i); int j=0; for (Integer( square : squares) { System.out.printf("%d squared is %d.\n", j++, square); 콜렉션의이름이 squares 이고, 현재참조된아이템이 Integer 타입이며, 변수 square 로참조되고있음을가리킨다 24

Autoboxing / Unboxing Autoboxing autoboxing 은 primitive type 을 wrapper class 로자동으로변환해주는기능이며, unboxing 은그반대과정을자동화하는것이다 J2SE 5.0 이전에는 primtive type 과래퍼클래스 (wrapper class) 간에형변환작업을반복해야했었다. autoboxing 을쓰지않는경우 (5.0 이전 ) ArrayList list = new ArrayList(); for(int i = 0; i < 10; i++){ list.add(new Integer(I)); Integer one = (Integer) list.get(0); int intone = one.intvalue(); autoboxing 을쓰는경우 (5.0 이후 ) ArrayList<Integer> list = new ArrayList<Integer>(); for(int i = 0; i < 10; i++){ list.add(i); int intone = list.get(0); int 는 ArrayList 에추가될때 Integer 로 boxing 되어진다. 25

Autoboxing / Unboxing Autoboxing 사용시주의사항 autoboxing 으로생성된오브젝트의동등성 (equality) 에대한테스트는오토박싱으로생성되지않은오브젝트에대한동등성테스트와는다르다 int i = 2; int j = 2; ArrayList <Integer> list = new ArrayList<Integer>(); list.add(i); list.add(j); System.out.printf("It is %b that i ==j.\n", (i==j)); //(1) primitive 값비교 ( //(2) 오토박싱 i 와 j 에의해생성된오브젝트가동일한지를비교 System.out.printf("It is %b that " + "list.get(0) == list.get(1).\n", list.get(0)==list.get(1)); //(3) 오토박싱 i 와 j 에의해생성된오브젝트의값을비교 System.out.printf("It is %b that " + "list.get(0).equals(list.get(1)).", list.get(0).equals(list.get(1))); 출력결과 It is true that i ==j. It is true that list.get(0) == list.get(1). It is true that list.get(0).equals(list.get(1)). 26

Autoboxing / Unboxing Autoboxing 사용시주의사항오토박싱은 [-128, 127] 범위에있는정수값의경우에만같은오브젝트의리턴을보장한다. 이제 i 와 j 의값을 2000 으로바꾸어보자. int i = 2000; int j = 2000; //... 출력결과 It is true that i ==j. It is false that list.get(0) == list.get(1). It is true that list.get(0).equals(list.get(1)). i i 와 j 와 j 가 2 가 2000 일경우에는하나의오브젝트가서로다른위치에서참조되어짐 인경우에는각기다른두개의오브젝트가참조된다. 오토박싱은 [-128, 127] 범위에있는정수값의경우에만같은오브젝트의리턴을보장하지만, 구현에따라그범위밖의임의의값을캐시할수도있다. 코드에서이캐시값에의존하는것은바람직하지않다. 27

Typesafe enums 기존의열거형 (enumerations) public interface Num { public static final int ZERO = 0; public static final int ONE = 1; public static final int TWO = 2; public interface Language { 타입에안전하지않은기존의열거형 Typesafe enums( 타입안전열거형 ) 은말그대로열거형타입을제공하는것이다. 기존의열거형은타입에안전하지않다. 즉, 상수를이용한열거형에서는상수값만같으면사실상열거타입의구분이의미가없어진다. public static final int JAVA = 0; public static final int CPP = 1; public static final int PERL = 2; // Num Interface 사용... int lan;... if( lan == Num.ZERO ){ // equals mean, lan == Language.JAVA... 위코드의비교문에는 Num.ZERO 가아닌 Language.JAVA 가와야의미상맞지만, 프로그램적으로는문제가없으며, 컴파일시에도역시에러가발생하지않는다. 28

Typesafe enums 타입에안전한새로운열거형 타입에안전한열거형 (enumerations) public enum Num { ZERO, ONE, TWO ; Num num = Num.ONE; if( num == Num.ONE) System.out.println("1"); switch( num ){ 타입에안전하지않은문제를해결하기위해서 J2SE 5.0 에서 enum 타입을제공한다. enum 을사용할때 if 나 switch 를써서분기작업을처리할수있다. enum 을비교할때 == 또는.equals() 메서드를모두쓸수있다. ( == 을더선호하는편 ) 열거타입그자체가타입이기때문에, 열거타입에없는값을할당하게되면컴파일에러가발생하게된다. case ZERO: System.out.println("0"); break; case ONE: System.out.println("1"); break; case TWO: System.out.println("2"); break; default: break; Case Three : System.out.println( 3 );break; 코드가추가되면열거타입에없는값이므로컴파일에러발생함 29

Typesafe enums enum 의활용 enum 에는생성자, 메서드, 변수도추가할수있다. public class TestEnum{ public enum Operation { PLUS { double eval(double x, double y) { return x + y;, MINUS { double eval(double x, double y) { return x - y;, TIMES { double eval(double x, double y) { return x * y;, DIVIDE { double eval(double x, double y) { return x / y; ; // Do arithmetic op represented by this constant abstract double eval(double x, double y); java TestEnum 3 2 실행결과 3.000000 PLUS 2.000000 = 5.000000 public static void main(string[] args) { 3.000000 MINUS 2.000000 = 1.000000 double x = Double.parseDouble(args[0]); 3.000000 TIMES 2.000000 = 6.000000 double y = Double.parseDouble(args[1]); 3.000000 DIVIDE 2.000000 = 1.500000 for (Operation op : Operation.values()) System.out.printf("%f %s %f = %f%n", x, op, y, op.eval(x, y)); 30

Varargs Varargs 의사용 5.0 이전에는 varargs( 가변인수 ) 가허용되지않기때문에해당메소드의인수를배열을받아서처리했었다. varargs( 가변인수 ) 는이런번거로움을없애기위해 C 의 printf 함수와같이가변인수를갖는메소드를구현할수있도록하였다. varargs( 가변인수 ) 를갖는메소드를작성할때는 를사용한다. public class VarGreeter2 { public static void printgreeting(string... names) { for (String n : names) { System.out.println("Hello " + n + ". "); public static void main(string[] args) { printgreeting(args); java VarGreeter2 Paul Sue 실행결과 Hello Paul Hello Sue 31

Varargs Varargs 의사용시주의사항 Varargs 를사용할때주의할점은엔트리의숫자를지정하는것이중요하거나 autoboxing 을피하고싶을때는 Varargs 를사용하는메소드를정의하지않아야한다. Varargs 를잘못사용한예 public class WhichOne { WhichOne(Integer... size) { System.out.println("Var Args version."); public static void main(string[] args) { new WhichOne(2, 3); new WhichOne(new Integer(2), new Integer (3)); java WhichOne 실행결과 Var Args version Var Args version. 아규먼트타입이맞는컨스트럭터가없으므로 varargs 버전은 new WhichOne(2,3) 와 new WhichOne(new Integer(2), new Integer(3)) 모두에의해호출된다. API 구축시클라이언트에게원하는메소드를호출하는방법을확실히하는것이중요하다. 즉 varargs 를메소드를오버로딩할때는사용하지않는것이좋다. 32

Static import Static import 의사용기본개념은 static class, static variable, enum 값을사용할때 static import 를활용해서타이핑을더적게해보자는것임. static import 를잘못사용하면코드의가독성이떨어질수도있으므로 static member 를아주많이쓰는경우에만 static import 를사용해야합니다. 기존코드 import java.lang.math; class NoStatic { { public static void main(string[] args) System.out.println( sqrt + Math.sqrt (3.0)); System.out.println( tan + Math.tan (60)); static import 를사용한코드 Import static java.lang.system.out; import static java.lang.math.*; class WithStatic { public static void main(string[] args) { out.println( sqrt + Math.sqrt(3.0)); out.println( tan + Math.tan(60)); 33

Annotation(metadata) Annotation( 주석 ) J2SE5.0 은 annotation 이라는새로운기능을통해보다다양한메타데이터장치를자바언어에추가했다. annotation 의표기법은 "at" 표시 (@) 를취한다. 그뒤에는어노테이션이름을붙인다. ( @Override ) BuiltIn( 내장된 ) annotation 1 Override annotation Override annotation 을추가하면실제로 override 가수행되지않는경우에는컴파일러가문제를표시해줍니다. 예를들어 @Override public int hashcode() {... hashcode 에서 "C" 를대문자로쓰지않은경우컴파일시에오류를표시해준다. 2 Deprecated annotation Deprecated annotation 을사용하여더이상사용되지말아야하는메소드에주석을단다. 3 SuppressWarning annotation 이주석은클래스또는메서드수준에서컴파일러 waring 표시를제거해준다. 예를들어 generics 때문에컴파일러는컬렉션이 type-safety 없이사용될때경고를던진다이런경우에 SupressWarnings annotation 을사용하면 warning 이없어진다. 34

StringBuilder StringBuilder J2SE5.0 은 java.lang.stringbuilder 클래스를추가했다. StringBuilder 는 StringBuffer 의 unsynchronized version 이다. StringBuffer 는 synchronized 처리가되어있어문자를연결 (concatenation) 시에 performance 가매우느리다. StringBuilder 는멀티스레딩환경에서안전하지는않지만, StringBuffer 에서비해서속도면에서현저히빠른 performance 를보장한다. 기존에 StringBuffer 를사용하던코드를변경없이그대로 StringBuilder 로대체할수있다. StringBuffer 의메소드 1 String append(string) : 문자열을합치는메소드 2 StringBuilder insert(int offset, any primitiver or char[]) : 문자열을추가메소드 3 StringBuilder replace(int start,int end,string s) : 일부 String 을객체로치환 35

Formatting 숫자 formatting J2SE5.0 은 java.util.formatter 클래스를통해강력하면서유연한포매팅기능을추가했다. Formatter 클래스는객체를생성하고 Formatter 클래스의메소드를호출하기도하지만 System.out.printf() 나 String 클래스의 format() 을주로사용한다. 포매팅지시사항포매팅대상인자 String s = String.format( %, d, 1000000000); %,d 는 쉼표를넣고 10 진정수로포매팅하라 라는뜻이다. 출력결과는 1000,000,000 첫번째인자의 %( 퍼센트 ) 기호는메소드의다른인자를나타내는변수이다. %d 는십진정수 format( %d, 42); 출력 42 %f 는부동소수점 format( %.3f, 42.000000); 출력 42.000 %.3f 는부동소수점을소수점아래세째자리까지출력되도록포매팅하라. format( I have %,.2f bugs to fix,476578.09876); 출력 I have 476,578.10 bugs to fix 36

SCJP 자격증관련 Site 와 J2SE5.0 관련 Site scjp5.0 objectives 와 study guide http://www.xyzws.com/scjp.do?cat=scjp javaranch.com 의 scjp 관련 QnA http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=forum&f=24 한국썬개발자네트워크 (J2SE 5.0 관련내용이소개되어있음 ) http://kr.sun.com/developers/j2se/techtip.html java.sun.com 의 JDK5.0 문서 http://java.sun.com/j2se/1.5.0/docs/index.html IBM developer site 의 SCJP5.0 관련내용 http://www-128.ibm.com/developerworks/java/library/jtiger09305.html krishna s blog (J2SE5.0 관련내용소개됨 ) http://ramya.bhaavana.net/krishna/?cat=5&paged=2 37