지금까지의 코드중에서 제가 잘 모르는 코드를 분석하고
해당 상황에서 왜 쓰였는 지 알아보는 시간을 갖도록 하겠습니다.
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)의 특징
- 리스트(List)는 컬렉션(Collection) 인터페이스 중 하나이다.
- 리스트(List)는 두 개의 종류로 나눠진다.
- ArrayList -> 배열로 이루어진 리스트(List)
- LinkedList
- 리스트(List)는 크기 조절이 가능하다.
- 리스트(List)는 초기 크기를 지정하지 않아도 된다.
- 리스트(List)에 삭제는 공간을 지우는 것이다.
- ArrayList는 요소를 순차적으로 추가하는 게 특징입니다.
배열과 매우 유사하며 배열은 배열 선언 시 크기도 같이 지정해 줘야 하는 반면
ArrayList는 크기를 지정하지 않아도 되며 추가될 때마다 크기가 정해집니다.
- LinkedList는 이름 뜻대로 서로 링크되어 있다는 특징을 가집니다.
하나에 리스트에는 다음 리스트와 이전 리스트의 주소들이 서로 연결되어 있습니다.
3번과 4번에 대해 자세히 알 수 있도록 새로운 글을 작성하였습니다.
link : https://rhgustmfrh.tistory.com/17
감사합니다.
'스프링부트' 카테고리의 다른 글
스프링 클라우드 데이터 플로우 (SCDF)를 활용한 실시간 대용량 데이터 처리 프로젝트 소개와 경험 공유 (0) | 2023.06.08 |
---|---|
Stomp를 활용한 실시간 채팅 프로그램 구현: 웹소켓 최적화 및 효율적인 메시징 전송 (4) (7) | 2023.02.24 |
스프링의 의존성 주입과 객체간의 결합도 이해: 객체 생성과 관리를 이루는 기본 개념 및 실제 적용 (0) | 2023.02.20 |
Java 스프링부트 채팅 프로그램 확장하기: 여러 채팅방 구현, 컨트롤러 설정 및 테스트 방법 (2) (0) | 2023.02.20 |
Java 스프링부트를 이용한 채팅 프로그램 구축하기: 웹소켓 활용, 설정 및 테스트 방법 (1) (0) | 2023.02.20 |
댓글