이것이 자바다 익명 객체 + Chap.11 기본 API 클래스(java) 발표용 PPT.
간단하게 정리한 것.
이것이 자바다 책을 기반으로 작성한 강의용 PPT입니다.
부족한 게 많으니 쓰실 때에는 추가하셔서 쓰세요~
참고 자료 : 이것이 자바다
사진 첨부 : http://palpit.tistory.com/
1. 익명 객체
정의
- 이름이 없는 객체.
- 단독으로 생성할 수 없고 클래스를 상속하거나 인터페이스를 구현해
야만 생성할 수 있다.
- UI 이벤트 처리 객체나 스레드 객체를 간편하게 생성할 목적.
- 필드의 초기값이나 로컬변수의 초기값, 매개 변수의 매개값으로 대입.
2. 익명 자식 객체 생성
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() {}
};
}
자식클래스가 재사용되지 않고, 해당 필드와 변수의 초기값으로만
사용할 경우 익명객체 생성해서 초기값으로 대입.
3. 기본 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.util)
- Date, Calender 클래스(java.util)
- Format 클래스(java.text)
- java.time 패키지
6. Object 클래스(java.lang)
- 암시적으로 java.lang.Object를 상속.(extends가 없으면)
- 자바의 모든 클래스는 Object 클래스의 자식이거나 자손 클래스이다.
- 자바의 최상위 부모 클래스.
7. 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()를 오버라이딩해서 사용하
면 된다.
9. Object 클래스(java.lang)
객체 문자 정보(toString())
- 객체의 문자정보를 리턴.("클래스명@16진수해시코드")
e.g. java.lang.Object@de6ced
- Object의 toString()의 리턴값은 자바 app에서는 쓸모 없으므로
오버라이딩(재정의)해서 사용하도록 한다.
11. Object 클래스(java.lang)
객체 소멸자(finalize())
- 참조하지 않는 배열이나 객체는 Garbage Collection이 힙 영역에서
자동적으로 소멸시키는데 이 때 사용하는 메소드.
- 만약 객체가 소멸되기 전에 마지막으로 사용했던 자원을 닫고 싶거
나 저장하고 싶을 때에는 오버라이딩하면 된다.
13. 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()와 동일.
14. 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 발생.
15. System 클래스(java.lang)
- 자바 프로그램은 운영체제상에서 바로 실행되는 것이 아니라
JVM(Java Virtual Machine)위에서 실행.
- 하지만, java.lang.System 클래스를 사용하면 운영체제의 일
부 기능을 이용할 수 있다.
- JVM 강제 종료.
- 정상 종료일 경우 0으로 지정, 비정상 종료일 경우 다른 값 지정.
프로그램 종료(exit())
System.exit(0);
- 메모리를 JVM가 알아서 자동으로 관리.
(메모리가 부족할 때와 CPU가 한가 할 때)
- JVM에게 가능한한 빨리 실행해 달라고 요청.
쓰레기 수집기 실행(gc())
System.gc();
16. 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);
17. 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 객체를 이용하면 클래스의 생성자, 필드, 메소드 정보를 알아낼 수 있
다.
(리플렉션)
18. 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 연산자를 사용하지 않고 동적으로 객체 생성 가능.
- 런타임 시에 클래스 이름이 결정되는 경우에 사용.
19. 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);
21. StringTokenizer 클래스(java.util)
- 문자열이 특정 구분자로 연결되어 있을 경우 구분자를 기준으로 분리 하
기
위해서는 String.split()나 java.util.StringTokenizer 클래스 이용.
(split()는 정규표현식으로 구분, StringTokenizer클래스는 문자로 구분)
StringTokenizr st = new StringTokenizer("문자열", "구분자");
22. StringBuffer, StringBuilder 클래스(java.lang)
- 문자열을 저장하는 String은 내부의 문자열을 수정할 수 없습니다.
예를 들어 String의 replace() 메소드는 내부의 문자를 대치하는 것이 아니라,
대치된 새로운 문자열을 리턴.
- 문자열을 변경하는 작업이 많을 경우에는 String 클래스를 사용하는 것보다
java.lang 패키지의 StringBuffer 또는 StringBuilder 클래스를 사용하는
것이 좋다.
- 이 두 클래스는 내부 버퍼에 문자열을 저장해 두고 추가, 수정, 삭제 할 수
있도록 설계.
23. 정규표현식
- 문자열이 정해져 있는 형식으로 구성되어 있는지 검증해야 할 필요가 있을
때 사용.
- 예를 들어, 이메일, 전화번호를 사용자가 제대로 입력했는지 확인해야 할 때
정규 표현식과 비교.
24. Pattern 클래스(java.util)
- 정규표현식으로 문자열을 검증할 때 사용.
- java.util.regex.Pattern 클래스의 정적 메소드인 matchs()가 제공.
- boolean값으로 리턴.
boolean result = Pattern.matches("정규식", "검증할 문자열");
26. Wrapper 클래스(java.lang)
- 기본 타입(byte, char, short, int 등)의 값을 갖는 객체를 생성.
- 포장하고 있는 기본타입의 값은 외부에서 변경할 수 없다.
- 바꾸고 싶으면 새로운 포장 객체 만들어야 함.
- 박싱 : 기본 타입의 값을 포장 객체로 만드는 과정.
- 언박싱 : 포장 객체에서 기본 타입의 값을 얻어내는 과정.
Integer obj = 100; // 자동 박싱
Integer obj = new Integer(200);
int value1 = obj; // 자동 언박싱
int value2 = obj + 100; // 자동 언박싱
27. Wrapper 클래스(java.lang)
※ 문자열을 기본타입 값으로 변환
: int value1 = Integer.parseInt("50");
※포장 값 비교
- == 와 != 사용 불가.
- Wrapper 클래스의 equals() 메소드 사용.
29. Random 클래스(java.util)
- java.util.Random 클래스는 난수를 얻어내기 위해 사용.
- Math.random()과는 달리 Random 클래스는 boolean, int, long,
float, double 난수를 얻을 수 있다.
- 종자값(seed값을 같게 주면 같은 난수를 얻는다.
30. Date 클래스(java.util)
- 날짜를 표현하는 클래스.
- 객체 간에 날짜 정보를 주고 받을 때 주로 사용.
- Date() 생성자만 주로 사용.
Date now = new Date();
- toString()를 이용하여 현재 날짜를 문자열로 받을 수 있다.
31. Calender 클래스(java.util)
- 달력을 표현한 클래스.
- 추상클래스이므로 new 연산자를 사용해서 인스턴스를 생성할 수 없다.
(나라마다 날짜와 시간 계산 방법이 다르므로)
- get() 메소드를 이용해서 날짜와 시간에 대한 정보를 얻을 수 있다.
32. Format 클래스(java.text)
숫자 형식 클래스(DecimalFormat)
- 형식클래스는 원하는 형식으로 변환 시켜주는 클래스.
DecimalFormat df = new DecimalFormat("#,###.0");
String result = df.format(1000000000.969);
33. 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);