본문 바로가기
스프링부트

Java 자바 스프링 부트 채팅 애플리케이션 코드 해석: 핵심 개념 및 활용 방법 이해하기 (3)

by 플라퉁 2023. 2. 20.
728x90
반응형

 

 

 

 

지금까지의 코드중에서 제가 잘 모르는 코드를 분석하고

 

해당 상황에서 왜 쓰였는 지 알아보는 시간을 갖도록 하겠습니다.

 

 

 

1. private, hashset

 

private Set<WebSocketSession> sessions = new HashSet<>();

 

 - private 키워드는 필드가 선언된 클래스 내에서만 액세스 할 수 있도록 하는 접근 제한자입니다.

 

 - Set<WebSocketSession>은 필드의 유형입니다.

Set은 중복요소를 포함하지 않는 컬렉션이라는 의미를 가지고 있습니다

 

 - HashSet<>(); Set 인터페이스를 구현하는 클래스의 새 인스턴스를 만듭니다.

 

 - () 빈 괄호는 HashSet이 새 빈 집합을 만드는 기본 생성자로 만들어짐을 나타냅니다.

 

 - Set, add, remove, contains, sessions 필드는 집합에서

세션을 추가하거나 제거하는 것과 같이 WebSocket 세션을

관리하기 위해 클래스의 다른 메서드에서 사용할 수 있습니다.

 

 

 

 

2. 제너릭 메서드 관련

 

public <T> void sendMessage(T message, ChatService chatService){
    sessions.parallelStream().forEach(session -> chatService.sendMessage(session, message));
}

 

- public <T> void  T를 모든 매개 변수로 허용할 수 있는 제네릭 메서드임을 선언함

메서드가 호출될 때 실제 반환 형식이 결정됩니다. 

제네릭 메서드는 각 유형에 대해 별도의 메서드를 작성할 필요 없이

다양한 유형의 개체에서 작동할 수 있는 코드를 작성하려는 경우에 유용합니다.

 

 - sessions.parallelStream() 병렬 스트림을 생성합니다.

병렬 스트림을 사용하면 작업을 여러 프로세서로 분할하여 

대규모 컬렉션을 더 빠르게 처리할 수 있습니다.

 

 - .forEach(session -> chatService.sendMessage(session, message)) 집합의 각 요소에 대해 실행됩니다

 

 - WebSocketSession 개체를 입력으로 사용하고 ChatService 개체의 

sendMessage 메서드를 호출하여 WebSocketSession 개체와 메시지 매개 변수를 전달합니다.

 

 

 

 

 

3. @RequiredArgsConstructor 란 무엇인가?

 

 - 클래스에 대한 필수 필드가 있는 생성자를 생성하기 위해 Lombok 라이브러리에서 제공하는 주석입니다.

 

 - 이 주석이 클래스에 적용되면 Lombok은 모든 final 필드 또는 @NonNull 주석으로 표시된 필드를

인수로 허용하는 생성자를 생성합니다.

생성된 생성자는 클래스의 모든 final 또는 null이 아닌 필드를 초기화하는 생성자를 작성하기 위한 것입니다.

 

 

 

 

 

4. @PostConstruct 란 무엇인가?

 

 - bean이 구성되고 종속성 주입이 완료된 직후에 호출되어야 하는

메서드를 표시하기 위해 Java에서 사용되는 주석입니다.

일반적으로 생성자 주입 또는 설정자 메서드를 통해 수행할 수 없는 Bean에 대한 초기화 작업을 수행하는 데 사용됩니다.

또한 데이터베이스 연결, 파일 I/O 또는 생성자 주입 또는 setter 메서드를 통해

수행할 수 없는 기타 리소스 할당과 같은 작업을 수행하는 데 사용됩니다.

 

 

 

 

 

5. HashMap, Map, List에 대해 알아보자

 

 - 둘의 가장 큰 차이는 특정 키에 대한 값을 찾는 과정에서,

Hash_Map 은 이름 그대로 Hash Table 을 이용해서 키-값 관계를 유지하며,

Map 은 red-black tree 알고리즘을 이용한다.

 

 - Map 은 Key 와 Value 를 가진 집합이며, 중복을 허용하지 않는다.

즉, 한개의 Key에 한개의 Value 가 매칭된다.

Java.util 패키지에 여러 집합들을 사용하기 위한 여러 Interface 와 class 들이 정의되어 있다.

 

 - HashMap 은 Map Interface 를 Implements 한 클래스로서 중복을 허용하지 않는다.

Map 의 특징인 Key 와 Value 의 쌍으로 이루어지며, key 또는 value 값으로써 null 을 허용한다. 

 

 

 

 

리스트(List)의 특징

 

  1. 리스트(List)는 컬렉션(Collection) 인터페이스 중 하나이다.
  2. 리스트(List)는 두 개의 종류로 나눠진다.
    • ArrayList -> 배열로 이루어진 리스트(List)
    • LinkedList
  3. 리스트(List)는 크기 조절이 가능하다.
  4. 리스트(List)는 초기 크기를 지정하지 않아도 된다.
  5. 리스트(List)에 삭제는 공간을 지우는 것이다.

 - ArrayList는 요소를 순차적으로 추가하는 게 특징입니다.

배열과 매우 유사하며 배열은 배열 선언 시 크기도 같이 지정해 줘야 하는 반면

ArrayList는 크기를 지정하지 않아도 되며 추가될 때마다 크기가 정해집니다.

 

 - LinkedList는 이름 뜻대로 서로 링크되어 있다는 특징을 가집니다.
하나에 리스트에는 다음 리스트와 이전 리스트의 주소들이 서로 연결되어 있습니다.

 

 

 

3번과 4번에 대해 자세히 알 수 있도록 새로운 글을 작성하였습니다.

 

link : https://rhgustmfrh.tistory.com/17

 

스프링의 의존성 주입과 객체간의 결합도 이해: 객체 생성과 관리를 이루는 기본 개념 및 실제

우리가 알던 기존의 Java Programming 에서는 Class를 생성하고 new를 입력하여 원하는 객체를 직접 생성한 후에 사용했었습니다. 하지만 Spring에서는 직접 new를 이용하여 생성한 객체가 아니라, Spring에

rhgustmfrh.tistory.com

 

 

 

감사합니다.

 

 

 

 

 

728x90
반응형

댓글