본문 바로가기

Develop Study/Java44

(25.06.26) equals() 와 hashCode() 의 contract에 관하여 알고리즘 문제를 풀면서 공부를 하던 중,Java 에서 HashSet같은 Hash 자료구조에서의 객체간 비교를 위해 equals를 override 통해 참조값을 비교하지 않도록 만들었지만,추가로 contract를 살펴서 hashCode() 까지 오버라이드를 해야할 부분을 Java 명세를 읽어보면서 알게 되었다.관련 개념은 쉽지만, 인는 객체의 특성보다는 Java 매뉴얼에 가깝기 때문에 기억을 해야하므로 기록을 하고자한다. class Solution { public int solution(int[] arrows) { // 방향 하드코딩 int[] dx = {0, 1, 1, 1, 0, -1, -1, -1}; int[] dy = {1, 1, 0, -1, -1, -1, .. 2025. 6. 26.
(25.06.05) record 클래스 & DTO 활용 WebSocket 기반의 대화방에서 채팅을 구현하는데 있어서,Subscribe 한 클라이언트들에게 채팅을 보내는데 사용하는 responseDTO 클래스를 record 에 사용하는 것으로 참고자료에서 나타냈다.하지만, DTO에서 사용되는 컴포넌트들을 그대로 축약했다고 생각한 클래스라고 치부하기 보다는좀더 고려를 해야하는 부분이 많아서Java 에 최신으로 등재된 record 클래스에 대해서 설펴보고,중간중간 나의 궁금한 점들을 "주의 사항" 내지는 표로 정리했다. record 클래스boilerplate 코드를 줄이기 위해서 자동으로 필요한 객체들과 여러 필요한 내용을 생성해주는 특수한 불변 데이터 클래스(immutable data class)Java 14 preview 버전, Java 16 정식 버전(sta.. 2025. 6. 5.
(25.05.07) NumberFormatException 와 오버플로우 알고리즘 코드 연습을 하는 과정에서 더블 체크를 했음에도, NumberFormatException이 발생해타입변환이 이뤄지지 않아 당황을 했다. 오버플로우가 발생했다면, Java가 자동으로 처리해서 최종 값이 정확하지 않겠지만, 예외가 발생하지는 않는 것으로 알고 있었기 때문이다. 그 과정을 찾아보면서 좀더 관련 개념에 대해서 정리를 하고자 했다.Q. 성냥개비는 숫자를 나타내기에 아주 이상적인 도구이다. 보통 십진수를 성냥개비로 표현하는 방법은 다음과 같다.성냥개비의 개수가 주어졌을 때, 성냥개비를 모두 사용해서 만들 수 있는 가장 작은 수와 큰 수를 찾는 프로그램을 작성하시오.입력첫째 줄에 테스트 케이스의 개수가 주어진다. 테스트 케이스는 최대 100개 이다. 각 테스트 케이스는 한 줄로 이루어져 있고.. 2025. 5. 7.
(25.02.19) Java Spring Boot 에서 파일 읽어오기 & 내보내기 (CSV) 항상 데이터를 JSON 형식으로만 주고 받는 RESTful API에 익숙할 수 있지만,어플리케이션과 서비스에 따라서 인턴쉽회사에서 CSV기반의 파일로 여러 데이터를 한번에 DB에 옮기거나 읽으면서 처리를 해야하는 기능이 필요할 수도 있어, MongoDB 기반의 NoSQL기반의 DB와 연동한 상태에서Download Upload 를 실습하고자 했다.OpenCSV 라이브러리 의존성 추가 필수dependencies { implementation 'com.opencsv:opencsv:5.6' // OpenCSV 라이브러리 의존성 추가}Java Spring Boot 내에서 CSV 파일을 읽는 것 외 쓰는 작업도 유용하게 할 수 있기 때문에 사용CSVReader나 CSVWriter 클래스를 사용해서 데이터의 .. 2025. 2. 19.
(24.10.29) Comparator 인터페이스와 람다식 Java에서 @FunctionalInterface Annotation이 붙은 함수형 인터페이스는@FunctionalInterfaceinterface 인터페이스이름 { 인터페이스 정의 }// 람다식을 사용할 수 있는 함수형 인터페이스 정의를 할때 Annotation 사용 위와 같은 형태로 띄어지게 되고, 익명 클래스처럼 { } 안에 해당 함수형 함수에 해당하는  Runnable runnable = new Runnable() { @Override public void run() { System.out.println("Hello from the anonymous class!"); } }; .. 2024. 10. 29.
(24.10.10) TDD & DDD / Filter & Interceptor & AOP 비교해보기 계속 CS 관련 모의 면접과 면접 코칭을 받고 있는데알고 있는 CS 지식을 자연스럽게 말하는데 많이 어려우나특히 여러개를 비교하라는 점에서 정리가 안되어있기 때문에 당황을 하는 경우가 많았다. 특히, DDD, AOP, Filter, Interceptor등 산발적으로 정리가 된 정보를 보다 함께 정리를 하면서 스스로 공부하면서비교를 할 수 있도록 하면서 면접 피드백 용, 다음 면접 대비를 하도록 한다. 특히, 정의가 애매할 수 있는 interceptor에 한해서 좀더 다뤄보면서 정리했다. TDD(Test-Driven Development) & DDD (Domain-Driven Design)TDD(Test-Driven Development)테스트 주도 개발실제 코드를 작성, 구현하기 전에 먼저 테스트, 또는.. 2024. 10. 10.
(24.08.09)[17주차] WebSocket과 실시간 메시지 구조 프로젝트를 진행하면서 사용자의 화면단과 서버의 데이터 요청응답이 필요한 기능을 사용이 필요했다.특히, 사용자가 포함된 그룹에서 그룹내 실시간 채팅 기능 구현이 필요해지면서 WebSocket을 사용해서 구현을 했다. 관련해서 코드 구현방향은 해당 담당자의 개발로 진행이 되었지만, 관련해서 내가 부족할 수 있는 이론과 작동 방식에 대해서 한번더 짚고 넘어가기 위해 정리WebSocket웹을 통한 클라이언트(브라우저) - 서버 간 실시간으로 양방향 통신을 가능하게 하는 기술즉, Stateless HTTP 통신과 달리 Stateful 프로토콜클라이언트HTTP가 Request-Response 의 단방향 통신 방식임에 반해 WebSocket을 통해 한번의 연결로 클라이언트-서버 간 지속적인 양방향 통신이 가능따라서,.. 2024. 8. 9.