목록자바 (19)
영권's
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b7kWaa/btryxIZEhgm/wlQIeK6bqye5kribHLsAYK/img.jpg)
아이템 2. 생성자에 매개 변수가 많다면 빌더를 고려하라. 정적 팩토리와 생성자에는 선택적 매개변수가 많을 경우 적절히 대응하기 어렵다는 똑같은 제약이 있다. 예를 들어, 식품 영양 정보를 표현하는 클래스는 1회 내용량, n회 제공량, 1회 제공량당 칼로리 같은 필수 항목과 지방, 트랜스지방, 포화지방, 콜레스테롤 나트륨 등등 20개가 넘는 선택항목으로 이루어진다. 그런데 대부분 제품은 이 선택항목 중 대다수의 값이 그냥 0이다. 이런 클래스용 생성자 혹은 정적 팩토리는 프로그래머들은 점층적 생성자 패턴(telescoping constructor pattern)을 사용했다. 필수 매개변수만 받는 생성자, 필수 + 선택 1개, 필수 + 선택 2개 ... 과 같은 형태로 전부다 받는 생성자 까지 늘려가는 방..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/J8yz4/btrygubfEbG/V5WZDTP0xVouZWZfzk0qRk/img.jpg)
2장 객체 생성과 파괴 객체를 만들어야 할 때와 만들지 말아야 할 때를 구분하는 법, 올바른 객체 생성법, 불필요한 생성을 피하는 방법, 제때 파괴됨을 보장하고 파괴전에 수행해야 할 작업을 관리하는 방법을 알아본다. 아이템 1 (생성자 대신 정적 팩토리를 고려하라) 클라이언트가 클래스의 인스턴스를 얻는 전통적 수단은 public 생성자다. 하지만 클래스는 생성자와 별도로 정적 팩토리 메서드(static factory method)를 제공할 수 있다. 해당 클래스의 인스턴스를 반환하는 단순한 정적 메서드이다. // Boolean 객체를 반환하는 정적 팩토리 메서드 public static Boolean valueOf(boolean b){ return b ? Boolean.TRUE : Boolean.FALS..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/4yCIH/btrkjXCBdmd/23lPq261gtL6hjx1u2AIFk/img.png)
제가 개인적으로 공부하면서 헷갈리거나 잘 모르는 내용을 정리한 것입니다. ServletContext 서블릿 컨텍스트(ServletContext)란 하나의 서블릿이 서블릿 컨테이너와 통신하기 위해서 사용되어지는 메서드들을 가지고 있는 클래스가 바로 ServletContext다. 여러 서블릿에서 공유할 수 있는 정보를 담는 객체이다. (공식문서 : https://docs.jboss.org/jbossas/javadoc/7.1.2.Final/javax/servlet/ServletContext.html?is-external=true) 이미 서블릿과 서블릿 컨테이너를 아시는 분들이라면 이해를 잘 하시겠지만 저는 잘 이해가 안됐습니다. 그래서 한번 찾아봤습니다. 서블릿은 예전에는 정적 페이지로만 웹 서버에서 응답이 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dZapDA/btrg1ZY0HNq/MqnvLY53xB2fwUWfxvZcb0/img.png)
JPA는 EntityManagerFactory를 통해서 EntityManager를 생성할 수 있고 EntityManager는 내부적으로 JDBC를 사용해서 데이터베이스와의 통신을 하게된다. 영속성 컨텍스트란? JPA를 이해하는데 가장 중요한 언어 "엔티티를 영구 저장하는 환경" 이라는 뜻 EntityManager.persist(entity) 사실 DB에 저장한다는 뜻이 아니라, 영속성 컨텍스트를 통해 entity를 영속화 한다는 뜻이다. persist 메서드는 사실 entity를 디비에 저장하는게 아니라 영속성 컨텍스트라는 곳에 저장하는 것이다. 영속성 컨텍스트는 논리적인 개념이고 눈에 보이지 않고 EntityManager를 통해서 영속성 컨텍스트에 접근할 수 있다. 엔티티의 생명주기 비영속(new/tr..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/5m3tO/btrfsd5ypbn/Ls6kIQld0Pde8TbbOeZpO0/img.png)
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(..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bcJyeQ/btrfpg9Cg60/uj5d4VC3MSmSLHEbFM1d5k/img.png)
Java Stream Stream은 어떤 연속된 데이터를 처리하는데 필요한 오퍼레이션의 모음이라고 생각하면 좋다. 그 자체가 데이터가 아니고 컬렉션 안에 있는 데이터들을 소스로 사용해서 어떤 처리를 하는것이다. 예를 들어 어떤 데이터가 있다고 가정하고 어떤 컨베이어 벨트에 흘려 보내는데 데이터에 각 작업을 한다. 1. 색을 칠하고 2 반으로 나누고 3. 컨테이너에 담는 과정을 하는 작업. 여기서 처리하는 것 자체가 Stream이라고 생각하면 좋다. 중개 오퍼레이션 Stream을 리턴한다. Stateless / Stateful 오퍼레이션으로 더 상세하게 구분할 수 있다.(대부분은 Stateless지만 distinct나 sorted 처럼 이전 이전 소스 데이터를 참조해야 하는 오퍼레이션은 Stateful 오..