개발/KH국비지원과정

[KH국비지원 웹개발자 과정] Day_17 키워드, List, Set, Map 등

mabb 2022. 7. 5. 19:43
반응형

 안녕하세요. 삶의 질을 높이고자 노력하는 영차영차입니다.
드디어 국비지원 학원을 다니며 공부에 전념을 할 수 있게 되었습니다.
해당 포스팅은 강의 복기용으로 키워드를 기록하는 용도의 포스팅입니다.
--------------------------------------------------------------------------------------------------

-자료구조: 데이터를 메모리에서 구조적으로 처리하는 방법론 -> 자료를 쉽게 찾고 쉽게 처리

-컬렉션: 자료구조를 담당하는 프레임워크

-배열의 한계
:크기를 정해야하며 추가, 삭제, 정렬 등이 번거로움.
-> 컬렉션은 크기를 정하지 않아도 됨. 추가 삭제 정렬도 편리함. 컬렉션은 객체를 저장.

-List : 순서가 있고 중복을 허용하는 자료 구조. 인터페이스.
add, addAll, clear, contain, containsAll, copyOf, equals, get, hashCode, indexOf, isEmpty, iterTor, lastIndexOf, listIterator, of, remove, removeAll, replaceAll, retainAll, set, size, sort, spliterator, stbList, toArray

-List의 주요 구현 클래스
ArrayList - 동기화를 제공하지 않는 List구현 클래스
Vector - ArrayList와 유사하나 동기화를 제공한다
LinkedList -ArrayList보다 성능이 좋다(왜그런지?) 프레임워크에서 ArrayList객체를 많이 다루기 때문에 ArrayList를 많이 사용한다고 함.

Set
순서없음, 중복을 허용하지 않음
메소드의 종류는는 List인터페이스와 거의 동일하나 인덱스나 sort관련 메소드가 없음.
인덱스가 없으므로 Iterator(반복자)를 이용하여 값을 구함
Hash비교를 하여 중복값을 허용하지 않는 구조.

-Set의 주요 구현 클래스
HashSet
LinkedSet
TreeSet

Map
키와 값, 키는 중복 불가. Hash를 통한 키 중복 방지.
Map인터페이스의 메소드
clear, compute, computeIfAbsent, contains,Key, containsValue, copyOf,entry, entrySet, equals, forEach, get, getOrDefault, hashCode, isEmpty, keySet, merge, of, ofEntries, put, putAll, putIfAbsent, remove, replace, replaceAll, size, values

-Map의 구현 클래스
HashMap
HashTable
LinkedHashmap
Properties -> JDBC에서 사용한다고 함.

실습) ArrayList의 메소드를 비슷하게 직접 구현해보는 실습.
-> 객체의 종류마다 메소드를 만드는 것은  불편함.
-> 모든 객체의 대입이 가능한 Object타입으로 메소드 정의
-> 여러 타입을 허용할 경우 casting 등의 어려움
-> 여러 타입의 객체를 다루는 메소드나 클래스의 경우 타입을 미리 정해버림 -> 제네릭
 형변환의 번거로움을 덜고, 타입 안정성을 높일 수 있게 됨.

-제네릭은 클래스와 메소드에 선언 가능.
List<Integer> objList =  new ArrayList<Integer>();

: <Integer>형의 인터페이스List의 참조변수 objList에 List의 구현객체 newArrayList<Integer>()를 대입.

-다양한 타입이 가능한 클래스나 메소드의 타입을 명시(제한) 하는 것.

-제한할 경우 구체적인 타입을 명시하지 않고 와일드카드를 사용할 수 있음

<?>  : 제한없음
<? extends 상위타입>  :  해당 타입과 해당 타입의 자식 타입만 가능하도록 
<? super 하위 타입>  : 해당 타입과 해당 타입의 슈퍼 타입만 가능하도록 

ArrayList 구현해보기, 배열과 인덱스의 위치를 나타내는 current 변수를 선언하여  add메소드등을  구현해봄. 
배열의 크기가 늘어나는 것은 배열이 다 찼을 때 배열의 크기를 넓히고 기존 값들을 복사하는 방식으로 구현해야함.

-Iterator 인터페이스 : StringTokenizer와 유사함. (더 알아볼 것)

- 매개변수가 있는 생성자를 활용하여 코드 줄이기

-hashCode()로 객체를 비교하면 다른객체로 나옴. hashCode를 오버라이드하여 필드 값이 같을 경우 같은 hashcode가 나오도록함. return (this.name + this.score).hashCode();

-HashSet 은 내부적으로 hashCode()와 equals()메소드를 활용하여 중복값을 제거하고 있는 것으로 이해함.

-Map : 키와 값으로 된 자료구조

-Stack LIFO 자료구조 구현 클래스
ex) 브라우저의 뒤로가기, 컨트롤z 등

-Queue FIFO 자료구조 구현 클래스
ex) 선입선출

-클래스를 나누어 모델링 하는 방법 생각해보기.

- 1)프로그램을 실행하는데 필요한 객체에 대해 생각하고 2)객체가 가지고 있어야 할 정보에 대해 생각함. 3) 객체를 관리하는 클래스와 이를 다루는 컨트롤러 클래스를 생각해 볼 것. 객체가 만들어지는 시점을 잘 생각 할 것.

구글링 및 더 알아볼 것) MVC패턴, 디자인패턴

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형