개발자로 가는 길(국비지원과정)/1. Java

[자바복습 Day09] 컬렉션 ArrayList, Map, Set, CRUD, 본격적으로 UI, Service, VO를 만들어 코딩 시작

레아Leah 2022. 1. 10. 10:26
반응형

우리는 앞으로 수많은 데이터를 다루게 됨. 

Collection는 java.util.*안 에 들어가 있고,

종류는 List, Map, Set가 있다. 

 

 -List : 데이터를 선형으로 수집하는 형태 

  ArrayList, Vector 

 

 

CRUD

Create : add

Read : iter

update : index, remove, add 

delete : remove 

 

데이터 넣기 add,

데이터 삭제 remove(인덱스 혹은 문자열로도 삭제할 수 있다. ), clear(리턴타입이 void이기때문에 아무것도 받을 수 없다.)

데이터 변경 직접적인 변경은 안되고 수정할 데이터의 인덱스를 찾아 삭제 후 그 위치값(인덱스)를 보존해 넣는 방법뿐, set 

더보기

List<String> list = new ArrayList<>();

System.out.println("List: " + list);
System.out.println(list.size());

 

//데이터 삽입
list.add("서울시");
list.add("부산시");
list.add(0, "제주도");
list.add(2, "인천시");
System.out.println("List: " + list);
System.out.println(list.size());

 

//데이터 삭제 확인 

boolean result = list.remove("광주");
System.out.println(result);

 

//데이터 교체 
list.set(0, "대전시");
System.out.println("List: " + list);
System.out.println(list.size());

list.remove(0);
list.add(0, "속초시");
System.out.println("List: " + list);
System.out.println(list.size());

 

//인덱스 찾기 

int index = list.indexOf("서울시");
System.out.println(index);

 

출력값 

List: [제주도, 서울시, 인천시, 부산시]
4

 

false

 

List: [대전시, 인천시, 부산시]
3
List: [속초시, 인천시, 부산시]
3

 

//찾을려고 하는 데이터가 없을 경우 return값 -1을 던짐, 하나의 약속, 데이터를 못찾았다ㅎㅎ 

-1

ArrayList에서 데이터를 변경할 경우에는 indexOf로 인덱스값을 가져와 index >=0 이런식으로 데이터가 있을 경우, remove와 add를 이용해 변경한다. 찾는 데이터가 없을 경우, indexOf함수의 return값이 -1이 나오기 때문! 

 

 

전체 데이터 순회하기(Iterator)

: for문은 성능이 낮기 때문에 Iterator를 사용하는 것이 좋다! 

: 전체 리스트로부터 Iterator를 생성한 후 순회한다. 

더보기

Iterator<String> iter = list.iterator();

 

//iter객체가 다음으로 데이터가 올 때까지 순회! 
while(iter.hasNext()) {
System.out.println(iter.next()); //

 

출력값 

속초시
대전시
인천시
부산시

 

데이터 하나만 가져오고 싶을 때 get을 시용

더보기

System.out.println(list.get(2));

 

Arrays.asList를 사용하면 간단한 데이터를 넣을 수 있다! 

더보기

//4,2,3,4,7을 ArrayList에 데이터를 넣고 싶을 때는? 
//add를 통해 넣는 것은 너무 아깝다. 
List<Integer> list = Arrays.asList(4,2,3,4,7);

 

-Map : 비선형구조, 데이터의 위치값을 키로 가지고 있음(Key, Value) 

  HashMap, HashTable 

-Set

비선형구조, 중복을 허용하지 않고 Value데이터만 가지고 있음. 

: 데이터가 많을 경우 중복을 제외하기위해 사용한다. 

 HashSet 

더보기

Set<Integer> set = new HashSet<>();

 

//값넣기 

//add의 return타입은 boolean이다. 그래서 값이 들어갔는지 아닌지를 확인하는 boolean을 사용한다. 
set.add(4);
set.add(1);
set.add(5);
set.add(7);
set.add(4); //중복이 불가하므로 동일한 값의 뒤쪽의 값은 들어가지 않는다. 
System.out.println(set);

 

//set은 데이터를 하나하나 꺼내는 메소드는 존재하지 않는다. 

 

//순회

Iterator<Integer> iter = set.iterator();
while(iter.hasNext()) {
System.out.println(iter.next());
}

 

System.out.println(set.size());
System.out.println(set.remove(4));
set.clear();
System.out.println(set.isEmpty());

 

출력값

[1, 4, 5, 7]

1
4
5
7

4
true
true

 

컬렉션에서 주의할 것 데이터 넣기(Create), 삭제(Delete)

 

MVC패턴 

Model : VO(Entity) 데이터 Member.java 

View : UI

Controller : Model을 View에 출력하기 위해 연결하는 작업 

 

ArrayList<Object> list = new ArrayList<>(); 

==> 코드가 커지면 커질수록 이렇게 사용하지 않는다.

 

★List<Object>list = new ArrayList<>(); 

상위클래스의 인터페이스가 하위클래스의 객체를 생성해 사용하는 것이 이후에 코드가 커질 시 확장시키기가 좋다. 

 

List<Member> list = new ArrayList<>();에서 list의 타입은 List<Member>이다. 

더보기

public List<Member> findAll() {
return list;
}

 

Member member = service.findById(id);

member가 없을 경우는? null입니다! 

 

CRUD의 Read <조회를 할 경우>

더보기

Iterator<Member> iter = list.iterator();
while(iter.hasNext()) {
Member m = iter.next();
System.out.println(m);
}

 

반응형