내가 개발해볼게!!

Do it! 자바 프로그래밍 입문 10일차 본문

Language/Java

Do it! 자바 프로그래밍 입문 10일차

보송송희 2022. 7. 12. 22:51

교재 맨앞쪽 진도표에 나와 있는 15일 코스로 공부하고 있습니다!!

Do it! 자바 프로그래밍 입문 10일차
12장 컬렉션 프레임워크
- 12-1 제네릭
- 12-2 컬렉션 프레임워크
- 12-3 List 인터페이스
- 12-4 Set 인터페이스
- 12-5 Map 인터페이스

  12장 컬렉션 프레임워크

  • 제네릭 프로그래밍에 대해 배웠습니다.

제네릭 프로그래밍은 어떤 값이 여러 참조 자료형을 사용할 수 있도록 프로그래밍하는 것입니다. 어떤 값에 특정 자료형을 지정하지 않았다가 실질적으로 사용하는 시점에 사용할 자료형을 지정하는 방식으로 구현할 수 있습니다.

 

클래스 이름 뒤에 type의 약자인 <T>를 붙이면 제네릭 클래스를 정의할 수 있고, 여러 자료형으로 사용할 변수의 자료형을 T라고 쓸 수 있습니다. 이때 T는 자료형 매개변수라고 부르는데 T 말고도 다른 아무 문자나 사용할 수 있습니다. 자바 7부터 자료형 매개변수를 생략할 수 있습니다. 

 

메서드의 매개변수로 자료형 매개변수를 사용한 메서드를 제네릭 메서드라고 합니다. 

 

다른 파일에서 제너릭 클래스 GenericPrinter를 생성한 뒤 이를 이용해 두 가지 자료형의 변수를 생성하는 코드입니다. line 6, line 12에서 < > 안에 사용할 참조 자료형을 지정했습니다. 

 

extends 예약어로 사용할 클래스에 자료형 제한을 둘 수 있습니다. 추상 클래스를 생성한 다음 사용할 클래스에게 그 클래스를 상속시키면 추상 클래스를 상속받지 않은 클래스는 사용할 수 없게 됩니다.

 

제네릭 클래스가 아닌 클래스의 내부에도 제네릭 메서드를 구현할 수 있습니다.

 

  • 컬렉션 프레임워크에 대해 배웠습니다.

컬렉션 프레임워크는 java.util 패키지에서 제공되는 미리 구현된 자료 구조입니다. 컬렉션 프레임워크는 하나의 자료를 관리하는 기능의 Collection 인터페이스와 쌍으로 된 자료들을 관리하는 기능의 Map 인터페이스로 구성되어 있습니다. 

 

Collection 인터페이스는 List 인터페이스와 Set 인터페이스로 이루어져 있습니다. List 계열의 클래스는 순차적인 자료를 관리하는 클래스이고, Set 계열의 클래스는 순서가 정해져 있지 않고 중복되지 않는 자료를 관리하는 클래스입니다. 

 

Map 인터페이스에서 관리하는 자료들은 key(중복 X) - value 쌍으로 구성되어 있습니다. 주로 key 값을 이용해서 value 값을 검색하기 위해 많이 사용됩니다. 

 

  • List 인터페이스에 대해 배웠습니다.

List 인터페이스에는 순차 자료 구조에 필요한 메서드가 선언되어 있습니다. 순차 자료 구조의 대표적인 예로 배열이 있는데, 자바에서 배열을 구현한 클래스로는 ArrayList, Vector가 있습니다. 

arraylist 클래스를 사용해 회원 추가, 삭제, 회원 정보 출력 메서드를 구현했습니다.

 

배열은 한 번 생성하고 나면 크기를 바꿀 수 없다는 단점이 있는데, 이를 보완하기 위한 자료 구조가 링크드 리스트, linked list입니다. 정적 크기를 가진 배열과는 달리 링크드 리스트는 요소를 추가할 때마다 동적으로 메모리를 할당합니다. LinkedList 클래스는 링크드 리스트 자료 구조가 구현된 자바의 클래스입니다. 

LinkedList 클래스를 사용한 예시입니다.

 

arrayList 클래스를 사용해 스택과 큐를 구현한 예시입니다.

 

순서가 존재하는 인터페이스의 경우 get() 메서드를 사용해 객체를 반환할 수 있지만 순서가 없는 인터페이스에서는 get() 메서드를 사용할 수 없습니다. 이럴 때 Iterator() 메서드를 호출합니다. iterator() 메서드로 Iterator를 가져온 뒤 hasnext(), next() 메서드를 호출할 수 있습니다.

 

  • Set 인터페이스에 대해 배웠습니다.

Set 인터페이스는 순서와 상관없이 중복을 허용하지 않습니다. Set 인터페이스를 구현한 자바 클래스에는 HashSet, Treeset이 있습니다.

 

HashSet 클래스는 중복을 허용하지 않는 집합 자료 구조를 구현하는 클래스입니다. 그리고 자료가 추가된 순서와 상관없이 자료들이 출력됩니다. 

hashset 클래스를 만들고 앞에서와 같이 회원 추가, 삭제, 회원 정보를 출력하는 메서드를 구현했습니다.

 

TreeSet 클래스는 결과 값이 이진 트리를 이용해 자동으로 정렬되어 출력되는 클래스입니다.

TreeSet 클래스를 사용한 예시입니다. treeSet에 자료를 추가한 순서와 상관없이 정렬된 순서로 자료가 출력되는 것을 확인할 수 있습니다.

TreeSet에 요소를 추가할 때 어떤 기준으로 비교하여 정렬할 것인지 나타내는 인터페이스로 Comparable, Comparator가 사용됩니다. compareTo() 추상 메서드, compare() 추상 메서드를 재정의하여 정렬 방식을 구현할 수 있습니다.

 

  • Map 인터페이스에 대해 배웠습니다.

Map 인터페이스에는 자료를 쌍으로 관리하는 메서드가 정의되어 있고, HashMap 클래스가 가장 많이 사용됩니다.

해시 함수는 key 값이 정해지고 그에 대응하여 정해지는 해시 테이블의 저장 위치를 계산하는 함수입니다. 해시 함수는 index = hash(key) 와 같이 표현됩니다. key 값은 중복될 수 없기 때문에 equals() 메서드와 hashcode() 메서드를 재정의해 사용하는 것이 권장됩니다.

HashMap 클래스를 사용해 앞에서의 회원 정보 관리 시스템을 구현한 예시입니다.

 

key 값으로 자료를 정렬하기 위해 TreeMap 클래스가 사용됩니다. TreeMap 클래스는 앞에서의 TreeSet 클래스와 같이 이진 검색 트리로 구현되어 있습니다.