36
익익 익익 익익 - 이이이 이이 이이 . - 이이이이 이이이 이 이이 이이이이 이이이이이 이이이이이이 이이이이이 이이이 이 이이 . - UI 이이이 이이 이이이 이이이 이이이 이이이이 이이이 이이 . - 이이이 이이이이이 이이이이이 이이이 , 이이 이이이 이이이이이 이이 .

이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)

Embed Size (px)

Citation preview

Page 1: 이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)

익명 객체

정의

- 이름이 없는 객체 .

- 단독으로 생성할 수 없고 클래스를 상속하거나 인터페이스를 구현해야만 생성할 수 있다 .

- UI 이벤트 처리 객체나 스레드 객체를 간편하게 생성할 목적 .

- 필드의 초기값이나 로컬변수의 초기값 , 매개 변수의 매개값으로 대입 .

Page 2: 이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)

익명 자식 객체 생성

class Child extends Parent { } // 자식 클래스 생성

class A {Parent field = new Child();// 필드에 자식 객체를

대입void method() {

Parent localVar = new Child();} // 로컬 변수에 자식 객체를 대입

}

class A {Parent field = new Parent(){ int childField; void childMethod() {} @Override void parentMethod() {}};

}

자식클래스가 재사용되지 않고 , 해당 필드와 변수의 초기값으로만 사용할 경우 익명객체 생성해서 초기값으로 대입 .

Page 3: 이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)

기본 API 클래스

- Application Programming Interface 로 라이브러리라고도 부름 .

- http://docs.oracle.com/javase/8/docs/api/- java.lang & java.util 패키지- Object 클래스 (java.lang)- Objects 클래스 (java.util)- System 클래스 (java.lang)- Class 클래스 (java.lang)- String 클래스 (java.lang)- StringTokenizer 클래스 (java.util)- StringBuffer, StringBuilder 클래스(java.lang)- 정규 표현식과 Pattern 클래스 (java.util)- Arrays 클래스 (java.util)- Wrapper 클래스 (java.lang)- Math, Random 클래스 (java.lang & java.u-til)- Date, Calender 클래스 (java.util)- Format 클래스 (java.text)- java.time 패키지

Page 4: 이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)

java.lang 패키지

import 없이 사용 가능 .-> 자바 프로그램의 기본적인 클래스를 담고 있는 패키지 .

Page 5: 이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)

java.util 패키지

Page 6: 이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)

Object 클래스 (java.lang)

- 암시적으로 java.lang.Object 를 상속 .(extends 가 없으면 )- 자바의 모든 클래스는 Object 클래스의 자식이거나 자손 클래스이다 .- 자바의 최상위 부모 클래스 .

Page 7: 이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)

Object 클래스 (java.lang)

객체 비교 (equals())

public boolean equals(Object obj) { ... }

- 매개 타입은 Object 로 Object 가 최상위 타입이므로 모든 객체는 Object 타입으로 자동 타입 변환될 수 있기 때문이다 .- 두 객체가 동일한 객체라면 true 리턴하고 그렇지 않으면 false리턴Object obj1 = new Object();Object obj2 = new Object();boolean result = obj1.equals(obj2);//boolean result = (obj1 == obj2)

- 논리적으로 동등하다는 의미는 같은 객체이든 다른 객체이든 상관없이 객체가 저장하고 있는 데이터가 동일함을 뜻한다 .(String 클래스 )- 다르게 사용하고 싶다면 Object 의 equals() 를 오버라이딩해서 사용하면 된다 .

Page 8: 이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)

Object 클래스 (java.lang)

객체 해시코드 (hashCode())

- 객체를 식별할 하나의 정수값 .- 리턴값은 객체마다 다른 값을 가지고 있다 .

Page 9: 이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)

Object 클래스 (java.lang)

객체 문자 정보 (toString())

- 객체의 문자정보를 리턴 .(" 클래스명 @16 진수해시코드 ") e.g. java.lang.Object@de6ced- Object 의 toString() 의 리턴값은 자바 app 에서는 쓸모 없으므로 오버라이딩 ( 재정의 ) 해서 사용하도록 한다 .

