반응형
* 제네릭 문법
// # 제네릭의 타입 파라미터로 많이 사용하는 이름
// - 보통 긴 이름을 사용하지 않고 다음과 같이 한 개의 대문자로 된 이름을 많이 사용한다.
//
// T - Type이라는 의미를 표현할 수 있어 많이 사용하는 이름이다.
// E - Element라는 의미로 목록의 항목을 가리킬 때 사용한다.
// K - Key 객체를 가리킬 때 사용한다.
// N - Number의 의미로 숫자 타입을 가리킬 때 주로 사용한다.
// V - Value의 의미로 값의 타입을 가리킬 때 사용한다.
// S,U,V 등 - 한 번에 여러 타입을 가리킬 때 두 번째, 세 번째, 네 번째 이름으로 주로 사용한다.
//
// 그러나 이름을 짓는 것은 개발자 마음이다.
// 다만, 다른 개발자와의 원활한 소통을 위하여
// 가능한 위의 규칙에 따라 이름을 사용하기 바란다.
예제 )
// 파라미터 타입 - 레퍼런스와 인스턴스
package com.eomcs.generic.ex02;
public class Exam0110 {
static class Box<T> {
void set(T obj) {}
}
public static void main(String[] args) {
Box<String> box1 = new Box<>();
Box<Integer> box2 = new Box<>();
Box<Member> box3 = new Box<>();
// box1 = new Box<Object>(); //컴파일오류
// box2 = new Box<String>(); //컴파일오류
// box3 = new Box<Object>(); //컴파일오류
}
}
// 파라미터 타입 - 레퍼런스와 인스턴스 - 기본
package com.eomcs.generic.ex02;
public class Exam0111 {
static class A {
}
static class B1 extends A {
}
static class B2 extends A {
}
static class C extends B1 {
}
// /*
// * Object
// * |
// * A
// * / \
// * B1 B2
// * | \
// * C D
// */
static class Box<T> {
void set(T obj) {}
}
public static void main(String[] args) {
Box<B1> box1;
// <B1>을 담는 박스만 올 수 있다. 서브클래스도 못온다.
// box1 = new Box<A>(); //컴파일 오류!
// box1 = new Box<Object>(); //컴파일 오류!
box1 = new Box<B1>();
// box1 = new Box<C>(); //컴파일 오류!
}
}
// 파라미터 타입 - 레퍼런스와 인스턴스 - 상속 관계 : extends
package com.eomcs.generic.ex02;
public class Exam0112 {
static class A {
}
static class B1 extends A {
}
static class B2 extends A {
}
static class C extends B1 {
}
// /*
// * Object
// * |
// * A
// * / \
// * B1 B2
// * | \
// * C D
// */
static class Box<T> {
void set(T obj) {}
}
public static void main(String[] args) {
Box<? extends B1> box1;
// <B1>의 기능을 가진 박스라면 올 수 있다. <- B1이나 B1의 자식들 !
// box1 = new Box<A>(); //컴파일 오류!
// box1 = new Box<Object>(); //컴파일 오류!
box1 = new Box<B1>();
box1 = new Box<C>(); // <- B1의 자식인 C도 올 수 있는 것이다.
// box1 = new Box<C>(); //컴파일 오류!
}
}
// 파라미터 타입 - 레퍼런스와 인스턴스 - 상속 관계 : super
package com.eomcs.generic.ex02;
public class Exam0113 {
static class A {
}
static class B1 extends A {
}
static class B2 extends A {
}
static class C extends B1 {
}
// /*
// * Object
// * |
// * A
// * / \
// * B1 B2
// * | \
// * C D
// */
static class Box<T> {
void set(T obj) {}
}
public static void main(String[] args) {
Box<? super B1> box1;
// <B1>이 담겨있는 박스거나 B1의 수퍼클래스가 담겨있는 박스라면 올 수 있다. <- B1이나 B1의 자식들 !
box1 = new Box<Object>(); // B1의 수퍼클래스
box1 = new Box<A>(); // B1의 수퍼클래스
box1 = new Box<B1>(); // B1 자신 클래스
// box1 = new Box<C>(); //컴파일 오류! 자식클래스로서, 더 많은 기능이 담겨있어서 오류 !
}
}
* HashMap 문법
핵심은 직접 put을 하는 것이 아니라 값을 리턴해주는 함수를 입력하는 것.
예제 )
문법정리 후)
익명클래스 적용 후)
람다함수 적용 후)
* DBMS 사용하기
* JDBC Driver 사용법
반응형