Java19 [0621] 카드 추천 기능 개발 Spring과 EntityManager엔티티 매니저는 Singleton이어도 Spring과 엮어서 쓰면 동시성 문제와 관련 없이 트랜잭션 단위로 분리되서 동작함.Spring이 주입해주는 엔티티 매니저는 실제 동작 시점에 진짜 엔티티 매니저를 찾아주는 프록시용 가짜 엔티티 매니저임.이 가짜 엔티티 매니저는 실제 사용 시점에 트랜잭션 단위로 실제 엔티티 매니저(영속성 컨텍스트)를 할당해줌. Repository 분리에 관하여Spring Data JPA와 QueryDSL을 사용할 때, CustomRepository를 사용하는 것에만 종속되지말고, 특정 화면이나 기능에만 사용되는 쿼리문이라면 별도의 QueryRepository 클래스를 생성하여 사용하는 것도 고려해보자. Java 2024. 6. 21. [Java] Enum에 대해서 Enum이란? 프로그래밍을 할 때 상수를 정의해야 하는 경우 보통 final static int/String 과 같은 방식으로 정의한다. 그리고 Enum은 위와 같이 상수로 정의한 데이터들중 연광성이 있는 데이터들을 한데 모아 관리할 수 있도록 하는 역할을 하는 Java API 이다. Enum은 열거형이라고 불리며, 기존에 상수로 정의하던 기본 자료형의 데이터를 효과적으로 다룰 수 있게 해준다. Enum의 장점 Enum을 사용함으로써 얻을 수 있는 이점은 아래와 같다. 1. Type Safety Enum은 컴파일 시점에 타입 안정성을 보장한다. 지정해놓은 특정 값만 사용 가능하므로 컴파일 에러나 런타임 에러를 줄여준다. public enum Role { ADMIN("관리자"), USER("사용자"); p.. Java 2023. 11. 9. Getter과 Setter를 지양해야되는 이유 들어가기 전 Java에 대해 공부하다 보니 'Getter와 Setter를 지양하라'는 말을 알게 됐다. 책 '소트웍스 앤솔러지'의 객체지향 생활체조 원칙에도 포함되어 있는데, 왜 Getter와 Setter를 지양하라는 것일까? 이전에 Spring을 공부하면서 Setter는 데이터의 무결성을 해칠 가능성이 있기 때문에 지양해야 된다는 것은 많이 들었지만 Getter를 지양하라는 것은 생소했다. 그래서 이번 기회에 Getter / Setter를 지양해야 되는 이유와 그에 대한 대안을 알아보려 한다. Getter / Setter를 왜 지양하라는 거지? 객체를 만들고 필드를 선언할 때, 우리는 보통 캡슐화를 위해 private 접근자로 선언한다. 하지만 Getter / Setter는 다른 객체에서 데이터를 받기.. Java 2023. 11. 1. [Java] Arrray와 ArrayList Array와 ArrayList의 공통점 요소를 추가, 조회할 때의 성능이 비슷하다. 중복되는 요소를 저장할 수 있다. null 값을 저장할 수 있고, index를 사용하여 값을 참조할 수 있다. 순서가 지정되지 않는다. Array와 ArrayList의 차이점 Array ArrayList 사이즈 초기화시 고정 int[] arr = new int[5]; 초기화시 사이즈를 표시하지 않음. 크기가 가변적임. ArrayList arrList = new ArrayList(); 속도 초기화시 메모리에 할당되어 ArrayList보다 속도가 빠름 데이터 추가시 메모리를 재할당해서 Array보다 속도가 느림 크기 변경 크기 변경 불가 데이터 추가, 삭제시 크기 변경 가능 다차원 다차원 가능 int[][] arr = new.. Java 2023. 10. 26. [Java] 스트림에 대해서 스트림이란? 스트림은 Java 8 API에 추가된 기능으로써, 컬렉션 및 배열의 요소를 반복 처리하기 위해 사용할 수 있다. 예를 들어 List 컬렉션에서 요소를 반복 처리하기 위해 스트림을 사용하게 된다면 아래와 같이 사용할 수 있다. Stream stream = list.stream(); stream.forEach(item -> //아이템 처리); List 컬렉션의 stream() 메소드로 Stream 객체를 얻은 뒤에, forEach() 메소드로 요소를 어떻게 처리할지를 람다식으로 정의하는 것을 볼 수 있다. 한가지 예시 코드를 통해 스트림을 사용하기 전과 후를 비교해보자. Student 클래스에는 이름과 성적 멤버 변수가 있고, main 메소드 내에서 classMembers 리스트에 학급내의 학생.. Java 2023. 10. 16. [Java] 람다식에 대해서 람다식이란? 람다식은 함수형 프로그래밍 기법을 지원하는 자바의 문법 요소다. 람다식을 설명하기 전에 함수와 메서드에 대해 생각해보자. 함수(function)는 기능 또는 동작을 정의한 일련의 명령 모음이고, 메서드(method)는 클래스 또는 인터페이스 내에 정의된 함수를 말한다. 자바에서 메서드를 사용하려면 항상 클래스 객체를 먼저 생성한 후, 생성한 객체로 메서드를 호출해야 한다. 만약 모든 클래스에서 공통적으로 사용하는 기능이 있다면 모든 클래스마다 메서드를 정의해야 한다. 그런데 이 공통 기능을 일반적인 함수처럼 독립적으로 만든 후 모든 클래스에서 공통적으로 사용할 수 있다면 모든 클래스에서 메서드를 정의할 필요가 없어서 효율적일 것이다. 하지만 자바는 객체 지향 언어이므로 모든 함수는 클래스 내.. Java 2023. 10. 14. [Java] Map<K, V> 컬렉션 인터페이스 Map 컬렉션의 특징 Key와 Value 한 쌍으로 데이터를 저장 Map 컬렉션은 Key(키)와 Value(값)의 한 쌍으로 데이터를 저장한다. 이 때 한 쌍의 데이터를 '엔트리(entry)'라고 하며, Map.Entry 타입으로 정의된다. 즉, Map는 데이터를 엔트리 단위로 입력받는 것이다. Key는 중복 저장 불가, Value는 중복 가능 Map 컬렉션은 데이터를 구분하는 기준이 Key 값이기 때문에 List에서 index가 중복되지 않았던 것처럼 Key 값도 중복될 수 없다. 하지만 Value 값은 Key 값으로 구분해 가져올 수 있으므로 중복이 허용된다. Map 인터페이스의 주요 메서드 구분 리턴 타입 메서드명 기능 데이터 추가 V put(K key, V value) 입력매개변수의 (key, v.. Java 2023. 10. 12. [Java] Set 컬렉션 인터페이스 Set 컬렉션의 특징 Set는 List의 동일한 타입의 묶음이라는 특징은 갖고 있지만 ArrayList처럼 인덱스 정보를 포함하고 있지 않은 집합의 개념과 같은 컬렉션이다. 인덱스 정보가 없으므로 데이터가 중복해서 저장되면 중복된 데이터중 특정 데이터를 꺼낼 방법이 없다. 따라서 동일한 데이터의 중복된 저장을 허용하지 않는다. Set의 주요 메서드 구분 리턴 타입 메서드명 기능 데이터 추가 boolean add(E element) 매개변수로 입력된 원소를 리스트에 추가 boolean addAll(Collection Java 2023. 10. 11. [Java] 컬렉션 프레임워크와 List 컬렉션 프레임워크란? 컬렉션(collection)은 동일한 타입을 묶어 관리하는 자료구조를 말한다. 하지만 배열도 동일한 타입을 묶어 관리하지만 컬렉션이라 부르지않는다. 컬렉션이 배열과 구분되는 가장 큰 특징은 데이터의 저장 용량(capacity)을 동적으로 관리할 수 있다는 것이다. 배열은 생성 시점에 저장 공간의 크기를 확정해야 하고, 나중에 변경할 수 없는 반면, 컬렉션의 저장 공간은 메모리 공간이 허용하는 한 데이터의 개수에 따라 동적으로 변화할 수 있다. 프레임워크(framework)는 클래스 또는 인터페이스를 생성하는 과정에서 설계의 원칙 또는 구조에 따라 클래스 또는 인터페이스를 설계하고, 이렇게 설계된 클래스와 인터페이스를 묶어 놓은 개념이다. 정리하면 아래와 같다. 컬렉션 동일한 타입을 .. Java 2023. 10. 10. [Java] 제네릭(Generic)에 대해서 제네릭은 왜 필요할까? 자바에서는 여러 클래스와 인터페이스를 제공하고 있다. 다양한 클래스와 인터페이스를 활용하고자하면 많은 가짓수의 클래스를 생성하거나 오버로딩을 수행해야 할 것이다. 이러한 비효율성을 해결해주는 문법 요소가 제네릭이다. 예를 들어 사과와 연필을 각각 저장 및 관리하려고 할 때를 생각해보자. class Apple{} class Pencil{} class Goods1 { private Apple apple = new Apple(); public Apple get() { return apple; } public void set(Apple apple) { this.apple = apple; } } class Goods2 { private Pencil pencil = new Pencil(); .. Java 2023. 10. 6. [Java] 쓰레드의 상태 쓰레드의 상태 값 쓰레드는 객체가 생성, 실행, 종료되기까지 다양한 상태를 가진다. 각 쓰레드의 상태는 Thread.State인 enum 타입으로 정의돼 있으며, Thread의 인스턴트 메서드인 getState()로 가져올 수 있다. 이 메서드는 쓰레드의 상태를 Thread.State 타입에 저장된 문자열 상숫값중 하나로 반환한다. 쓰레드의 6가지 상태 쓰레드가 가질 수 있는 상태는 6가지가 있으며 각 상태의 관계는 위 그림과 같다. NEW, RUNNABLE, TERMINATED public class NewThread { public static void main(String[] args) { // 쓰레드 상태 저장 Thread.State state; // 1. Thread 객체 생성(NEW) Thre.. Java 2023. 10. 5. [Java] 프로그램과 프로세스, 쓰레드에 대해서 프로그램과 프로세스의 개념 프로그램(program)과 프로세스(process), 쓰레드(thread)의 개념을 명확히 알기 위해서는 우선 컴퓨터의 구조를 이해할 필요가 있다. 컴퓨터를 이루는 주요 구성 요소로는 중앙 처리 장치(CPU), 메모리(memory) 그리고 하드디스크(hard disk)로 총 3가지가 있다. 이 중에 CPU는 연산을 수행함으로써 실제 프로그램을 실행하는 장치로, 세 구성 요소중 가장 빠른 속도로 동작한다. 반면에 데이터의 저장 역할을 수행하는 하드디스크는 상대적으로 가장 낮은 속도로 동작한다. CPU와 하드디스크의 속도 차이는 매우 크기때문에 하드디스크에 저장된 데이터가 CPU로 바로 이동된다면 CPU의 처리 속도는 하드디스크의 느린 속도에 맞춰질 것이다. 따라서 중간에 데이터를.. Java 2023. 10. 2. 이전 1 2 다음