Page 10: 이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)

Object 클래스 (java.lang)

객체 복제 (clone())얇은 복제

깊은 복제

- 단순히 필드값을 복제해서 객체를 복제하는 것 .- 참조 객체를 변경하면 원본 객체도 변경된 객체를 가지게 된다는 단점 .

- 참조하고 있는 객체도 복제하는 것 .

Page 11: 이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)

Object 클래스 (java.lang)

객체 소멸자 (finalize())

- 참조하지 않는 배열이나 객체는 Garbage Collection 이 힙 영역에서 자동적으로 소멸시키는데 이 때 사용하는 메소드 .- 만약 객체가 소멸되기 전에 마지막으로 사용했던 자원을 닫고 싶거나 저장하고 싶을 때에는 오버라이딩하면 된다 .

Page 12: 이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)

Objects 클래스 (java.util)

- 객체 비교 , 해시코드 생성 , null 여부 , 객체 문자열 리턴 등의 연산을 수행하는 정적 메소드들로 구성 .

Page 13: 이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)

Objects 클래스 (java.util)

- 두 객체를 비교자 (comparator) 로 비교해서 int 값을 리턴 . (a > b : 양수 , a < b : 음수 , a = b : 0)- 리턴값을 바꾸고 싶으면 Override.- Comparator 는 제네릭 인터페이스 타입으로 두 객체를 비교하는 compare(T a, T b) 메소드가 정의 .

객체 비교 (compare(T a, T b, Comparator<T> c))

동등 비교 (equals() & deepEquals())equals()- 두 객체를 동등 비교 .- a, b 둘다 null 일 경우 true 리턴 . null 이 아니면 a.equals(b) 리턴 .deepEquals()- a, b 가 서로 다른 배열일 경우 , 항목값이 전부 같다면 true.- Arrays.deepEquals() 와 동일 .

Page 14: 이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)

Objects 클래스 (java.util)

- Objects.hash(Object... values) 메소드는 파라미터로 주어진 값들을 이용해서 해시 코드를 생성하는 역할을 하는데 , 주어진 파라미터들로 배열을 생성하고 Arrays.hashCode(Object[]) 를 호출해서 해시코드를 얻고 이 값을 리턴합니다 . - 이 메소드는 클래스가 hashCode() 를 재정의할 때 리턴값을 생성하기 위해 사용하면 좋음 .

해시코드 생성 (hash(), hashCode())

널 여부 조사 (isNull(), nonNull(), requireNonNull())

객체 문자 정보 (toString())

- isNull(Object obj) 는 매개값이 null 일 경우 true 리턴 .- requireNonNull 은 not null 일 경우 첫 번째 매개값을 리턴 . null 일 경우 NullPointerException 발생 .

Page 15: 이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)

System 클래스 (java.lang)

- 자바 프로그램은 운영체제상에서 바로 실행되는 것이 아니라 JVM(Java Virtual Machine) 위에서 실행 .- 하지만 , java.lang.System 클래스를 사용하면 운영체제의 일부 기능을 이용할 수 있다 .

- JVM 강제 종료 .- 정상 종료일 경우 0 으로 지정 , 비정상 종료일 경우 다른 값 지정 .

프로그램 종료 (exit())

System.exit(0);

- 메모리를 JVM 가 알아서 자동으로 관리 . ( 메모리가 부족할 때와 CPU 가 한가 할 때 )- JVM 에게 가능한한 빨리 실행해 달라고 요청 .

쓰레기 수집기 실행 (gc())

System.gc();

Page 16: 이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)

System 클래스 (java.lang)

- 컴퓨터의 시계로부터 현재 시간을 읽어서 long 값을 리턴 .- 정상 종료일 경우 0 으로 지정 , 비정상 종료일 경우 다른 값 지정 .

현재 시각 읽기 (currentTimeMillis(), nanoTime())

long time = System.currentTimeMillis();// 밀리세컨드단위 리턴long time = System.nanoTime(); //나노세컨드단위 리턴

