Java 28

[Java] final 불변 객체를 사용해야하는 이유

불변 객체는 소프트웨어 설계에서 중요한 개념이라고 생각합니다.실수를 예방하고 로직 구현에 집중할 수 있는 장점을 가지고 있는 불변 객체에 대해 알아보겠습니다. 🤓  불변 객체(Immutable Object)란?불변 객체는 생성된 이후에는 상태가 변경되지 않는 객체를 의미합니다.즉, 객체의 상태가 한번 설정되면 수정할 수 없으며, 객체의 필드 값이 불변으로 유지됩니다.불변 객체는 설계와 구현에 있어서 중요한 원칙으로 다양한 장점으로 인해 많이 사용됩니다.불변 객체의 특징 상태 변경 불가능객체가 생성된 이후에는 내부 상태를 변경할 수 없습니다.스레드 안전성여러 스레드에서 동시에 접근해도 안전합니다.복잡성 감소상태를 변경하지 않기 때문에 코드가 단순해지고, 디버깅과 유지보수가 용이합니다.불변 객체를 사용하는..

Backend/Java 2024.08.10

[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] 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

[Baekjoon] 1049번 기타줄 (Java)

https://www.acmicpc.net/problem/1049 1049번: 기타줄 첫째 줄에 N과 M이 주어진다. N은 100보다 작거나 같은 자연수이고, M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에는 각 브랜드의 패키지 가격과 낱개의 가격이 공백으로 구분하여 주 www.acmicpc.net 기타줄이라는 문제 Java로 풀이하겠습니다. 이 문제는 N개 이상의 기타 줄을 최소 비용으로 구입하는 방법을 찾는 문제입니다. 가장 적은 비용으로 구매하는 방법은 다음과 같습니다. 패키지로 구입하는 것이 낱개로 구입하는 것보다 이득이면 패키지로만 구입합니다. 낱개로 구입하는 것이 패키지로 구입하는 것보다 이득이면 낱개로만 구입합니다. 패키지와 낱개를 조합하여 구입하는 것이 이득이면 패키지와 낱..