4일차

2023. 5. 11. 15:52카테고리 없음

List, Set, Map, HashMap의 차이

 

1. List : 저장공간이 필요에 의해 자동으로 늘어난다 (순서 O)

 - 특징 : 순서가 있고, 중복을 허용(배열과 유사)

 - 장점 : 가변적인 배열9배열이 자동으로 늘어남)

 - 단점 : 원하는 데이터가 뒤쪽에 위치하는 경우 속도의 문제

 - 방식 : equals()를 이용한 데이터 검색

 

자바에서 list자료 구조는 크게 vector, arraylist, linkedlist로 나눠진다.

1) Arraylist : 객체 내부에 있는 배열에 데이터를 저장한다

 - 상당히 빠르고 크기를 맘대로 조절할 수 있는 배열

 - 단방향 포인터 구조로 자료에 대한 순차적인 접근에 강점

 

2) Vector : Arraylist와 동일하게 사용이 가능하다

 - ArrayList의 구형버전이며, 모든 메소드가 동기화 되어있다

 - 잘 쓰이진 않는다

Arraylist와 Vector의 차이점은 한 데이터에 동시접속이 발생했을 때, 처리가 가능한 기능이 있나 없나의 차이점

동시 접속을 고려하여 만들어진 리스트가 Vector이다

Arraylist는 동시접속을 고려안했지만 가볍다는 장점이 있다.

 

3) Linkedlist 

 - 양방향 포인터 구조로 데이터의 삽입, 삭제가 빈번할 경우 빠른 성능을 보장한다

 - 스택, 큐, 양방향 큐 등을 만들기 위한 용도로 쓰인다

 - Iterator를 사용한다 

▶ Iterator 추출 전용 인터페이스

 - 데이터를 추출하기 위한 데이터 임시 저장공간

 - 주로 순서가 없는 자료구조의 값들을 추출할 때 사용

 - 보통 hasNext와 next 메소드를 이용한 while문으로 값을 추출한다.

 

사용하는 이유는 linked 특성상 항상 처음부터 같은 경로를 반복적으로 지나면서 데이터의 위치를 검색해야하기 때문에 마지막으로 접근한 데이터를

기준으로 그 다음 데이터를 알아내는 것이 더 쉽다

 

2. Set : 집합, 순서가 없다. 집합이므로 중복된 데이터가 들어갈 수 없다.

중복되지 않는 숫자(데이터)를 구할 때 사용하면 유용하다.

 - 특징 : 순서가 없고, 중복을 허용하지 않는다

 - 장점 : 빠른 속도

 - 단점 : 단순 집합의 개념으로 정렬하려면 별도의 처리가 필요하다

 

▶ hashSet의 key값은 hashcode 비교에 의해 중복여부가 확인된다.

hashCode()를 가지고 비교하고 ==로 비교해서 true를 리턴하거나 equals()로 비교해서 true를 리턴하는지 체크

element를 덮어 쓸 것인지 결정하면 된다.

 

Hashset은 Iterator를 사용한다

왜냐하면, set은 순서가 없기 때문에 데이터에 순서를 정해 추출해야한다.

 

3. Map : 키와 데이터를 같이 저장

 - 특징 : Key(키)랑 Value(값)으로 나눠서 데이터 관리, 순서는 없으며, 키에 대한 중복은 없음

 - 장점 : 빠른 속도

 - 단점 : Key의 검색 속도가 검색 속도를 좌우

 

1) HashMap : index번호 대신 키값으로 값을 찾는 맵형태의 자료구조도 iterator 클래스를 이용해서 키값을 순서대로 iterator에 저장해두면 순서대로 데이터 추출이 가능하다.

 

Set

  • Set이란 데이터의 집합
  • List와 달리 중복을 허용하지 않음

Set의 종류 in Java

  • HashSet
    • 순서를 보장 하지 않는 set
  • TreeSet
    • Binary Search Tree 구조
    • 추가와 삭제에는 시간이 좀 더 걸리지만, 정렬 및 탐색에 성능이 좋음
    • 오름차순을 데이터를 저장
  • LinkedHashSet
    • 데이터가 들어간 순서대로 저장하는 Set

