Programming/JAVA (139) 썸네일형 리스트형 제네릭(3) - 제네릭 메서드 3 제네릭 메서드에 대한 예제를 계속해서 살펴보고 있습니다. 이번에는 멀티 파라미터 타입을 사용하는 경우의 제네릭 메서드 사용에 대해서 살펴보겠습니다. 우선, 멀티타입 파라미터를 사용하는 제네릭 타입(클래스) Pair를 선언합니다. public class Pair { private K key; private V value; // 생성자 public Pair(K key, V value) { this.key = key; this.value = value; } // Setter public void setKey(K key) { this.key = key; } public void setValue(V value) { this.value = value; } // Getter public K getKey() { ret.. 제네릭(3) - 제네릭 메서드 2 앞서서 제네릭 메서드 선언 방법에 대해서도 살펴보았습니다. 이제 이번 아티클에서는 본격적으로 제네릭 메서드를 선언하고, 실행 클래스에서 사용하는 방식에 대해서 예제를 실습해 보겠습니다. 우선 Box라는 클래스가 정의되었다고 가정합시다. 앞서 살펴본 패턴이기는 하지만, 다시 한번 잘 살펴보도록 합시다. getter와 setter를 가지고 있는 제네렉 타입(클래스)입니다. public class Box { private T t; public T get() { return t; } public void set(T t) { this.t = t; } } /* 다시 설명하자면, 위와 같은 제네릭 타입 클래스는 캐스팅 없이 사용할 수 있도록 일반적으로 Box box = new Box(); 형태로 선언해 사용한다. *.. 제네릭(3) - 제네릭 메서드 1 앞서 제네릭과 관련해서는 클래스의 선언, 그리고 해당 클래스의 인스턴스 생성 시점에 주로 사용되는 타입 파라미터 정의와 관련해서 제네릭 타입을 사용하는 유형을 중심으로 살펴보았습니다. 이번 아티클에서는, 메서드에서 타입 파라미터를 사용해 다양한 결과를 얻는 제네릭 메서드에 대해서 알아보도록 하겠습니다. · 제네릭 메서드는 파라미터 타입과 리턴 타입으로 타입 파라미터를 갖는 메서드를 의미합니다. · 제네릭 메서드를 선언하는 방법은 다음과 같습니다. - 메스드의 리턴타입 바로 앞에 를 추가하고 - 리턴타입과 파라미터 타입에 타입 파라미터를 사용합니다. // 제네릭 메서드 선언 유형 public 리턴타입 메서드명(파라미터,...) { ... } // 제네릭 메서드 예시 public Box boxing(T t).. 제네릭(2) - 멀티타입 파라미터 제네릭을 통해서 타입을 파라미터 형태로 선언하고, 상황에 맞게 지정할 수 있다는 점을 배웠습니다. 그런데 꼭 하나의 파라미터만 선언이 가능한 것일까요? 제네릭은 두 개 이상의 타입 파라미터를 선언해 사용이 가능합니다. 즉, 멀티타입 파라미터를 사용할 수 있다는 의미죠. 앞서 살펴본 제네릭 타입 클래스에서의 내용을 상기하며 다음 클래스 Product를 살펴보겠습니다. 타입 파라미터를 T와 M, 두 가지를 선언하고 T와 M에 대해 각각 필드, getter, setter를 선언했습니다. public class Product { private T kind; private M model; public T getKind() { return this.kind; } public M getModel() { return .. 제네릭(1) - 제네릭 타입 2 앞서 제네릭 타입에 대한 예제를 살펴보기 위해서, 비제네릭 방식으로 구현한 예제를 살펴보았습니다. 비교를 위해서 예제를 다시 한번 보도록 하겠습니다. 제네릭(1) - 제네릭 타입 1 우선은 기본적으로 '제네릭(Generic)' 타입이 무엇인지를 알고 넘어가야 합니다. 제네릭은 컬렉션부터 람다식, 스트림, NIO 등 자바의 intermediate 이상의 레벨에서 학습하는 내용에 빠지지 않고 등장 nozeroslope.tistory.com public class Box { private Object object; public void set(Object object) { this.object = object; } public Object get() { return object; } } public class.. 제네릭(1) - 제네릭 타입 1 우선은 기본적으로 '제네릭(Generic)' 타입이 무엇인지를 알고 넘어가야 합니다. 제네릭은 컬렉션부터 람다식, 스트림, NIO 등 자바의 intermediate 이상의 레벨에서 학습하는 내용에 빠지지 않고 등장하기 때문이죠. API 문서에서도 자주 사용하기 때문에 알아두지 못하면 JAVA를 공부하거나 개발 과정에서 꽤나 곤란한 상황을 겪게 됩니다. 기본적으로 제네릭(Generic)은, "타입"을 컨트롤하는 개념입니다. 그래서 제네릭을 사용하게 되면 다음 두 가지 장점을 갖게 됩니다. 첫 번째로 컴파일 과정에서 타입 체크를 강력하게 할 수 있다는 점입니다. 실행되고 에러가 발생하느니, 컴파일 레벨에서 미리 문제를 해결하는 게 낫다는 것이죠. 두 번째로는 불필요한 타입 변환(casting)을 제거할 수 .. 중첩 클래스&인터페이스(5) - 익명 객체 7 우리는 앞서 로컬 클래스에서의 사용 제한과 관련해, 로컬 클래스에서 메서드의 파라미터나 로컬 변수를 사용하는 경우의 제약 사항에 대해서 학습했습니다. 잘 기억이 나지 않는다면, 'final' 키워드가 힌트가 되겠습니다. 중첩 클래스&인터페이스(3) - 중첩 클래스의 접근 제한자 4 : 로컬 클래스 우선 앞의 아티클과 바로 이어지는 내용이니, 가능한 앞의 내용과 연속해서 확인해 보겠습니다. 우리는 특정 메서드 내부의 로컬 클래스가 선언되었을 때, 이 로컬 클래스가 바깥 메서드의 필드 nozeroslope.tistory.com 익명 객체에서도 마찬가지 입니다. 익명 객체 내부에서는 바깥 클래스의 필드 / 메서드를 제약 없이 사용이 가능합니다. 하지만, 익명 객체 내부에서 "메서드의 파라미터나 로컬 변수를" .. 중첩 클래스&인터페이스(5) - 익명 객체 6 다음 예제를 통해서는 UI 프로그래밍에서 흔히 사용하는 방식을 알아보겠습니다. 여기서도 역시 익명 객체를 활용하는 형태로 구현을 진행하게 됩니다. 예제에서는 버튼의 클릭 이벤트를 Setter를 통해 설정하고, 실행하는 과정을 다루어 보겠습니다. public class Button { OnClickListener listener; void setOnClickListener(OnClickListener listener) { this.listener = listener; } void touch() { listener.onClick(); } interface OnClickListener { void onClick(); } } Button 클래스입니다. 기본적으로 OnClickListener라는 중첩 인터페이스가.. 이전 1 ··· 8 9 10 11 12 13 14 ··· 18 다음