Comparable 인터페이스를 이용한 기본정렬에 대한 것은 이전 포스팅을 참고 ☞ List 정렬하기 - 1. Comparable 인터페이스 Comparable vs Comparator 클래스 개발자가 Comparable 인터페이스를 구현해서 정해둔 기본 정렬 이외에 다른 방식으로, 정렬하고 싶은 경우에는 이름 비슷한 Comparator인터페이스를 이용해야 한다. 기본 정렬 이외에 방식이라는 것은 다른 필드값을 기준으로 정렬하고 싶은 경우나, 정렬방식을 변경하고 싶은 경우를 말한다. 아래 예제를 살펴보자 class BookNameComparator implements Comparator { @Override public int compare(Book o1, Book o2) { return o1.getNa..
컬렉션 프레임워크(Collections Framework)에서 List는 '순서'를 기억하고 중요시하는 자료구조다. List의 담겨있는 객체의 특정 필드값을 기준으로 순서를 정렬하고 싶다면 Comparable 인터페이스와 Collections.sort()메소드를 사용한다. 아래 간단한 예제를 보자. public class Book implements Comparable { private String name; private int price; public Book(String name, int price) { this.name = name; this.price = price; } public String getName() { return name; } public int getPrice() { retur..
제네릭스의 와일드카드 "?"에 대한 내용은 이전 포스팅을 참고 ☞ 제네릭스(Generics) - 3. 와일드 카드 제네릭 메소드 제네릭은 클래스에만 국한된 것은 아니다. 메소드 선언부에 제네릭 타입이 선언할 수있으며, 이러한 메서드를 제네릭 메서드라 한다. 제네릭 타입의 선언 위치는 반환 타입 바로 앞이다 static void myMetod(List list){ . . . } 제네릭 메소드 주의사항 제네릭 클래스에 정의된 타입 변수와 제네릭 메서드에 정의된 타입 변수는 별개의 것이다. 마치 지역 변수를 선언한 것과 같다고 생각하자. - 자바의정석 3판 695쪽 class Myclass { .... static void myMetod(List list){ // 제네릭 클래스의 선언된 T와 메소드의 선언된 ..
제네릭 클래스 선언 방법에 대해 알고 싶다면 이전 포스팅을 참고 ☞ 제네릭스(Generics) - 2. 제네릭 클래스 선언하기 와일드 카드 와일드카드란, 제네릭 클래스의 객체를 메소드의 매개변수로 받을 때, 그 객체의 타입 변수를 제한하는 것을 말한다. 역시나 정의로는 이해가 어렵다. 아래 설명된 예제를 보자. 참고로 와일드 카드를 생각할때는 제네릭 클래스 타입과 '관점'에 대한 분리가 되어야한다. '제한된 제네릭 클래스'는 제네릭 클래스를 선언하는 개발자의 관점에서 객체 생성시 사용 될 객체를 제한하는 것이고, 와일드카드는 메소드를 만드는 개발자의 관점에서 메소드에 사용 될 매개변수가 제네릭 클래스를 구현한 객체일때, 그 제네릭 클래스 '타입 변수'를 제한 하는 것이다. (여기서 말하는 메소드는 '제네..
제네릭스의 기본적 정의와 사용 이유, 방법에 대해서는 이전 포스팅을 참고 ☞ 제네릭스(Generics) - 1. 제네릭스 사용 방법제네릭 클래스 다시 제네릭스의 정의에 대해서 생각해보자, 제네릭스가 '타입 체크'를 위한 기능이라는 것은, 결국 그 클래스가 다양한 타입의 객체를 사용할 수 있다는 것이다. 예제로 들었던, ArrayList에 클래스 선언문을 한번 보자. public class ArrayList{ (중략) public ListIterator listIterator(int index) { (중략) public E next() { . . ArrayList의 클래스 선언문을 보면 제일 상단 클래스 이름 오른쪽에 로 명시되어 있고, 클래스 내부에서 E를 사용하고 있는 것을 알 수 있다. E라는 것은 ..
제네릭스란? 제네릭(generic)의 사전적 의미는 아래와 같다. 3가지 의미 중 '포괄적인', '총칭적인'이라는 뜻에 java제네릭스에 대한 힌트가 있다. generic1.일반적인 2.포괄적인 3.총칭적인Java에서 제네릭스는 다양한 타입의 객체들을 다루는 메서드나 클래스에 컴파일 시의 타입체크를 해주는 기능이다. 정의만 본다면 무슨 말인지 알 수 없다. 아래 예제를 보자. 제네릭스는 언제 사용할까? 제네릭스를 처음 접한다면, 제네릭 클래스의 선언문을 보기보다는, 먼저 제네릭 클래스의 객체를 만들고 사용하는 사용자 입장에서 되어보는게 바람직 할 것 같다. 제네릭스를 빈번하게 쓰는 컬렉션 프레임워크의 ArrayList를 예제로 설명하겠다. ArrayList list = new ArrayList(); 위와..
오버로딩이란? 같은 이름의 메소드를, 다른 매개변수를 받아 동작하도록 재정의 하는 것이다. 예를들어, 아래와 같은 2개의 정수를 받아 합계를 반환하는 sum이라는 함수가 있다고 가정 해보자 public int sum(int a, int b){ return a+b; }그리고 sum과 같은 이름의 메소드를, 다른 매개변수 실수 2개를 받아 동작하도록 재정의 하면, public double sum(double a, double b){ return a+b; } 같은 이름의 메소드가 중복되어 존재할 수 있다. 언제사용할까? 간단히 오버로딩이 불가능 하다고 생각해보자. 위의 예제 sum 함수는 매개변수의 타입 혹은 매개변수의 갯수에 따라서 다른 이름의 메소드들이 존재해야 할 것이다. public int sumInt..
오버라이딩이란? 조상(부모) 클래스를 상속받은 자식 클래스를 작성할 때, 상속받은 메소드의 기능을 재정의 하는 것이다. 언제 사용할까? 상속받은 메소드 중 자식 클래스에서 사용할 수 없는 경우나, 자식 클래스를 만드는 개발자의 입장에서 메소드의 기능을 재정의를 하고 싶을 때 사용한다. (모든 클래스를 한명의 개발자가 만드는 것이 아님을 항상 염두하자) 오버라이딩 선언 조건 상속받은 메소드와 오버라이딩한 메소드의 이름이 같아야 한다.상속받은 메소드와 오버라이딩한 메소드의 매개변수가 같아야 한다. (매개변수의 타입, 갯수)상속받은 메소드와 오버라이딩한 메소드의 리턴타입이 같아야 한다. 오버라이딩시 주의사항오버라이딩 된 경우, 부모클래스의 메소드는 무시되고 자식클래스의 오버라이딩 된 메소드가 호출된다.자식 클..