Backend/Java 29

[Java] 일급 컬렉션(First-Class Collection)이란?

코드의 품질을 높이기 위해 고민하던 도중 일급 컬렉션을 활용해 보기로 결정하였습니다.🙌일급 컬렉션에 대해 알아보도록 하겠습니다.  일급 컬렉션이란?일급 컬렉션(First-Class Collection)은 하나의 컬렉션(List, Set, Map 등)을 캡슐화한 크래스를 의미합니다.즉, 컬렉션 자체를 클래스로 래핑(wrapping)하여 컬렉션과 관련된 로직을 해당 클래스 내부에 숨기는 것입니다.이러한 일급 컬렉션은 단일 책임 원칙(Single Responsibility Principle)을 지키며, 컬렉션을 직접 다루는 것보다 더 많은 장점을 제공합니다. 왜 일급 컬렉션을 사용해야 하는가?캡슐화의 응집도일급 컬렉션은 컬렉션과 관련된 로직을 한 곳에 모아두기 때문에 응집도가 높아지고 캡슐화가 잘 유지됩니다..

Backend/Java 2024.07.31

[Java] 객체 지향 설계(Object-Oriented Design, OOD)

소프트웨어 개발에서 객체 지향 설계는 매우 중요한 원칙입니다.👀 객체 지향 설계는 코드의 재사용성, 확장성, 유지보수성을 높여주며, 복잡한 시스템을 쉽게 이해하고 관리할 수 있게 합니다. 객체지향 설계의 주요 개념클래스(class)와 객체(object)클래스는 객체를 생성하기 위한 템플릿입니다. 클래스는 객체의 속성(필드)과 행동(메서드)을 정의합니다. 예를 들어, Car 클래스는 color, model 등의 속성과 drive(), stop() 등의 메서드를 가질 수 있습니다.public class Car { private String color; private String model; public Car(String color, String model) { this.color = color; this...

Backend/Java 2024.07.28

[Java] ConcurrentHashMap 멀티스레드 환경에서 안전한 해시맵

HashMap은 여러 스레드가 동시에 접근할 때 문제를 일으킬 수 있다는 사실 알고 계시나요??🤔멀티스레드 환경에서 안전하게 사용할 수 있는 해시맵 구현체 ConcurrentHashMap에 대해 알아보겠습니다.  ConcurrentHashMap 이란?ConcurrentHashMap은 자바 컬렉션 중 하나로, 여러 스레드가 동시에 안전하게 데이터를 읽고 쓸 수 있도록 설계된 해시맵입니다.일반적인 HashMap과 달리 멀티스레드 환경에서 동기화 문제를 해결해 줍니다.멀티스레드 환경에서 여러 스레드가 동시에 데이터를 수정하려고 하면, 데이터가 엉키거나 손실될 수 있습니다.이를 해결하기 위해 HashMap 대신 ConcurrentHashMap을 사용합니다. 기본 동작 방식ConcurrentHashMap은 내부..

Backend/Java 2024.07.28

[Java] computeIfAbsent 효율적인 데이터 캐싱과 값 처리

computeIfAbsent를 아시나요?🫥저는 자료구조를 좀 더 효율적으로 사용하려고 찾아보다가 발견한 메서드입니다!Java의 Map 인터페이스에 있는 메서드로 키가 없을 때만 값을 계산하여 맵을 추가하고, 키가 이미 존재하는 경우에는 기존의 값을 반환합니다. 이러한 기능은 데이터 캐싱, 복잡한 객체 생성, 그리고 데이터 동기화에 매우 유용하게 사용될 수 있습니다. computeIfAbsent의 사용법computeIfAbsent 메서드는 다음과 같은 시그니처를 가지고 있습니다.key : 맵에서 찾으려는 키입니다.mappingFuction: 값이 존재하지 않을 때 키를 기반으로 값을 생성하는 함수입니다.메서드는 키가 맵에 존재하지 않는 경우에만 mappringFunction을 호출하여 값을 생성하고, 생..

Backend/Java 2024.07.27

[Java] abstract class 와 interface class의 차이

추상 클래스와 인터페이스는 객체지향 프로그래밍에서 중요한 개념으로, 클래스의 다형성을 지원하고 코드의 재사용성을 높이는데 큰 역할을 합니다. 이 두 가지의 차이점을 명확히 이해하는 것은 효율적인 설계와 구현을 위해 필수적이라고 생각합니다!이번글에서는 두 클래스의 개념과 차이점에 대해 알아보도록 하겠습니다.🤓 추상 클래스(abstract class)추상클래스는 공통된 속성이나 동작을 정의하는 데 사용되는 클래스입니다. (다른 클래스들이 상속받아 사용할 수 있는 기본 틀 🧐)인스턴스를 직접 생성할 수 있으며, 상속을 통해 하위 클래스에서 구현되어야 하는 메서드를 포함할 수 있습니다.인스턴스 생성 불가추상 클래스 자체로는 객체를 생성할 수 없습니다.추상 메서드하나 이상의 추상 메서드를 포함할 수 있으며, ..

Backend/Java 2024.07.17

[Java] of와 from 메서드의 차이

코드 작업을 하던 중 명확하게 의미를 파악하고 사용하고 있지 않았던 부분에 궁금증이 들었습니다!Java에서 메서드 명명 규칙으로 of와 from 메서드의 확실한 용도가 무엇일까요? 🧐  of용도: 주로 입력 파라미터의 유효성을 검증하여 새로운 객체를 생성하는 정적 팩토리 메서드입니다.특징: 입력된 값을 기반으로 새로운 객체를 생성하며, 주로 변환 작업 없이 객체를 만듭니다.public class Money { private final int amount; private final String currency; private Money(int amount, String currency) { this.amount = amount; this.currency = cur..

Backend/Java 2024.07.04

[Java] Equals와 == 의 차이

Java를 사용하다 보면 데이터나 객체를 비교해야 할 때가 많습니다.이때 'equals'와 '=='를 어떻게 사용해야 하는지 헷갈리기 쉽습니다. 이 둘은 자주 사용되지만 용도가 다르기 때문에 제대로 이해하고 사용하는 것이 중요합니다. 'equals'와 '==' 에 대해 알아보겠습니다. '==' 연산자'==' 연산자는 주로 기본 타입(primitive types) 비교에 사용되며, 참조 타입(reference types) 비교에도 사용됩니다. 기본 타입 비교기본 타입의 값을 비교할 때 '=='를 사용하면 값이 동일한지 여부를 확인할 수 있습니다.int a = 5;int b = 5;System.out.println(a == b); // true, 참조 타입 비교참조 타입에서는 '=='를 사용하여 두 객체가 ..

Backend/Java 2024.05.25

[Java] Record란?

Java 14부터 도입된 Record에 대해 알아보겠습니다. Record란? 레코드(Record)는 데이터를 저장하고 전달하는 간단한 방법을 제공하는 새로운 형태의 클래스입니다. 레코드는 불변(immutable)하고 값(value) 기반의 객체를 표현하는 데에 주로 사용됩니다. Record 특징 간결한 문법 레코드는 클래스 선언을 간결하게 만듭니다. 불필요한 반복 코드를 줄여주고, 코드의 가독성을 향상해 줍니다. 자동 생성자, getter 및 equals(), hashCode(), toString() 메서드 레코드는 멤버 변수를 자동으로 생성하고, 생성자, getter 및 equals(), hashCode(), toString() 메서드를 자동으로 구현해 줍니다. 불변성(immutable) 레코드는 불변..

Backend/Java 2024.04.13

[Java] Primitive Type, Reference Type의 개념과 차이점

자바에서는 기본 데이터 타입(Primitive type)과 참조 데이터 타입(Reference type)으로 분류됩니다. 각각의 특징과 주요 데이터 타입에 대해 설명하겠습니다. Primitive Type (기본 데이터 타입) Primitive Type은 단일 값만을 가지고 있는 간단한 데이터를 나타냅니다. 이러한 타입들은 스택 메모리에 직접 값을 저장하며, 객체의 참조가 아닌 값을 저장합니다. 정수 타입(Integer Types) byte : 8비트, -128~ 127 short: 16비트, -32,768 ~ 32,767 int: 32비트, -2^31 ~ 2^31-1 long: 64비트, -2^63 ~ 2^63-1 byte byteValue = 120; short shortValue = 30000; in..

Backend/Java 2024.01.13