AWS BACK DAY 12. 컬렉션

이강용·2023년 1월 16일

Java 기초

목록 보기
12/26
post-thumbnail

📌 자바 컬렉션 프레임워크(Collection Framework)

  • 다수의 데이터를 쉽게 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합
  • 데이터를 저장하는 자료 구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현해 놓은 것

컬렉션 프레임워크는 JAVA의 인터페이스(interface)로 구현

인터페이스설명구현클래스
List< E >순서가 있는 데이터의 집합, 데이터의 중복 허용Vector,ArrayList,LinkedList,Stack,Queue
Set< E >순서가 없는 데이터의 집합, 데이터의 중복 허용 XHashSet,TreeSet
Map<K,V >키와 벨류가 한 쌍으로 이루어지는 데이터의 집합, 순서가 없음, 이때 키는 중복을 허용하지 않지만, 값은 중복 가능HashMap,TreeMap,Hashtable,Properies

Set (주머니) : 순서X, 중복 X => Value값을 알고 싶으면 값을 하나씩 다 확인해야함 (전체 반복)

Map < Key, Value > : 순서X, 중복 O , Map은 put을 쓴다.

List : 순서O, 중복 O Set 상위에 Collection.add mtehod가 정의돼있음,

Collection 인터페이스

메소드설명
boolean add(E e)해당 컬렉션에 전달된 요소를 추가함.(선택적 기능)
void claer()해당 컬렉션의 모든 요소를 제거(선택적)
boolean contains(Object o)해당 컬렉션이 전달된 객체를 포함하고 있는지 확인
boolean equals(Object o)해당 컬렉션과 전달된 객체가 같은지 확인
boolean isEmpty()해당 컬렉션이 비어있는지 확인
Iterator< E >iterator()해당 컬렉션의 반복자를 반환
boolean remove(Object o)해당 컬렉션에서 전달된 객체를 제거함(선택적)
int size()해당 컬렉션의 요소 총 개수를 반환
Object[] toArray()해당 컬렉션의 모든 요소를 Object타입의 배열로 반환

📌 List

  • 순서가 있는 데이터의 집합으로 데이터의 중복을 허용
LinkedList- 양방향 포인터 구조로 데이터의 삽입, 삭제가 빈번할 경우 데이터의 위치정보만 수정하면 되기에 유용
Vector과거에 대용량 처리를 위해 사용했으나, 내부에서 자동으로 동기화처리가 일어나 비교적 성능이 좋지않고 무거워 현재는 잘 쓰지 않음
ArrayList단방향 포인터 구조로 각 데이터에 대한 인덱스를 가지고 있어 조회 기능에 성능이 뛰어남

📌 ArrayList

  • 표준 배열보다는 느리지만 배열에서 많은 조작이 필요한 경우 유용하게 사용할 수 있음
  • List 인터페이스에서 상속받아 사용
  • ArrayList는 객체(인스턴스)가 추가되어 용량을 초과하면 자동으로 부족한 크기만큼 용량을 늘림
메서드설명
boolean add(E e)요소 하나를 배열에 추가(E는 요소의 자료형)
int size()배열에 추가된 요소 전체 개수를 반환
E get(int index)배열의 index 위치에 있는 요소 값 반환
E romove(int index)배열의 index 위치에 있는 요소값 제거 및 반환
boolean isEmpty()배열이 비어 있는지 확인

기본 형식

ArrayList< E > 배열이름 = new ArrayList< E >();

ArrayList 값 추가

  1. 배열이름.add(Object) : 배열끝에 데이터 추가
  2. 배열이름.add(int index, Object) : 해당 index에 데이터 추가
ArrayList<String> strList = new ArrayList<>();
		
		//  ★ 값 추가
		strList.add("JAVA");
		strList.add("Python");

ArrayList 값 변경

  1. 배열이름.set(int index, Object) : 해당 index 값 변경
// 값 수정
	    strList.set(2, "javascript");

ArrayList 값 삭제

  1. 배열이름.remove(Object) : Object를 파라미터로 넘기는 경우 해당 ArrayList의 Object와 같은 값을 삭제
  • 배열이름.remove(int index) : index에 해당하는 값 삭제
  1. 배열이름.clear() : ArrayList의 모든 값 삭제
// ★★ 값 삭제
	    strList.remove("ANDROID");
	    strList.remove(1);
// 리스트 초기화
        strList.clear();

ArrayList 크기 구하기

  1. 배열이름.size();

ArrayList 값 출력

  1. 배열이름.get(int index) : ArrayList의 결과를 출력
for(int i = 0; i < 배열이름.size(); i++){
System.out.println(배열이름.get(i));
} 
// 향상된 for문 가능
for(String str : strList) {
	    	System.out.println("[값]: " + str);
	    }
// Iterator 를 사용한 출력
 Iterator<String> iterator = strList.iterator();
iterator = strList.iterator();
	    while(iterator.hasNext()) {
	    		
	    	String lang2 = iterator.next();
	    	System.out.println("[값4]: " + lang2);
	    }
       

ArrayList 값 검색

  1. 배열이름.contains() : ArrayList 값 여부 판단
  2. 배열이름.indexOf() : 값 위치 Index를 찾고 없다면 -1을 출력

