목록자바/JAVA (16)
영권's
아이템 2. 생성자에 매개 변수가 많다면 빌더를 고려하라. 정적 팩토리와 생성자에는 선택적 매개변수가 많을 경우 적절히 대응하기 어렵다는 똑같은 제약이 있다. 예를 들어, 식품 영양 정보를 표현하는 클래스는 1회 내용량, n회 제공량, 1회 제공량당 칼로리 같은 필수 항목과 지방, 트랜스지방, 포화지방, 콜레스테롤 나트륨 등등 20개가 넘는 선택항목으로 이루어진다. 그런데 대부분 제품은 이 선택항목 중 대다수의 값이 그냥 0이다. 이런 클래스용 생성자 혹은 정적 팩토리는 프로그래머들은 점층적 생성자 패턴(telescoping constructor pattern)을 사용했다. 필수 매개변수만 받는 생성자, 필수 + 선택 1개, 필수 + 선택 2개 ... 과 같은 형태로 전부다 받는 생성자 까지 늘려가는 방..
2장 객체 생성과 파괴 객체를 만들어야 할 때와 만들지 말아야 할 때를 구분하는 법, 올바른 객체 생성법, 불필요한 생성을 피하는 방법, 제때 파괴됨을 보장하고 파괴전에 수행해야 할 작업을 관리하는 방법을 알아본다. 아이템 1 (생성자 대신 정적 팩토리를 고려하라) 클라이언트가 클래스의 인스턴스를 얻는 전통적 수단은 public 생성자다. 하지만 클래스는 생성자와 별도로 정적 팩토리 메서드(static factory method)를 제공할 수 있다. 해당 클래스의 인스턴스를 반환하는 단순한 정적 메서드이다. // Boolean 객체를 반환하는 정적 팩토리 메서드 public static Boolean valueOf(boolean b){ return b ? Boolean.TRUE : Boolean.FALS..
JPA는 EntityManagerFactory를 통해서 EntityManager를 생성할 수 있고 EntityManager는 내부적으로 JDBC를 사용해서 데이터베이스와의 통신을 하게된다. 영속성 컨텍스트란? JPA를 이해하는데 가장 중요한 언어 "엔티티를 영구 저장하는 환경" 이라는 뜻 EntityManager.persist(entity) 사실 DB에 저장한다는 뜻이 아니라, 영속성 컨텍스트를 통해 entity를 영속화 한다는 뜻이다. persist 메서드는 사실 entity를 디비에 저장하는게 아니라 영속성 컨텍스트라는 곳에 저장하는 것이다. 영속성 컨텍스트는 논리적인 개념이고 눈에 보이지 않고 EntityManager를 통해서 영속성 컨텍스트에 접근할 수 있다. 엔티티의 생명주기 비영속(new/tr..
record Java 16에서부터는 record라는 형태의 클래스를 사용할 수 있다. record 선언의 헤더에 내용에 필요한 값을 지정합니다. 그러면 적절한 접근자, constructor, equals, hashCode, and toString 메서드가 자동으로 생성됩니다. 레코드의 필드는 클래스가 단순한 "데이터 운반" 역할을 하기 때문에 final 필드입니다. 예를 들어 다음과 같이 생성한 클래스와 record는 동일합니다. record Rectangle(double length, double width) { } public final class Rectangle { private final double length; private final double width; public Rectangle(..
Java Stream Stream은 어떤 연속된 데이터를 처리하는데 필요한 오퍼레이션의 모음이라고 생각하면 좋다. 그 자체가 데이터가 아니고 컬렉션 안에 있는 데이터들을 소스로 사용해서 어떤 처리를 하는것이다. 예를 들어 어떤 데이터가 있다고 가정하고 어떤 컨베이어 벨트에 흘려 보내는데 데이터에 각 작업을 한다. 1. 색을 칠하고 2 반으로 나누고 3. 컨테이너에 담는 과정을 하는 작업. 여기서 처리하는 것 자체가 Stream이라고 생각하면 좋다. 중개 오퍼레이션 Stream을 리턴한다. Stateless / Stateful 오퍼레이션으로 더 상세하게 구분할 수 있다.(대부분은 Stateless지만 distinct나 sorted 처럼 이전 이전 소스 데이터를 참조해야 하는 오퍼레이션은 Stateful 오..
자바 Concurrent 프로그래밍 Concurrent 소프트웨어 동시에 여러 작업을 할 수 있는 소프트웨어 예) 웹 브라우저로 유튜브를 보면서 키보드로 타이핑을 할 수 있다. 예) 녹화를 하면서 인텔리J로 코딩을 하고 워드에 적어둔 문서를 보거나 수정할 수 있다. 자바에서 지원하는 Concurrent 프로그래밍 멀티 프로세싱(ProcessBuilder) 멀티 쓰레드 자바 멀티쓰레드 프로그래밍 Thread / Runnable 기존 자바에서 멀티 쓰레드 사용법 // Thread 상속 public static void main(String[] args) { MyThread myThread = new MyThread(); MyThread.start(); System.out.println("Hello : " +..