본문 바로가기

자바28

[자바] HashMap 동작 원리 정리 자바에서 HashMap은 키에 대한 해시 값을 사용하여 값을 저장하고 조회하며, 키-값 쌍의 개수에 따라 동적으로 크기가 증가하는 associate array입니다. 연관 배열(associate array) : 키 하나와 값 하나가 연관되어 있으며 키를 통해 연관되는 값을 얻을 수 있는 자료 구조 데이터를 저장할 버킷을 찾는 방법 HashMap은 객체의 hashCode() 메서드의 반환 값을 사용한 hashCode() % BUCKET_SIZE 수식을 사용하여 데이터를 저장/조회를 할 버킷 위치를 계산합니다. 위 수식을 사용하여 데이터를 BUCKET_SIZE 내의 위치에 값을 저장할 수 있게 됩니다. 해시 값 충돌이 발생한다면? 보통 Hash 값 충돌이 발생하면 개방 주소법, 체이닝 기법을 사용하여 충돌을.. 2022. 10. 30.
[Java] BigDecimal, 정확한 실수를 표현하는 방법 최근 개인 프로젝트를 진행하면서 오차가 없어야 하는 실수를 다뤄야 할 일이 있었는데, 무심코 해당 데이터들을 double 타입으로 선언하다가 'double 타입은 오차가 생길 수 있다'라는 문장이 머릿속에 스쳐지나 갔습니다. 이를 계기로 BigDecimal 에 대해 찾아보게 되었고, 기본적인 사용법에 대해 정리하였습니다. BigDecimal이란? 자바에서 실수 타입으로 보통 double형을 많이 사용합니다. 그런데 double형은 정밀도가 최대 13자리이고, 근사치를 저장하기 때문에 오차가 발생하여 크고 정확한 실수가 필요한 경우 예상치 못한 문제가 발생할 수 있습니다. 이런 경우 BigDecimal을 사용하여 정확한 실수 값을 표현할 수 있습니다. BigDecimal 클래스 내부를 살펴보.. 2022. 6. 9.
ObjectMapper에서 LocalDateTime 타입 미지원 에러 해결하기 class LocalDateTimeDTO { @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss") LocalDateTime localDateTime; public MyDTO(LocalDateTime localDateTime) { this.localDateTime = localDateTime; } public LocalDateTime getLocalDateTime() { return localDateTime; } } @Test void objectMapperTest() throws JsonProcessingException { ObjectMapper objectMapper = new ObjectMapper(); objectMapper.writeValueAsString(LocalD.. 2022. 6. 2.
일급 컬렉션(First Class Collection)이란? 일급 컬렉션이란? 일급 컬렉션이란 컬렉션을 Wrapping하면서 컬렉션 외에 다른 멤버 변수가 없는 클래스를 말합니다. 예를 들어 다음과 같이 Study 클래스가 있고, 멤버 변수 중 하나로 스터디원 member에 대한 리스트를 가지고 있다고 해보겠습니다. public class Study { private String name; List members; // ... } class Person { String name; String sex; int age; // ... } 여기서 members 리스트를 일급 컬렉션으로 만들어 보겠습니다. 방법은 앞서 설명했듯이 일급 컬렉션으로 만들려면 members 리스트를 Wrapping 하는 클래스를 만들고, 해당 클래스는 members 리스트 외에 다른 멤버 변수를.. 2022. 5. 27.
Mockito 사용해보기 Mockito 사용해보기 Mockito는 자바에서 단위 테스트 코드를 작성할 때 많이 사용되는 Mock 프레임워크 중 하나입니다. Mock이란 진짜 객체와 비슷하지만, 프로그래머가 그 객체의 행동을 관리하는 가짜 객체를 말합니다. Mock을 사용하여 테스트 코드를 작성하면 객체가 어떤 행동을 할 때 프로그래머가 의도한 결과를 반환하도록 정의하여 사용할 수 있습니다. 그렇다면 Mock은 어떤 경우에 사용할까요? 만약 단위 테스트 코드를 작성하는데 애플리케이션에서 데이터베이스나 외부 API를 사용하는 경우, API 호출과 Repository 객체를 Mock으로 만들어 사용하면 외부 환경에 영향을 받지 않고 테스트를 수행할 수 있게 됩니다. Mockito 의존성 추가하기 스프링부트를 사용하는 경우 spring.. 2022. 4. 17.
[자바] String, StringBuffer, StringBuilder String String 타입은 자바에서 제공하는 문자열 타입으로 Immutable(불변) 하다는 특성을 가지고 있습니다. 이러한 특성 때문에 String 타입 문자열은 덧셈과 같은 연산이 일어나게 되면 매 연산마다 새로운 객체가 생성되게 됩니다. 예를 들어 다음과 같은 코드를 실행한다고 해봅시다. public class App { public static void main(String[] args) { String a = "Hello "; a += "World"; a += "!!"; System.out.println(a); //출력 : Hello World!! } } 얼핏 보면 단순히 "Hello " 문자열에 "World", "!!" 문자열이 더해져서 출력되는 것 같지만 ConstantPool을 살펴보.. 2022. 3. 21.