- JVM 이 시작할 때 자동 설정되는 시스템의 속성값을 리턴 . (JVM 버전 , 운영체제 종류 , 사용자 아이디 등 )

시스템 프로퍼티 읽기 (getProperty())

String value = System.getProperty(String key);

- 운영체제는 실행되는 프로그램들에게 유용한 정보를 제공할 목적으로 환경 변수를 제공 .- 운영체제에서 이름과 값으로 관리되는 문자열 정보 ( 프로그램 변수X)

환경 변수 읽기 (getenv())

String value = System.getenv(String name);

Page 17: 이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)

Class 클래스 (java.lang)- 클래스와 인터페이스의 메타 데이터를 java.lang.Class 클래스로 관리 . ( 클래스의 이름 , 생성자 정보 , 필드 정보 , 메소드 정보 )Class 객체 얻기 (getClass(), forName())

Class clazz = obj.getClass();

- Object 클래스에 있는 getClass() 이용 .- forName() 은 클래스 전체 이름을 매개값으로 받고 Class 객체를 리턴 .

리플렉션

Constructor[] constructors = clazz.getDeclasredConstructors();Field[] field = clazz.getDeclaredFields();Method[] methods = clazz.getDeclaredMethods();

- Class 객체를 이용하면 클래스의 생성자 , 필드 , 메소드 정보를 알아낼 수 있다 . ( 리플렉션 )

Page 18: 이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)

Class 클래스 (java.lang)

동적 객체 생성 (newInstance())

try { Class clasis = Class.forName(" 런타임 시 결정되는 클래스 이름 "); Object obj = new clasis.newInstance();} catch (ClassNotFoundException e) {} catch (InstantiationException e) {} catch (IllegalAccessException e) {}

- Class 객체를 이용하면 new 연산자를 사용하지 않고 동적으로 객체 생성 가능 .- 런타임 시에 클래스 이름이 결정되는 경우에 사용 .

Page 19: 이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)

String 클래스 (java.lang)

- 자바의 문자열은 java.lang.String 클래스의 인스턴스로 관리 .- 다양한 생성자를 이용해서 직접 String 객체를 생성할 수 있다 .

// 배열 전체를 String 객체로 생성String str = new String(byte[] bytes);// 배열을 지정한 문자셋으로 디코딩String str = new String(byte[] bytes, String charsetName);// 배열의 offset 인덱스 위치로부터 length 만큼 String 객체로 생성String str = new String(byte[] bytes, int offset, int length);// 지정한 문자셋으로 디코딩String str = new String(byte[] bytes, int offset, int length, String charsetName);

Page 20: 이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)

String 클래스 (java.lang)String 메소드 ( 중요 )

cf) toLowerCase() & toUpperCase() => 문자열을 모두 소문자로 바꾼 새로운 문자열을 생성한 후 리턴 . => 문자열을 모두 대문자로 바꾼 새로운 문자열을 생성한 후 리턴 .

Page 21: 이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)

StringTokenizer 클래스 (java.util)

- 문자열이 특정 구분자로 연결되어 있을 경우 구분자를 기준으로 분리

하기

위해서는 String.split() 나 java.util.StringTokenizer 클래스 이용 . (split() 는 정규표현식으로 구분 , StringTokenizer 클래스는 문자로

구분 )StringTokenizr st = new StringTokenizer(" 문자열 ", " 구분자 ");

Page 22: 이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)

StringBuffer, StringBuilder 클래스(java.lang)- 문자열을 저장하는 String 은 내부의 문자열을 수정할 수 없습니다 . 예를 들어 String 의 replace() 메소드는 내부의 문자를 대치하는 것이 아니라 , 대치된 새로운 문자열을 리턴 .- 문자열을 변경하는 작업이 많을 경우에는 String 클래스를 사용하는 것보다 java.lang 패키지의 StringBuffer 또는 StringBuilder 클래스를 사용하는 것이 좋다 .- 이 두 클래스는 내부 버퍼에 문자열을 저장해 두고 추가 , 수정 , 삭제 할 수 있도록 설계 .

