result of counting after filtering : 2 ----------------------------- pyo@gmail.com sue@gmail.com aron@gmail.com ballack@gmail.com pyo@gmail.com ----------------------------- aron ballack pyo pyo sue ----------------------------- pyo sue ----------------------------- pyo sue aron ballack -----------------------------
Error: An Error indicates serious problem that a reasonable application should not try to catch.
> 애플리케이션이 잡지 말아야 할 심각한 에러(핸들링이 어려운 에러)
Exception: Exception indicates conditions that a reasonable application might try to catch.
> 애플리케이션이 잡을 수 있는 에러(핸들링이 할 수 있는 에러)
[ ClassNotFoundError vs NoDefClassFoundError ]
ClassNotFoundExceptionis an exception that occurs when you try to load a class at run time usingClass.forName()orloadClass()methods and mentioned classes are not found in the classpath.
> 런타임에 Class.forName() 혹은 loadClass() 메소드를 사용했고 refrection에 사용된 class가 classpath에 없는 경우 발생
NoClassDefFoundErroris an error that occurs when a particular class is present at compile time, but was missing at run time.
Checked Exception : Java forces you to handle these error scenarios in some manner in your application code.
> java 가 핸들링을 강요하는 exception (ex: sqlException, IOException)
Unchecked Exception : A method is not forced by compiler to declare the unchecked exceptions thrown by its implementation. Generally, such methods almost always do not declare them, as well.
Spring Transaction only supervise Unchecked Exceptions.
> 핸들링을 강요하지 않는 exception (ex: NullPointerException)
name = privateMethod class = class Java.reflection.ExampleClass param type : class java.lang.Object param type : int exception type : class java.lang.NullPointerException return type : int
name = addStrInt class = class Java.reflection.ExampleClass param type : class java.lang.String param type : int return type : class java.lang.String
name : Java.reflection.ExampleClass class : class Java.reflection.ExampleClass
name : Java.reflection.ExampleClass class : class Java.reflection.ExampleClass param type : class java.lang.Object exception type : class java.lang.NullPointerException
name : CONSTANT_FIELD class : class Java.reflection.ExampleClass type : class java.lang.String modifiers int : 26 modifiers toString : private static final isPublic? : false
name : i class : class Java.reflection.ExampleClass type : int modifiers int : 1 modifiers toString : public isPublic? : true
생략..
5. 메소드 실행시키기 (invoke)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package Java.reflection;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
//https://kaspyx.tistory.com/80
//5. 메소드 실행시키기 invoke
publicclass Reflection5_invoke_1 {
public Reflection5_invoke_1() {}
public Reflection5_invoke_1(String a) {}
public Reflection5_invoke_1(String a, Object b) {}
제네릭은 다양한 타입의 객체를 다루는 메소드 및 컬렉션 클래스를 컴파일 시, 타입 체크를 해주는 기능을 한다.
객체 타입을 컴파일 시에 체크하기 때문에 객체의 타입 안정성을 높이고 형변환의 번거로움을 줄인다.
※ ArrayList 같은 컬렉션 클래스는 다양한 종류의 객체를 담을 수 있지만, 보통 아래와 같이 한 종류의 객체를 담는 경우가 더 많다. 또한 꺼낼 때 마다 타입체크를 하고 형변환 하는 것은 아무래도 불편할 수 밖에 없는데, 제네릭이 이와 같은 불편함 들을 해소해준다.
List<Person> list = new ArrayList<>(); list.add(new Person("영심이")); list.add(new Person("홍길동")); list.get(0);
1. 제네릭 타입
타입을 파라미터(<T>)로 가지는 클래스 혹은 인터페이스
타입 파라미터(<T>) 를 클래스 혹은 인터페이스 명 뒤에 두어 선언
public class Sample<T>{} public interface Sample<T>{}