예제코드에서 다운로드는 첫 페이지참조
각각의 실습코드는 SUB에 해당하는 폴더를 참조하세요.
※ 문법을 1, 2로 나눈 의미는 없습니다. oop개념이 없는 상태에서 예시를 들기 어려운 문법들을 따로 정리했을 뿐입니다.
제네릭a_Generic
함수에서의 제네릭A
<T> void print(T n) { ... }
클래스에서의 제네릭B
class Gen<T> { ... }
제네릭의 범위 한정C, D
- class G<T extends W1> { ... } W1을 상속받은 객체만 인정
class W1 { ... } class W2 extends W1 { ... } class W3 extends W2 { ... } class G{ // ? : 와일드카드 static void print(G> g) { ... } // W1을 상속받은 아무나 static void printSu(G super W2> g) { ... } // W2이상, W1, W2가능 static void printEx(G extends W2> g) { ... } // W2이하, W2, W3가능 }
함수의 간략화b_Lambda
람다식A
람다식은 함수명이 굳이 필요하지 않은 1회성 함수에 관하여 선언하지 않고 사용하는 문법() -> { ... }
(int x) -> { return x; }
레퍼런스B
::기호를 이용하여 함수(메서드)를 반환한다.interfase A { abstract void M(); }
class B { void N() { ... } }
A a = B::N;
A a = System.out::println;
a.print("test program");
예제C
아래 리스트에서, apple리스트, red리스트를 만들고 싶다.
List origin = Arrays.asList(
new Fruit("Apple", "Red"),
new Fruit("Orange", "Orange"),
new Fruit("banana", "yellow"),
new Fruit("Orange", "Orange"),
new Fruit("Strawberry", "Red"),
new Fruit("Apple", "Green"),
new Fruit("Apple", "White"),
new Fruit("Cherry", "Red"));
기존의 코드가 처리하던 방식은 이렇다.C1
- 과일명을 비교하는 함수를 만든다.
- 색깔을 비교하는 함수를 만든다.
static List extractName(List fruits, String fruitType) {
List resultList = new ArrayList<>();
for (Fruit fruit : fruits) {
if (fruit.getName() == fruitType) {
resultList.add(fruit);
}
}
return resultList;
}
static List extractColor(List fruits, String color) {
List resultList = new ArrayList<>();
for (Fruit fruit : fruits) {
if (fruit.getColor() == color) {
resultList.add(fruit);
}
}
return resultList;
}
변경된 사항은 다음과 같다.C2
- ??를 비교하는 함수를 만든다. ??을 전달한다.
List apple = extract(origin, (f) -> (f.getName() == "Apple"));
List red = extract(origin, (f) -> (f.getColor() == "Red"));
어노테이션c_Annotation
어노테이션은 코드의 부가정보를 기술하는 문법으로 @ 뒤에 예약어를 작성합니다. Java에서 지원하는 대부분의 어노테이션은 주석으로써의 의미가 강하지만, 크로스 플랫폼에서 외부에서 코드를 분석하게 하는 요소로도 사용됩니다.- Deprecated: 지원 종료 예정
- Override: 오버라이드 됨
- SuppressWarnings: 디버거에서 경고출력을 지움