JAVA 65

[자바의 정석 - 기초편] 12. (2) 제한된 지네릭 클래스 / 지네릭스의 제약 / 와일드 카드 <?> / 지네릭 메서드 / 지네릭 타입 ( 형변환, 제거 )

제한된 지네릭 클래스 - extends로 대입할 수 있는 타입을 제한 class FruitBox { // Fruit의 자손만 타입으로 지정가능 ArrayList list = new ArrayList(); ... } FruitBox appleBox = new FruitBox(); // OK FruitBox toyBox = new FruitBox(); // 에러. Toy는 Fruit의 자손이 아님 - 인터페이스인 경우에도 extends 사용 interface Eatable { } class FruitBox { ... } 지네릭스의 제약 - 타입 변수에 대입은 인스턴스 별로 다르게 가능 Box appleBox = new Box(); // OK. Apple 객체만 저장 가능 Box grapeBox ..

[자바의 정석 - 기초편] 12. (1) 지네릭스 Generics ( 타입 변수 / 용어 / 타입 / 다형성 / Iterator<E> / HashMap<K,V> )

지네릭스(Generics) 컴파일시 타입을 체크해주는 기능 (compile-time type check) - 객체의 타입 안정성을 높이고 형변환을 생략할 수 있어서 코드가 간결해짐 - 런타임에 발생할 수 있는 에러를 컴파일의 에러로 끌어와서 체크할 수 있게 만듦 // Tv 객체만 저장할 수 있는 ArrayList 생성 ArraysList tvList = new ArrayList(); tvList.add(new Tv()); // OK tvList.add(new Audio()); // 컴파일 에러. Tv외 다른 타입은 저장 불가 Tv t = tvList.get(0); // 형변환 불필요. 원래라면 리스트의 반환타입이 Object라서 Tv t = (Tv)tvList.get(0); 타입 변수 지네릭 클래스를 작..

[자바의 정석 - 기초편] 11. (6) HashMap / Hashtable / Collections 컬렉션 클래스 요약

HashMap & Hashtable - 순서 X, 중복 (키 X, 값 O) - Map 인터페이스를 구현. 데이터를 키와 값의 쌍으로 저장 HashMap - Map 인터페이스를 구현하는 대표적인 컬렉션 클래스 - HashMap (동기화 X) : Hashtable (동기화 O)의 신버전 - 순서를 유지하려면 LinkedHashMap클래스 사용하면 됨 TreeMap - 범위 검색과 정렬에 유리한 컬렉션 클래스 - HashMap보다 데이터 추가, 삭제에 시간이 더 걸림 HashMap의 키와 값 해싱기법으로 데이터를 저장. 데이터가 많아도 검색이 빠름 키 (key) : 컬렉션 내의 키 중에서 유일해야 함 값 (value) : 키와 달리 데이터의 중복을 허용해야 함 해싱 (hashing) - 해시함수(hash fu..

[자바의 정석 - 기초편] 11. (5) HashSet / TreeSet

HashSet - 순서 X, 중복 X HashSet - Set 인터페이스를 구현한 대표적인 컬렉션 클래스 - 순서를 유지하려면 LinkedHashSet 클래스 사용하면 됨 - 객체를 저장하기 전에 기존에 같은 객체가 있는지 확인 같은 객체가 없으면 저장하고, 있으면 저장하지 않음 - boolean add(Object o)는 저장할 객체의 equals()와 hashCode()를 호출 equals()와 hashCode()가 오버라이딩 되어 있어야 함 HashSet 주요 메서드 Set은 정렬 불가능 ➔ Set의 모든 요소를 List에 저장 ➔ List를 정렬 후 출력 TreeSet - 범위 탐색, 정렬 TreeSet - 이진 탐색 트리로 구현. ..

[자바의 정석 - 기초편] 11. (4) Arrays / Comparator / Comparable

Arrays 배열을 다루기 편리한 메서드(static) 제공 1. 배열의 출력 - toString() static String toString(byte[ ] a) 2. 배열의 복사 - copyOf(), copyOfRange() : 새로운 배열을 생성해서 반환 int[ ] arr = {0, 1, 2, 3, 4}; int[ ] arr2 = Arrays.copyOf(arr, arr.length); // arr2 = [0, 1, 2, 3, 4] int[ ] arr3 = Arrays.copyOf(arr, 7); // arr3 = [0, 1, 2, 3, 4, 0, 0] int[ ] arr4 = Arrays.copyOfRange(arr, 2, 4); // arr4 = [2, 3] 3. 배열 채우기 - fill(), ..

[자바의 정석 - 기초편] 11. (3) 스택 / 큐 / Iterator / Listlterator / Enumeration / Map

스택 (stack) LIFO (Last In First Out) 구조 : 마지막에 저장된 것을 제일 먼저 꺼냄 - 저장 : push / 추출 : pop - 밑이 막힌 상자 - 배열로 만드는 게 유리 - 활용 : 수식계산, 수식 괄호검사, 워드프로세서의 undo/redo, 웹브라우저의 뒤로/앞으로 큐 (queue) FIFO (First In First Out) 구조 : 제일 먼저 저장한 것을 제일 먼저 꺼냄 - 저장 : offer / 추출 : poll - 양끝이 뚫린 상자 - 링크드 리스트로 만드는 게 유리 - 인터페이스 ➔ 객체 생성 X - 활용 : 최근 사용 문서, 인쇄작업 대기목록, 버퍼 스택과 큐의 메서드 인터페이스를 구현한 클래스 찾기 Iterato..

[자바의 정석 - 기초편] 11. (2) ArrayList / java API 소스 보기 / LinkedList

ArrayList - 기존의 Vector를 개선한 것으로 구현원리와 기능적으로 동일 (Vector - 동기화 O / ArrayList - 동기화 X) - List 인터페이스를 구현하므로 저장순서가 유지되고 중복 허용 O - 데이터의 저장공간으로 배열 사용 ArrayList의 메서드 저장할 때 : list.add(3) ➔ list.add(new Integer(3)) 으로 됨 지울 때 : list.remove(3) ➔ 숫자 3이아니라 인덱스 3이 지워짐 ArrayList에 저장된 객체의 삭제 과정 1. 삭제할 데이터 아래의 데이터를 한칸씩 위로 복사해서 삭제할 데이터를 덮어씀 2. 데이터가 모두 한칸씩 이동했으므로 마지막 데이터는 null로 변경함 3. 데이터가 삭제되어 데이터의 개수가 줄었으므..

[자바의 정석 - 기초편] 11. (1) 컬렉션 프레임웍 ( List / Set / Map )

컬렉션 프레임웍 (collections framework) 컬렉션 (collection) - 여러 객체(데이터)를 모아 놓은 것 프레임웍 (framework) - 표준화, 정형화된 체계적인 프로그래밍 방식 컬렉션 프레임웍 (collections framework) - 컬렉션(다수의 객체)을 다루기 위한 표준화된 프로그래밍 방식 - 컬렉션을 쉽고 편리하게 다룰 수 있는 다양한 클래스를 제공 - java.util 패키지에 포함 컬렉션 클래스 (collection class) 다수의 데이터를 저장할 수 있는 클래스 Ex) Vector, ArrayList, HashSet... 컬렉션 프레임웍의 핵심 인터페이스 1. List - 순서가 있는 데이터의 집합. 중복 허용 O ex) 대기자 명단 - 구현 클래스 : A..

