본문 바로가기

독후감

(15)
4. 인스턴스화를 막으려거든 private 생성자를 사용하라 가끔 정적 메서드와 정적 필드만을 담은 클래스가 필요할 경우가 있다. 유틸리티 클래스를 만들 때 주로 사용되는데, 이런 클래스들은 인스턴스화 되는 것을 되도록 막아야 한다. 자바에서는 생성자를 개발자가 작성하지 않아도, 내부적으로 생성자를 제공해준다. 그렇기에 이를 막기 위해서는 private로 생성자를 임의로 명시해주는 것이 좋다. 또한 이 방식은 상속을 불가능하게 만든다. 상속을 받으려면 해당 부모 클래스의 생성자를 호출할 수 있어야 하는데, private 선언을 통해 부모 클래스를 상속할 길이 막혀버린다. public class Utility { private Utility() { throw new AssertionError(); } } 결론 유틸리티 클래스들을 정적 메서드로 채우게 된다면 생성자는..
3. private 생성자나 열거 타입으로 싱글턴임을 보증하라 싱글턴(singleton)이란 인스턴스를 오직 하나만 생성할 수 있는 클래스이다. 싱글턴을 만드는 방식은 둘 중 하나다. 두 방식 모두 private으로 감추고, 인스턴스에 접근할 수 있는 수단으로 public static 멤버를 하나 만든다. public class Elvis { public static final Elvis INSTANCE = new Elvis(); private Elvis() {...} public void leaveTheBuilding() {...} } 생성자는 INSTANCE 를 초기화할 때 한 번만 호출된다. 그렇기에 전체 시스템에서 해당 클래스는 하나만 생성됨을 보장할 수 있게된다.(단 향후 배울 리플랙션에서 private 생성자를 호출하는 법을 알게된다.) 해당 코드의 장점..
2. 생성자에 매개변수가 많다면 빌더를 고려하라 정적 팩토리와 생성자에는 똑같은 제약이 있다. 매개변수가 많을 때 적절히 대응하기 어렵다는 점이다. 옛 프로그래머들은 이럴 때 점층적 생성자 패턴(telescoping constructor pattern)을 주로 사용했다. public class NutritionFacts { private final int servingSize; // required private final int servings; // required private final int calories; // optional private final int fat; // optional public NutritionFacts(int servingSize, int servings) { this(servingSize, servings, 0)..
02. 카프카의 구성요소 카프카의 주요 구성 요소는 다음 5가지다. 프로듀서 : 데이터 생산자이며 브로커에 메시지를 보내는 애플리케이션 메시지 : 카프카에서 데이터를 다루는 최소 단위 브로커 : 데이터 수신 및 전달하는 서비스 컨슈머 : 브로커에게 메시지를 전달받는 애플리케이션 토픽 : 메시지를 종류별로 관리하는 스토리지. 브로커에 배치되어 관리된다. 프로듀서와 컨슈머는 특정 토픽을 지정하여 메시지를 송수신한다. 프로듀서 -> 브로커 -> 컨슈머의 흐름에서, 프로듀서 -> 브로커는 PUSH형 / 브로커 -> 컨슈머는 PULL형으로 이루어진다. PULL형의 장점은 컨슈머 고장 시 브로커에 미치는 영향이 적으며, 컨슈머의 증감에 효율적으로 대응할 수 있게 된다. 카프카의 브로커에서 분산 처리를 위한 관리 도구로 주키퍼가 필요하다. ..
01. 카프카의 개요 아파치 카프카(Apache Kafka)는 여러 대의 분산 서버에서 대량의 데이터를 처리하는 분산 메시징 시스템이다. 카프카는 대량의 데이터를 높은 처리량과 실시간으로 취급하기에 다음 4가지 특성을 가지고 있다. - 확장성 : 여러 서버로 확장(scale out) 구성할 수 있어 데이터 양에 따라 시스템 확장이 가능하다. - 영속성 : 수신한 데이터를 디스크에 유지할 수 있어 언제라도 데이터를 읽을 수 있다. - 유연성 : 연계할 수 있는 제품이 많아 제품이나 시스템을 연결하는 허브 역할을 할 수 있다. - 신뢰성 : 메시지 전달을 보증하므로 데이터 분실에 대한 걱정을 하지 않아도 된다. 링크드인에서 카프카를 발표하기 전, 카프카와 비슷한 제품이 있었지만 모두 링크드인에서 요구하는 사항에는 일치하지 않았다..
자바 ORM 표준 JPA 프로그래밍 최근 회사에서 진행하게 된 프로젝트에서 Spring + Mybatis를 대신하여 SpringBoot + JPA를 도입하여 사용하게 되었다. 해당 라이브러리를 회사의 여러 프로젝트 중 우리 팀이 최초로 도입하게 되었기에, 해당 라이브러리와 관련하여 짧게나마 회사에서 학습할 시간을 주어 공부를 할 수 있게 되었다. 기존에 JPA를 얕게나마 알고 있던 내가 JPA 관련 메인 개발자가 되어, 실무에서 사용하기 위해 해당 책을 구매하게 되었다. 결론부터 말하자면 해당 책은 굉장히 친절하게 작성되어있다. DB에 대한 지식을 어느 정도 보유하고 있다면 JPA를 실무에서도 충분히 잘 활용할 수 있게 해 준다. JPA의 동작원리와 그에 따라 애매모호했던 개념을 정리할 수 있었으며 상황에 따라 도입하기 좋은 기술 및 어노..
1. 생성자 대신 static factory method를 사용해보자 1) 개요 자바에서 인스턴스를 생성할 수 있는 방법은 public(or protected) 생성자를 사용하는 것입니다. 하지만 static factory method로도 인스턴스를 생성할 수 있습니다. 다음의 예제를 살펴보겠습니다. public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE; } 위 예제를 살펴보면 정적 팩토리 메소드(static factory method)는 생성자 대신에 사용할 수 있는 것을 알 수 있으실 겁니다. 여기서는 생성자를 대신하여 사용할 수 있는 정적 팩토리 메소드를 살펴보겠습니다. static factory method가 가지는 장점이 몇 가지 있습니다. 1. 생성자와 다르게 이름을 ..