Java

· Java
equals와 == 의 차이 Java에서의 동등성의 개념을 아는가? 쉽게 말해 두 객체를 비교할 때 온전히 같다면 동일하고, 객체는 다르지만 내부 메시지(필드 값)가 같다면 동등하다고 볼 수 있다. == (등가 비교 연산자) 비교 연산자는 두 피연산자를 비교하는 데 사용되는 연산자로서, 피연산자의 값이 같은지 또는 다른지를 비교하는 연산자가 등가 비교 연산자로, Java는 !=와 ==를 제공하고 있다. 사실 ==은 기본형은 물론, 참조형에도 사용할 수 있다. 보통, 주소값을 비교하기 위해 사용된다. equals() Object 클래스에 포함된 메서드로, 매개변수로 객체의 참조변수를 받아 비교하여 그 결과를 boolean으로 알려주는 메서드이다. public boolean equals(Object obj)..
· Java
equals(), hashcode Object Class에 정의된 equals의 설명을 읽어보자 기본적으로 a.eqeuals(a)의 경우, a.equals(b)가 true일때 b.eqauls(a) 또한 true를 반환해야한다는 조건이 있다. 또한 동등한 비교에 사용되는 정보가 수정되지 않는 한, null이 아닌 참조 값 x 및 y에 대해 x.equals(y)의 여러 호출이 일관되게 true를 반환하거나 false를 일관되게 반환해야하는 일관성을 강조한다. 여기서 우리가 눈여겨 봐야할 부분은 아래부분이다. Note that it is generally necessary to override the hashCode method whenever this method is overridden, so as to ..
· Java
TODO 리스트를 제작하는 스터디를 진행하며 In-Memory 환경으로 DB를 구성해야 하기 위해 구조체에 대한 고민이 있었다. 맨 처음의 경우 HashTable을 사용하려고 했다. 얼핏 아는 지식으로 HashMap의 경우 멀티 스레드 환경에서는 사용할 경우 동시성이 보장되지 않기 때문에 고려 대상이 아니었기에 HashTable을 사용하고자 하였다. 하지만 이에 대해 공부를 하며 알게된 사실에 대해 정리하고자한다. 🤔우선 왜 HashMap은 안씀? HashMap의 경우 비동기화되어 synchronized를 보장받지 못해 멀티스레드 환경에서 안전성을 보장받지 못한다. 여러 스레드가 동시에 HashMap 객체를 수정하거나 삽입할 수 있어 무결성에 문제가 생김 물론 투두 리스트가 그만한 동시성이슈가 발생할까?..
· Java
Record Java 진영에서 JDK 16부터 정식스펙으로 새롭게 추가 클래스 선언 방법이다. 보일러 플레이트 코드(Bolierplate Code)를 줄이는 것을 목표로 도입되었다 💡 Bolierplate Code 코드의 재사용성이 높고 변경이 적은 코드 Java 진영에서는 getter, setter, equals, hashCode, toString 이나 접근제어자가 이에 해당 프로젝트의 진행을 위해선 반드시 필요하지만 반복적으로 작성되어야 하기 때문에 개발 효율성을 저하시키는 요소로 판단된다. 물론, lombok이나 IDE의 도움을 받아 코드를 간결하게 만들 수 있지만 이는 언어 자체의 해결방법이라기 보다는 라이브러리의 이용을 통해 해결된 부분 Record의 핵심 목표 객체 지향의 사상에 맞게 데이터를..
· Java
이번 유니톤 10기의 해커톤대회를 진행하며, 상당히 어이없는 에러를 일으켰었다. 로직중 Server-Sent-Events를 구현하는데 있어, 전략으로 SseEmitter를 선택하였고 한 유저당 하나의 객체를 세션에 저장시키기위해 ConcurrentHashMap을 사용하여 유저의 닉네임(PK값)과SseEmitter 객체를 매핑시켜 관리하였다. 이중 중복 저장을 방지하기 위하여 아래와 같은 유효성 검사 로직을 작성하였는데, 해당 메서드의 반환타입이 Boolean 즉, Wrapper 클래스타입인게 문제였다. 그렇기에 조건문에 Null이 허용되어, 조건문에서 NPE가 발생하는 경우가 생겨버렸다. 당연하게도 원시타입으로 바꾸어 간단히 해결할 수 있는 Trouble이었지만, 객체로서 사용하지않아도 됐다는 점에서 ..
· Java
레코드란? 레코드가 무엇인지 모르는 분들을 위해 간략히 설명을 하자면 다음과 같다. 1. 불변(immutable) 데이터 객체를 쉽게 생성할 수 있게 돕는 새로운 타입의 클래스 파일이다. 2. JDK 16에서 정식 스펙으로 포함되었기 때문에 프로젝트에서 사용하기 위해선 build.gradle에서 반드시 16이상의 자바 버전을 맞추어 줘야한다. 기존의 불변 데이터 객체를 만들기 위해선 class를 하나 생성하고 여러 작업을 해줘야하며 그로 인해 생기는 불편한 점들이 다수 있었는데 정리해 보자면 다음 코드를 보면서 설명하겠다. 일반 객체 예시 @Getter @Setter @NoArgsConstructor public class PeopleDTO { @Getter @Setter public static cla..
LEE티씨
'Java' 카테고리의 글 목록