Page 23: 이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)

정규표현식

- 문자열이 정해져 있는 형식으로 구성되어 있는지 검증해야 할 필요가 있을때 사용 .- 예를 들어 , 이메일 , 전화번호를 사용자가 제대로 입력했는지 확인해야 할 때 정규 표현식과 비교 .

Page 24: 이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)

Pattern 클래스 (java.util)

- 정규표현식으로 문자열을 검증할 때 사용 .- java.util.regex.Pattern 클래스의 정적 메소드인 matchs() 가 제공 .- boolean 값으로 리턴 .

boolean result = Pattern.matches(" 정규식 ", " 검증할 문자열 ");

Page 25: 이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)

Arrays 클래스 (java.util)

- 배열 조작 기능 .( 배열 복사 , 항목 정렬 , 항목 검색 )- 단순한 배열 복사는 System.arraycopy().

Page 26: 이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)

Wrapper 클래스 (java.lang)

- 기본 타입 (byte, char, short, int 등 ) 의 값을 갖는 객체를 생성 .- 포장하고 있는 기본타입의 값은 외부에서 변경할 수 없다 .- 바꾸고 싶으면 새로운 포장 객체 만들어야 함 .

- 박싱 : 기본 타입의 값을 포장 객체로 만드는 과정 .- 언박싱 : 포장 객체에서 기본 타입의 값을 얻어내는 과정 .

Integer obj = 100; // 자동 박싱

Integer obj = new Integer(200); int value1 = obj; // 자동 언박싱int value2 = obj + 100; // 자동 언박싱

Page 27: 이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)

Wrapper 클래스 (java.lang)

※ 문자열을 기본타입 값으로 변환 : int value1 = Integer.parseInt("50");

※ 포장 값 비교- == 와 != 사용 불가 .- Wrapper 클래스의 equals() 메소드 사용 .

Page 28: 이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)

Math 클래스 (java.lang)

- java.lang.Math

Page 29: 이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)

Random 클래스 (java.util)

- java.util.Random 클래스는 난수를 얻어내기 위해 사용 .- Math.random() 과는 달리 Random 클래스는 boolean, int, long, float, double 난수를 얻을 수 있다 .- 종자값 (seed 값을 같게 주면 같은 난수를 얻는다 .

Page 30: 이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)

Date 클래스 (java.util)

- 날짜를 표현하는 클래스 .- 객체 간에 날짜 정보를 주고 받을 때 주로 사용 .- Date() 생성자만 주로 사용 .

Date now = new Date();

- toString() 를 이용하여 현재 날짜를 문자열로 받을 수 있다 .

Page 31: 이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)

Calender 클래스 (java.util)

- 달력을 표현한 클래스 .- 추상클래스이므로 new 연산자를 사용해서 인스턴스를 생성할 수 없다 . ( 나라마다 날짜와 시간 계산 방법이 다르므로 )- get() 메소드를 이용해서 날짜와 시간에 대한 정보를 얻을 수 있다 .

Page 32: 이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)

Format 클래스 (java.text)

숫자 형식 클래스 (DecimalFormat)

- 형식클래스는 원하는 형식으로 변환 시켜주는 클래스 .

DecimalFormat df = new DecimalFormat("#,###.0");String result = df.format(1000000000.969);

Page 33: 이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)

Format 클래스 (java.text)

날짜 형식 클래스 (SimpleDateFormat)

SimpleDateFormat sdf = new SimpleDateFormat("yyyy 년 mm 월 dd 일 ");String strDate = sdf.format(new Date());

문자열 형식 클래스 (MessageFormat)

String text = " 회원 ID: {0} \n 이름 : {1} \n 회원 전화 : {2}";String result1 = MessageFormat.format(text, id, name, tel);

Page 34: 이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)

java.time 패키지

- 자바 8 버전에 생긴 패키지 .- 날짜와 시간을 나타내는 API.

Page 35: 이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)

java.time 패키지

날짜와 시간 정보 얻기

Page 36: 이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)

java.time 패키지

날짜와 시간 비교하기