관리 메뉴

KorSA

[남궁성 '자바의 정석'] 112~131강 본문

Study Memos/Java

[남궁성 '자바의 정석'] 112~131강

Praiv. 2021. 11. 16. 17:55
320x100

※ 이 글은 남궁성 저자의 '자바의 정석' 112~131강을 수강한 후 정리한 내용입니다.

 

1. 래퍼(Wrapper) 클래스
    8개의 기본형을 객체로 다뤄야할 때 사용하는 클래스.
    객체지향 언어인 자바에서 객체가 아닌 기본형을 사용하는 이유는 성능 때문.

2. Number 클래스
    Long => 10^19
    Double => 10^308
    BigInteger => Long보다 더 큰 정수
    BigDecimal => Double보다 더 큰 실수

3. 오토박싱 & 언박싱
    오토박싱: 기본형 -> 래퍼클래스
    언박싱: 래퍼클래스 -> 기본형
    JDK 1.5 이전에는 기본형과 참조형간의 연산이 불가능했었다

4. java.util.Date 클래스
    1995년 말 JDK 1.0 버전부터 사용했기 때문에 Date 메서드는 거의 deprecated되었지만 여전히 쓰이고 있다.

5. java.util.Calendar
    Date클래스를 개선한 새로운 클래스가 1997년 JDK1.1 버전에 나온 Calendar 클래스
    But, 여전히 단점이 존재함

6. java.time 패키지
    Date와 Calendar의 단점을 개선한 새로운 클래스들을 제공 (JDK1.8)
    Date와 Calender의 단점은 날짜와 시간을 한꺼번에 다루는거였음
    time 패키지는 LocalDate, LocalTime을 만들어서 날짜와 시간을 분리함

7. Calendar 클래스는 추상클래스이므로 getInstance()를 통해 구현된 객체를 얻어야 한다.

8. 형식화 클래스
    숫자, 날짜 <-> 원하는 형식의 문자열 간의 변환을 해주는 클래스
    DecimalFormat(숫자), SimpleDateFormat(날짜)

9. Collections Framework (중요하다!)
    컬렉션: 여러 객체(데이터)를 모아 놓은 것을 의미
    프레임워크: 표준화, 정형화된 체계적인 프로그래밍 방식
    컬렉션 프레임워크: 컬렉션(다수의 객체)을 다루기 위한 표준화된 프로그래밍 방식

    컬렉션을 쉽고 편리하게 다룰 수 있는 다양한 클래스를 제공
    java.util 패키지에 포함되어있으며 JDK1.2부터 제공
    ex) Vector, ArrayList, HashSet

10. List
    순서가 있는 데이터의 집합. 중복을 허용.
    List 인터페이스를 상속받은 클래스는 Vector, ArrayList, LinkedList임.
    Vector와 ArrayList는 거의 비슷한데 Vector는 old 버전, ArrayList는 new 버전임.
    List 인터페이스는 ArrayList와 LinkedList가 핵심. 나머지는 필요할 때 찾아 쓰면 됨.

 

    1) ArrayList
        ArrayList는 동기화 처리가 안되있고 Vector는 동기화 처리가 되어 있다.
        ArrayList는 배열을 사용한다.(즉, 배열 기반의 List임)
        배열 기반이기 때문에 ArrayList(int initialCapacity) 생성자를 통해 충분한 공간을 잡아주는 게 좋다.
        subList()의 반환 타입은 Read-Only이기 때문에 만약 변경하려면 

        ArrayList 생성자로 전달해준 다음 새로 만들어진 객체를 사용해야 한다.
        remove() 함수를 호출할 때 아래와 같은 경우를 조심해야 한다

list.remove(1); // 인덱스가 1인 객체를 삭제
list.remove(new Integer(1)); // 1을 삭제

        ArrayList에 모든 객체를 지우고 싶을 땐 앞에서부터 지우지말고 뒤에서부터 지우자.
        버그의 소지도 적고 훨씬 효율적이다.

    2) LinkedList
        배열의 단점을 보완한다.

11. Set
    순서를 유지하지 않는 데이터의 집합. 중복을 허용하지 않음.
    Set 인터페이스는 HashSet, TreeSet이 핵심. 나머지는 필요할 때 찾아 쓰면 됨.

12. Map
    키(key)와 값(value)의 쌍(pair)으로 이루어진 데이터의 집합
    순서는 유지되지 않으며, 키는 중복을 허용하지 않고, 값은 중복을 허용한다.
    HashTable, HashMap은 비슷한 역할을 하지만 차이점이 있음.
    HashTable은 old버전이고 동기화가 되어있는 반면, HashMap은 new 버전이고 동기화가 되어있지 않다.
    Map 인터페이스는 HashMap, TreeMap이 핵심이고 순서 보장이 필요한 경우 LinkedHashMap을 사용하면 됨.
    나머지는 필요할 때 찾아 쓰면 됨.

13. 보통 Queue에 객체를 넣을 땐 offer(), 꺼낼 땐 poll()을 쓴다.
    Queue에서 예외가 발생하는 함수: add(), remove(), element()
    Queue에서 예외가 발생하지 않는 함수: offer(), poll(), peek()

14. Iterator
    Iterator는 컬렉션에 저장된 요소들을 읽어오는 방법을 표준화한 것
    Iterator는 1회용이라 한 번 쓰고 나면 다시 얻어와야 한다.
    Iterator는 new버전이고, Enumeration은 old버전이다.
    Iterator랑 Enumeration은 거의 비슷
    ListIterator는 Iterator의 접근성을 향상시킨 것(단방향 -> 양방향). ListIterator는 잘 쓰지 않음.

    Map에는 iterator()가 없다. keySet(), entrySet(), values()를 호출해야 한다

Iteartor it = map.entrySet().iterator();


15. Arrays
    배열을 편리하게 다루기 위한 메소드(static) 제공
    배열 채우기 => fill(), setAll()
    Arrays.binarySearch()를 사용하려면 먼저 Arrays.sort() 함수를 호출하여 배열을 정렬해야 한다.
    Arrays.asList() 함수는 Read-Only List를 반환한다.
    그래서 아래처럼 써야한다.

List list = new ArrayList(Arrays.asList(1,2,3,4,5));


16. Comparable과 Comparator
    Comparable: (정렬 기준이 없는 경우)기본 정렬 기준을 구현하는데 사용
    Comparator: 기본 정렬기준 외에 다른 기준으로 정렬하고자 할 때 사용

17. HashSet의 add() 함수는 같은 객체가 없으면 저장하고, 있으면 저장하지 않는다.
    객체 존재 여부를 판별할 때 equals()와 hashCode()를 호출함.
    그래서 equals() 오버라이딩할 때 hashCode()도 오버라이딩 해놓기를 권장함.
    합집합, 교집합, 차집합 등 집합 연산에 사용함.

18. TreeSet
    이진 탐색 트리로 구현. 범위 탐색과 정렬에 유리.
    TreeSet 클래스나 TreeSet에 포함되는 데이터 클래스 둘 중 하나는 Comparable이나 Comparator를 구현해야 한다.

728x90
728x90
Comments