📌 Set

  • 순서에 상관 없이, 어떤 데이터가 존재하는지를 확인하기 위한 용도로 많이 사용
  • 중복되는 것을 방지하고, 원하는 값이 포함되어 있는지 를 확인하는 용도
HashSet- 순서가 전혀 필요 없는 데이터를 해시 테이블(Hash table)에 저장, set 중에서 성능이 가장 좋음
TreeSet저장된 데이터의 값에 따라서 정렬되는 set, red-black 이라는 트리 타입으로 값이 저장, HashSet보다 약간 성능이 느림
LinkedHashSet연결된 목록 타입으로 구현된 해시 테이블에 데이터를 저장,저장된 순서에 따라서 값이 정렬, 성능은 가장 나쁨

HashSet 예제

package J19_컬렉션;

import java.util.HashSet;
import java.util.Set;

public class StudentHashSet {
	
	private static Student searchStudent(Set<Student> students,String searchName) {
		
		Student student = null;
		
		for(Student s : students) {
			if(s.getName().equals(searchName)) {
				student = s;
				break;
			}
		}
		return student;
	}
	public static void main(String[] args) {
		
		Set<Student> students = new HashSet<>();
		
		students.add(new Student("가",1));
		students.add(new Student("나",2));
		students.add(new Student("다",3));
		students.add(new Student("라",4));
		
		System.out.println(students); //순서 없이 뒤죽박죽
		
		Student student = searchStudent(students, "나");
		
		if(student == null) {
			System.out.println("검색실패!");
		}else {
			System.out.println("검색성공!" + student);
		}
	}
}

📌 Map

  • 자바에서 Map은 키(key)값(Value)로 한 쌍(pair)으로 이루어져있음
  • 자바의 Map은 Key와 값이 1:1로 지정
  • 중복이 안되기 때문에 키가 다르고, 값이 동일하다면 Map에서는 다른 것으로 간주
  • 순서가 없음
메서드설명
V put(K key, V valuekey에 해당하는 value 값을 map에 넣음
V get(K key)key에 해당하는 value 값을 반환
boolean isEmpty()Map이 비었는지 여부를 반환
boolean containsKey(Object key)Map에 해당 key가 있는지 반환
boolean containsValue(Object value)Map에 해당 value가 있는지 반환
Set keyset()key 집합을 Set으로 반환 (중복 안됨)
Collection values()value를 Collection으로 반환 (중복 무관)
V remove(key)key가 있는 경우 삭제
boolean remove(Object key, Object value)key가 있는 경우 key에 해당하는 value가 매개변수와 일치할 때 삭제

대표적인 Map 클래스

HashMap<k,v>Map인터페이스의 한 종류,Key와 Value값으로 데이터를 저장하는 형태를 가지고 있음
Hashtable<k,v>해시 함수를 사용하여 키를 해시값으로 매핑하고, 이 해시값을 주소로 삼아 데이터를 key와 함께 저장하는 자료구조
TreeMap<k,v>red-black 트리에 데이터를 담음, TreeSet과 다른점은 null값을 허용한다는 점과 동기화 되어 있지않음

HashMap 예제

package J19_컬렉션;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class HashMapTest {
	
	public static void main(String[] args) {
		Map<String, Object> dataMap = new HashMap<>();
		
		dataMap.put("username", "aaa");
		dataMap.put("password", "1234");
		dataMap.put("name", "홍길동");
		dataMap.put("email", "aaa@gmail.com");
		
		List<String> hobby = new ArrayList<>();
		
		hobby.add("골프");
		hobby.add("축구");
		hobby.add("농구");
		hobby.add("헬스");
		
		dataMap.put("hobbys", hobby);
		
		System.out.println(dataMap);
		
		List<String> list = (List<String>)dataMap.get("hobbys");
		System.out.println(list.get(0));
	}
}

📌 Maven

Maven 사이트 링크

필요한 라이브러리 다운받아서 복사 붙여넣기

  • version : Major(주) , Minor(부) , Patch(수)
    • 기존 버전과 호환되지 않는다면 Major(주) 버전을 올린다.
    • 새로운 기능을 추가하면 Minor(부) 버전을 올린다.
    • 버그를 고쳤다면 Patch(수) 버전을 올린다.

📌 Lombok

✏️ Lombok이란?

  • Java 라이브러리로 반복되는 getter, setter, to string 등의 메서드 작성 코드를 줄여주는 코드 다이어트 라이브러리

Lombok의 장점

  • Lombok은 복잡하고 반복되는 코드를 줄임으로써 코드의 가독성을 높일 수 있고 코딩 생산성을 높일 수 있다

Lombok의 단점

  • 개발자마다 호불호가 나뉘는 라이브러리로 특정 개발자들은 코드가 직접 눈에 보임으로써 직관성을 유지하는것이 좋다고 보는 의견도 있음
  • 편리성을 제공하는 라이브러리인만큼, 주의할 사항으로 API 설명과 내부 동작을 어느정도 숙지하고 새용해야 한다.

Maven project의 경우 pom.xml에 의존성을 추가해줘야 한다.

<dependency>
    	<groupId>org.projectlombok</groupId>
    	<artifactId>lombok</artifactId>
    	<version>1.18.24</version>
    	<scope>provided</scope>
	</dependency>

Json

  • JavaScript Object Notation
profile
HW + SW = 1

0개의 댓글