Map

  • Map이란 Key와 Value로 이뤄진 데이터의 집합
  • Key의 중복은 허용되지 않고, Value의 중복은 가능하다.

Map의 종류 in Java

  • HashMap
    • 순서를 보장하지 않는 map, Key와 Value로 null이 허용된다.
  • HashTable
    • 동기화를 지원하는 map, Key와 Value로 null이 허용되지 않는다.
  • TreeMap
    • 이진 검색 Tree 구조의 Map, 저장시 Key기준으로 오름차순 저장된다.
  • LinkedHashMap
    • 들어간 순서대로 저장되는 Map

List와 Set의 차이

  • List는 기본적으로 순서대로 데이터가 들어가며 중복을 허용한다.
  • Set은 순서가 보장되지 않고 중복을 허용하지 않는다.
  • Map은 순서가 보장되지 않고, Key 중복은 허용하지 않지만 Value의 중복은 허용된다.

 

스프링 컨테이너(Spring Container)

스프링에서 객체(Bean)들의 생명 주기를 관리하며, 생성된 인스턴스들에게 추가적인 기능을 제공하도록 하는 것

스프링 컨테이너 종류

1 BeanFactory(관리, 조회)

객체를 생성하고, 객체 사이의 런타임 의존관계를 맺어주는 역할을 하는 스프링 컨테이너의 최상위 인터페이스

2 ApplicationContext

BeanFactory를 포함한 여러 인터페이스들을 상속받은 인터페이스로, 스프링 컨테이너라고 하면 일반적으로 ApplicationContext를 의미한다. BeanFactory와 마찬가지로 객체를 생성하고, 객체 사이의 런타임 의존관계를 맺어주는 역할 뿐만 아니라 메시지 다국화, 환경변수 등 다양한 기능을 추가로 제공한다. 

  • ResourcePatternResolver : 리소스를 읽어오기 위한 인터페이스
  • EnvironmentCapable : 개발, 운영 등 환경을 분리해서 처리하고, 애플리케이션 구동 시 필요한 정보들을 관리하기 위한 인터페이스
  • MessageSource : 메시지 다국화를 위한 인터페이스
  • ApplicationEventPublisher : 이벤트 관련 기능들을 제공하는 인터페이스

3. 스프링 컨테이너 생성 과정

1) 스프링 컨테이너 생성

비어있는 스프링 컨테이너가 생성된다.

2) 스프링 빈 등록

스프링 설정 파일(Java, XML 등)을 기반으로 컨테이너에 스프링 빈이 등록된다.

3) 스프링 빈 의존관계 설정

스프링 설정 파일(Java, XML 등)을 기반으로 스프링 빈의 의존관계를 주입(DI)한다.

4. BeanDefinition

스프링은 BeanDefinition을 통해 다양한 형식의 설정파일을 지원한다. 어떠한 설정 파일을 사용하더라도 BeanDefinition 형식의 메타정보를 생성해주고, 스프링 컨테이너는 설정파일의 형식과 상관없이 BeanDefinition을 통해 빈의 정보를 알아낼 수 있다.

  • beanClassName : 생성할 빈의 클래스 이름
  • constructorArgumentValue : 생성자 이름과 설정값
  • dependsOn : 생성 순서가 보장되어야 하는 경우를 위해 먼저 생성되어야 하는 빈 지정
  • description : 빈 생성 시 작성한 설명
  • destroyMethodName : 빈의 생명주기가 끝나서 소멸되기전 호출되는 메서드 이름
  • factoryBeanName : 팩토리 역할의 빈을 사용할 경우 이름
  • factoryMethodName : 빈을 생성할 팩토리 메서드의 이름
  • initMethodName : 빈을 생성하고 의존관계 적용 후 호출되는 초기화 메서드 이름
  • parentName : 빈 메타정보를 상속받을 부모 BeanDefinition 이름
  • propertyValues : 빈의 새 인스턴스에 적용할 속성 값
  • resourceDescription : BeanDefinition이 나온 리소스에 대한 설명
  • scope : 빈 오브젝트의 생명 주기(default : 싱글톤)