[자바의 정석 - 기초편] 10. (3) 형식화 클래스 ( DecimalFormat / SimpleDateFormat )

형식화 클래스 - java.text 패키지의 DecimalFormat(10진수 형식화), SimpleDateFormat(날짜 형식화) - 숫자와 날짜를 원하는 형식으로 쉽게 출력 가능 (숫자, 날짜 > 형식 문자열) - 형식 문자열에서 숫자와 날짜를 뽑아내는 기능 (형식 문자열 > 숫자, 날짜) DecimalFormat - 숫자를 형식화할 때 사용 (숫자 ➔ 형식 문자열) double number = 1234567.89; // 10진수 DecimalFormat df = new DecimalFormat("#.#E0"); // 지수 형식 String result = df.format(number); // result = "1.2E6" (1.2 * 10^6) - 특정 형식의 문자열을 숫자로 변환할 때도 사용 ..

[자바의 정석 - 기초편] 10. (2) Calendar 클래스 ( set, clear, add, roll ) / Date와 Calendar간의 변환

Calendar 클래스 - set()으로 날짜와 시간 지정하기 월(Month)이 0부터 시작한다는 점에 주의! Calendar date1 = Calendar.getInstance(); date1.set (2023, 7, 15); // 2023년 8월 15일 (7월 아님) // date1.set(Calendar.YEAR, 2023); // date1.set(Calendar.MONTH, 7); // date1.set(Calendar.DATE, 15); Calendar time1 = Calendar.getInstance(); time1.set(Calendar.HOUR_OF_DAY, 10); // time1을 10시 20분 30초로 설정 time1.set(Calendar.MI..