본문 바로가기

반응형

자바 (Java)

Chpt 12. 지네릭스, 열거형, 애너테이션 - 주제 4. 애너테이션 1. 애너테이션 애너테이션은 다른 프로그램에게 유용한 정보를 전달하는 역할을 한다. 애너테이션 그리고 소스코드의 주석은 다음과 같은 비슷한 특징을 갖는다. 기능 도움을 제공하는 프로그램 @ 소스 코드 + 설정 파일 (XML) 컴파일러, JUnit 테스트 프로그램, 그 외 /** ~ */ 소스 코드 + 소스 코드 설명 문서 (HTML) javadoc.exe 1) 표준 애너테이션 : 기본적으로 제공하는 애너테이션 애너테이션 알려주는 대상 특징 @Override 컴파일러 오버라이딩 하는 메서드에 붙인다. @Deprecated 앞으로 사용하지 않을 것을 권장하는 메서드에 붙인다. @FunctionalInterface 컴파일러 함수형 인터페이스에 붙인다. @SuppressWarnings 컴파일러 경고 메시지를 나.. 더보기
Chpt 12. 지네릭스, 열거형, 애너테이션 - 주제 3. 열거형 1. 열거형의 도입 열거형은 다음과 같은 이유에 의해 생겨났다. (1) 서로 관련된 다수의 상수를 묶기 위함. (2) 값과 타입 둘 다 체크하기 위함. class Card { static final int CLOVER = 0; ... static final int TWO = 0; ... final int kind; final int num; } (2): Card.CLOVER == Card.TWO // True이지만 의미상 같으면 안된다. 열거형 Kind와 Value를 각각 만들게 된다면 false가 나온다. 2. 열거형 정의와 사용 1) 정의 열거형은 생성자가 private인 클래스라고 생각하면 된다. enum Direction { EAST(1, ">"), WEST(2, " 더보기
Chpt 12. 지네릭스, 열거형, 애너테이션 - 주제 2. 지네릭스의 타입 1. 지네릭 타입과 다형성 앞서 참조 변수의 타입과 인스턴스의 타입은 다형성(조상이 자손 참조)이 가능하지만 지네릭 타입은 서로 일치해야 한다. (1) ArrayList list = new ArrayList(); // O (2) ArrayList list = new ArrayList(); // X (3) List list = new ArrayList(); // O (4) List list = new ArrayList(); // X 원시 타입 지네릭 타입 다형성 가능 여부 O X ArrayList product = new ArrayList(); 를 사용해 product의 ArrayList에 Product 타입의 자손 객체를 담을 수 있다. 이때 형변환을 해야함을 잊지 말자. 2. 지네릭 타입의 제한 대입되.. 더보기
Chpt 12. 지네릭스, 열거형, 애너테이션 - 주제 1. 지네릭스 1. 지네릭스의 장점 지네릭스는 컴파일 시 타입 체크를 해주는 기능이다. 지네릭스는 다음과 같은 장점에 의해 도입되었다. (1) 타입 안정성을 제공한다. (2) 타입체크, 형변환 생략으로 코드가 간결해진다. (1)은 타입 체크를 강화해 형변환 에러를 방지해준다. 모든 타입의 객체를 담을 수 있는 ArrayList를 예로 들어보겠다. ArrayList list = new ArrayList(); list.add(10); // list.add(new Integer(10)); list.add(20); list.add("30"); // String 타입 Integer i = (Integer) list.get(2); 위 코드를 실행하면 컴파일은 되지만 형변환 실행 에러가 발생한다. 실행 도중 에러가 발생하게 되면 .. 더보기
Chpt 11. 컬렉션 프레임워크 - 주제 7. Comparator vs. Comparable Comparator와 Comparable은 컬렉션 클래스를 정렬하는데 필요한 메서드들을 담고 있는 인터페이스이다. 둘의 차이점을 다음을 통해 살펴보자. 인터페이스 핵심 추상 메서드 용도 구현한 클래스 Comparable int compareTo(Object o); 기본 정렬 기준 구현 (오름차순, 내림 차순) 래퍼, String, Date, File 클래스 Comparator int compare(Object o1, Object o2); 그 외 정렬 기준 구현 - 정렬은 (1) 두 대상을 비교, (2) 자리 바꿈의 반복이다. 이 과정은 불변이지만 기준을 제공함으로써 변화를 주는 것이다. [참고] Comparable을 구현한 클래스들도 직접 Comparator를 구현해 다른 기준을 제공해줄 수 있다. [예.. 더보기
Chpt 11. 컬렉션 프레임워크 - 주제 5. Map 인터페이스와 구현 클래스들 1. Map 인터페이스의 메서드 1) Collection 인터페이스 메서드 참고 2) Map 인터페이스 메서드 참고 메서드 반환 이유 결과 타입 keySet() Key Set 중복 X values() Value Collection 중복 O entrySet() Key- Value 쌍 Set (Map.Entry 타입 인스턴스 포함) 중복 X 2. 구현 클래스 핵심 구현 클래스는 노란색으로 강조돼 있다. 1) HashMap (1) 특징 Key와 Value - 이 둘을 묶어 하나의 entry 클래스로 저장한다. - Key 중복 X, Value 중복 O - 둘 다 Object 타입이지만 Key 값으로 주로 대문자 또는 소문자 String을 사용 해싱 - 배열 + LinkedList의 데이터 구조 - 많은 양의 데.. 더보기
Chpt 11. 컬렉션 프레임워크 - 주제 4. Set 인터페이스와 구현 클래스들 1. Set 인터페이스의 메서드 메서드는 모두 Collection 인터페이스로부터 상속 받은 것들이다. 참고 2. 구현 클래스 핵심 구현 클래스는 노란색으로 강조돼 있다. 1) HashSet [들어가기 앞서] 해싱 (Hashing) 해시 함수를 이용해 주어진 입력값들의 리턴값을 해시 테이블에 저장, 읽어오는 방식을 해싱이라고 한다. 해시 함수의 결과값은 index이고 이는 배열에 저장된다. 서로 다른 입력 값은 같은 해시 코드를 가질 수 있다. 따라서 해시 테이블은 배열과 LinkedList를 연결해 놓은 구조를 가진다. Hash로 시작하는 컬렉션 클래스는 모두 이러한 형태로 데이터를 저장하고 있다. 해싱을 사용하면 많은 양의 데이터를 검색할 때 유리하다. (1) 특징 중복을 허용하지 않기 때문에 add.. 더보기
Chpt 11. 컬렉션 프레임워크 - 주제 2. 저장된 요소를 접근하는 Iterator 인터페이스 Iterator 이외에도 저장된 요소에 접근하는 ListIterator, Enumeration 인터페이스가 있지만 다음과 같은 차이점 정도만 알아두자. 1. Iterator 인터페이스 Iterator는 저장된 요소를 읽는 방법을 표준화한 인터페이스이다. 다음과 같이 Iterator 인터페이스에는 확인과 읽기 두 가지메서드가 있다. public interface Iterator { boolean hasNext() // (1) 확인 Object next(); // (2) 읽기 void remove(); } public interface Collection { ... public Iterator iterator(); ... } 1) List, Set의 요소 읽기 Collection 인터페이스의 iterator.. 더보기

반응형