본문 바로가기
네이버클라우드캠프

네이버클라우드캠프 11일차(2/6)

by 하루지오 2024. 2. 6.

1. jdk 17 doc 

- 공식 홈페이지에서 다운 가능

- 이클립스에서 F1 키로 Help 호출 후 접근 가능

 

2. 이클립스에서 unstaged Changes에 새로 작성한 파일이 안 뜰때

 

3. 개발방법론

1) 폭포수 방법론

- 한번 지나간 절차는 다시 돌아갈 수 없음

2) 나선형 방법론

- 절차를 조금씩 쪼개서 중간마다 [분석-개발-구현] 과정 반복

- 문서화 중요

3) 공통점

- 사람보다 프로세스를 중요시 함

- 대규모 시스템(si)에 적합

- 인간이 기계적으로 일해야 하는 방식

 

4. Collection

0) Java

- class는 다중 상속 불가능

- interface는 다중 상속 가능(메서드만 정해주고 빈 껍데기에 불가함)

- 지바의 모든 클래스는 Object 클래스를 직접 또는 간접적으로 상속되었음

 

1) List

- 순서대로 저장'

- List 인터페이스를 상속받았고 List계열 클래스는 List로 변수를 저장해서 사용

- List<E> : E는 element의 약로, 다양한 자료형(Int, String 등) 또는 클래스을 포함할 수 있음

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

 

(1) ArrayList

- 배열 구성 및 저장

- 베열보다 나은 점은 데이터가 배열을 꽉 채우면 알아서 내부 공간을 늘려줌

- 배열의 크기를 자동으로 증가

- <>사이에 어떤 자료형을 넣는냐에 따라 해당 자료형을 저장

- 데이터 양이 많을 때 '삽입', '삭제'가 빈번한 경우는 성능의 저하가 일어나며, 데이터 양이 적을 때는 크게 관계 없음

- 데이터의 양이 많고, 읽기 전용인 경우 그리고 순차 검색인 경우는 가장 빠른 성능을 가지고 있음

- 특별히 삽입 삭제가 필요없을 때와 데이터 양이 차이 남

- 삽입 시 데이터들이 옆으로 하나씩 밀림

 

(2) Vector

- 배열 구성 및 저장

- ArrayList와 동일

- 다만 멀티스레드 환경에서 2개 이상의 스레드가 동시 접근할때 안전

- 1개 스레드일 때는 ArrayList보다 약간 성능 저하가 있음(동기화 처리때문)

 

(3) LinkedList

- 링크로 연결

- 삽입 삭제가 유리

- 초기 위치인 Head 노드만 직접적으로 접근 가능

- Tail 노드에 직접적으로 접근하는 것은 일반적으로 어렵거나 불가능

- 노드를 삽입하거나 삭제할 때 링크를 업데이트하는 것이 유리

 

2) Set

- 집합

- 집합은 데이터의 모음일 뿐 순서대로 저장되지 않음

- 중복을 허용하지 않음

 

(1) HashSet

- Hash 알고리즘을 사용해서데이터가 입력될 때 기존 데이터가 있는지 확인

- Hash는 글자가 1개라도 바뀌면 hash 전체가 다 바뀜

더보기

(+) Hash 알고리즘

-  실례:  리눅스에서 패스워드를 Hash로 저장함 / 중복 체크

- 패스워드를 무조건 64비트로 값을 변환해서 Hash만 저장해둠

- 입력값에서 해시로 변환은 가능하나, 해시에서 원문 변환 불가

- 우연의 일치로 충돌이 일어날 수 있음

- hash 값 중복 여부를 조사

- 최대한 hash에 충돌이 일어나지 않게 애초에 하지만, 간혹 충돌이 일어나기도 함

- 순서를 보장하지 않음

- Hash는 글자가 1개라도 바뀌면 hash 전체가 다 바뀜

- Hash는 16진수

- 정렬을 해서 저장하기 때문에 검색속도는 빠름

- Hash위치 정보 임

- Hash = 정확한 주소를 Hash화 시킨 코드

-  Hash 코드가 다르면 다른 객체

(2) TreeSet

- 균형 이진 검색 트리(Red-Black Tree, AVL Tree)를 사용하여 요소를 정렬된 순서로 저장

- 중복 요소를 허용하지 않음

- 요소를 추가할 때는 Comparable 또는 Comparator 인터페이스를 활용하여 정렬 기준을 지정할 수 있음

- 검색 및 삽입 시간 복잡도는 O(log n)

- 정렬되어 있기 때문에 요소의 클래스가 정렬 기준을 제공하지 않으면 예외가 발생할 수 있음

- 스레드가 안전하지 않아 동기화가 필요하고 null 요소를 허용하지 않음

import java.util.TreeSet;

public class TreeSetExample {
    public static void main(String[] args) {
        // TreeSet 생성
        TreeSet<Integer> numbers = new TreeSet<>();

        // 요소 추가
        numbers.add(5);
        numbers.add(2);
        numbers.add(8);
        numbers.add(1);
        numbers.add(10);

        // 정렬된 순서로 출력
        for (int num : numbers) {
            System.out.println(num);
        }
    }
}
(+) 균형 이진 검색 트리
- 검색 연산의 성능을 향상시키기 위해 설계된 자료구조
- 각 노드가 최대 두 개의 자식을 가짐
- 왼쪽 서브트리의 모든 노드는 현재 노드보다 작고, 오른쪽 서브트리의 모든 노드는 현재 노드보다 큰 값을 가짐
- 트리의 높이를 최소화하여 검색, 삽입, 삭제 연산의 평균 시간 복잡도를 O(log n)으로 유지
- 회전 연산을 사용하여 트리의 균형을 유지

3)  Map

(1) HashMap

- 해시 함수를 사용하여 키-값 쌍을 저장

- 검색, 삽입, 삭제 연산에서 평균적으로 O(1)의 시간 복잡도를 가짐

- 순서를 보장하지 않음

 

2) HashTable

- HashMap과 유사하지만 동기화된 메소드로 구성

- 멀티스레드 환경에서 안전하게 사용할 수 있음

- 순서를 보장하지 않음

 

(3)TreeMap

- Red-Black Tree를 사용하여 키를 정렬된 순서로 저장하는 자료구조

- 검색, 삽입, 삭제 연산의 시간 복잡도는 O(log n)

- 키의 정렬 기준을 지정 가능