분류 전체보기 (55) 썸네일형 리스트형 13장 제네릭(Generic)(8)_확인문제 문제4. Util.getValue( ) 메소드는 첫 번째 매개값으로 pair타입과 하위 타입만 받고, 두 번째 매개값으로 키 값을 받는다.리턴값은 키값이 일치할 경우 Pair에 저장된 값을 리턴하고, 일치하지 않으면 null을 리턴하도록 getValue()제네릭 메소드를 정의하라 실행클래스 (UtilExample)public class UtilExample { public static void main(String[] args) {Pair pair = new Pair("홍길동",35);Integer age = Util.getValue(pair, "홍길동");System.out.println(age);ChildPair childpair = new ChildPair("홍삼원",20);Integer child.. 13장 제네릭(Generic)(7)_정리 제네릭이란?타입을 파라미터화해서 컴파일시 구체적인 타입이 결정되도록 하는 것컬렉션, 람다식, 스트림에서 사용 제네릭을 사용하는 이유?1. 컴파일 시 강한 체크 타입하여 에러를 사전에 방지 -> 실행 시 타입에러 나는 것을 방지해준다 2. 타입 변환을 제거-> 빈번한 타입 변환은 애플리케이션 성능 저하로 이루어짐 제네릭 타입이란?타입을 파라미터로 가지는 클래스, 인터페이스 말한다.public class Box { ... } 사용할 때에는Box box = new Box( ); *Box box = new Box();와 같이 T자리에 구체적인 타입 지정해주지 않으면 Object가 들어간다. 제네릭 타입 선언 시 두 개이상 타입 파라미터를 사용할 수 있다 ---> 멀티 타입 파라미터public class Box .. 13장 제네릭(Generic)(6)_제네릭 타입의 상속과 구현 제네릭 타입의 부모클래스를 상속할 경우 자식 클래스 또한 제네릭 타입이어야 한다.부모클래스에 기술된 타입 파라미터는 자식클래스에도 기술해야 한다.public class ChildProduct extends Product { ... }또한 자식 클래스는 추가적인 타입 파라미터를 가질 수 있다.public class ChildProduct extends Product { ... } 제네릭 타입 인터페이스를 구현하는 구현객체일 경우 구현클래스도 제네릭 타입이어야 한다.인터페이스에 기술된 타입파라미터가 구현클래스에도 기술되어야 한다.public class StorageImpl implements Storage { ... } 즉, 제네릭 타입의 클래스를 상속하려면 자식 클래스도 제네릭 , 타입 파라미터도 그대로 .. 13장 제네릭(Generic)(5)_와일드 카드 타입 API Document의 매개변수나 리턴타입에서 자주 볼 수 있는 와일드 카드 타입에 대해서 알아본다. 와일드카드(?)타입?- 이미 선언되어 있는 제네릭 타입을 매개변수나 리턴타입으로 사용할 때, 타입 파라미터를 제한할 목적으로 사용한다.** 은 제네릭 타입을 선언할 때 타입 파라미터를 제한하기 위해 쓴다.- 와일드카드 타입의 세가지 형태1. 제네릭타입 : Unbounded Wildcards (제한없음)2. 제네릭타입 course) {System.out.println(course.getName()+ " 수강생: "+ Arrays.toString(course.getStudents()));}public static void registerCourseStudent(Course 13장 제네릭(Generic)(4)_제한된 타입 파라미터 타입 파라미터에 지정되는 구체적인 타입을 상속 및 구현 관계를 이용해서 제한할 수 있다.Public 리턴타입 메소드(매개변수1,매개변수2, ...) { ... } --> 상위 타입은 클래스 뿐만 아니라 인터페이스도 가능하다.*인터페이스라고해서 extends 대신 implements를 사용하지 않는다. *여기서 extends는 상속의 개념이 아니라 종류라는 의미라고 생각할 것 - 타입 파라미터를 대체할 구체적인 타입--> 상위타입이거나 하위 또는 구현 클래스만 지정할 수 있다.* 즉, 상위타입에 클래스가 왔다면 자식클래스, 상위타입에 인터페이스가 왔다면 구현클래스가 타입파라미터가 될 수 있다. - 주의할 점--> 메소드의 중괄호 { } 안에서 타입 파라미터 변수로 사용 가능한 것은 상위 타입의 멤버(필드,.. 13장 제네릭(Generic) (3)_제네릭 메소드 제네릭은 타입을 선언할 때 뿐만 아니라 메소드를 선언할 때에도 제네릭을 사용할 수 있다. 제네릭 메소드?- 매개변수 타입과 리턴 타입으로 타입 파라미터를 갖는 메소드를 말한다.- 제네릭 메소드 선언 방법- 리턴타입 앞에 기호를 추가하고 타입 파라미터를 기술한다.- 타입 파라미터를 리턴타입과 매개변수에 사용한다.public 리턴타입 메소드명(매개변수,...) { ... }public Box boxing(T t) { .... } 예제1 >>제네릭 타입으로 선언된 Box클래스public class Box {private T t; public T getT() {return t;}public void setT(T t) {this.t = t;}} 제네릭 메소드를 가지는 Util 클래스public class .. 13장 제네릭(Generic) (2)_멀티 타입 파라미터 제네릭 타입을 선언을 할 때 두 개 이상의 타입 파라미터를 사용해서 선언할 수 있다.class { ... }interface { ... } Product클래스를 제네릭 타입으로 선언한다면 다음과 같이 쓸 수 있다.public class Product { private T kind; private M model; public T getKind() { return kind; } public void setKind(T kind) { this.kind = kind; } public M getModel() { return model; } public void setModel(M model) { this.model = model; } } 메인클래스에서 Product클래스의 객체를 생성해서 사용한다면Product p.. 13장 제네릭(Generic) 제네릭이란? -> 타입을 파라미터화해서 컴파일시 구체적인 타입이 결정되도록 하는 것-컬렉션, 람다식(함수적 인터페이스), 스트림, NIO에서 널리 사용된다. 제네릭을 사용하므로서 얻는 이점1. 컴파일시 강한 타입 체크를 할 수 있다.-컴파일시에 미리 타입을 강하게 체크해서 에러를 사전에 방지한다. 따라서 실행 시 타입에러가 나는 것을 방지해준다.*컴파일러가 미리 오류를 체크함으로서 실행 시의 버그를 줄일 수 있음2. 타입 변환을 제거할 수 있다.-타입 변환이 생기면 생길수록 전체 애플리케이션 실행 성능에는 좋지 않다. 따라서 타입변환을 적게 발생시키는 것이 좋다.-다음과 같이 제네릭을 사용하면 타입변환을 제거할 수 있다. 제네릭 사용 전 제네릭 사용 후 List list = new ArrayList();.. 12장 스레드풀(4) 작업 완료순으로 통보 받기-작업 요청 순서대로 작업 처리가 완료되는 것은 아니다.-작업의 양과 스레드 스케쥴링에 따라서 먼저 요청한 작업이 나중에 완료되는 경우도 발생한다.-여러 개의 작업들이 순차적으로 처리될 필요성이 없고, 처리 결과도 순차적으로 이용할 필요가 없다면 --> 작업 처리가 완료된 것부터 결과를 얻어 이용하는 것이 좋다.-스레드 풀에서 작업 처리가 완료된 것만 통보 받는 방법-CompletionService는 처리 완료된 작업을 가져오는 poll()과 take()메소드를 제공한다.리턴타입 메소드명(매개변수) 설명 Future poll() 완료된 작업의 Future를 가져옴. 완료된 작업이 없다면 즉시 null을 리턴함 Future poll( long timeout, TimeUnit uni.. 12장 스레드풀(3) 리턴값이 있는 작업 완료 통보 Callable task = new Callable() {@Overridepublic T call() throws Exception {//스레드가 처리할 작업 내용return T;}};Future future = executorService.submit(task)try {T result = future.get();} catch (InterruptedException e) {//작업 처리 도중 스레드가 interrupt될 경우 실행할 코드} catch(ExecutionException e) {//작업 처리 도중 예외가 발생된 경우 실행할 코드} 1) 리턴값이 있는 작업을 정의할 때는 Callable 객체를 사용한다. 에는 리턴값의 타입을 선언해 놓는다.2) Callable이 .. 이전 1 2 3 4 5 6 다음