전체 글

전체 글

    다중 instance 방지 & 의존성 주입[Dependency Injection]

    # 다중 인스턴스 방지 인스턴스화를 막기 위해서 private 생성자 사용하자 정적 메서드와 정적 필드만을 가진 클래스 기본 타입 , 배열 관련 메서드만 존재하는 클래스 ex) java.lang.Math , java.util.Arrays 특정 인터페이스를 구현하는 객체를 생성해주는 정적 메서드(팩토리)를 모아놓은 클래스 ex) java.util.Collections final 클래스와 관련한 메서드를 모아놓은 클래스 final 클래스를 상속해서 하위 클래스에 메서드를 넣는 것은 불가능 하기 때문 위와 같이, 정적 멤버만 담은 utility 클래스는 인스턴스로 만들려고 설계한 것이 아님 → 따라서 외부에서 해당 클래스의 생성자에 접근하지 못하게 해야함 하지만 생성자를 명시하지 않으면 자동으로 컴파일러는 d..

    Singleton 보장 방법

    private 생성자 / 열거 타입으로 Singleton을 보장하자 Singleton 인스턴스를 오직 하나만 생성할 수 있는 클래스 cf) instance =? 싱글턴이 필요한 상황 무상태 객체 - 함수 설계상 유일성이 보장되야 하는 시스템 컴포넌트 (ex - Spring 컨테이너가 각 클래스에 대해 딱 한개의 인스턴스만 생성) Thread-safe가 보장되어야 하는 상황 클래스를 싱글턴으로 만든다. → 해당 클래스를 사용하는 클라이언트를 테스트하기 어려워질 수 있다. 이유 : 하나의 자원을 공유하기 때문에 프로덕션 DB에 사용되는 싱글턴 클래스라면 인스턴스가 하나이다. 따라서 싱글턴 인스턴스를 가짜(mock) 구현으로 대체할 수 없기 때문이다. Singleton 을 만드는 방법 방법 #1 - publi..

    Builder 패턴

    정적 팩토리 메서드 , 생성자 - 매개변수가 많을 때, 선택적으로 고려해야한다면 불편함 존재 기존 해결 방법 : 점층적 생성자 패턴(Telescoping Constructor Pattern) 필수적인 파라미터들에 대한 생성자 설정 후, 선택적인 파라미터에 대해서는 해당 파라미터를 포함한 생성자를 연쇄적 호출 이를 통해 모든 파라미터들이 설정된 객체가 만들어진다. 장점 : 파라미터들이 유효한지를 생성자를 통해서 확인하면 일관성 유지 보장 문제점 : 클라이언트가 원하지 않는 파라미터까지 설정해야 한다. 개발자의 입장에서도 Class의 라인 수 증가, 호출 수 증가 - 클라이언트 코드를 작성하거나 읽기 어려운 문제 발생 자바빈즈 패턴(JavaBeans Pattern) 매개변수가 없는 생성자로 객체 생성 이후,..

    정적 팩토리 메서드 [ static factory method ]

    기존 방법 : Client → instance of Class 획득 → public 생성자로 가져오기 public void main(String[] args){ Hello hello = new Hello(); // new Hello() -> 인스턴스 가져오기 hello = new Hello("xonmin"); // 다른 public 생성자 } public class Hello{ //아무것도 생성되지 않으면 default Constructor String name ; public Hello(String name){ this.name = name; } } 정적 팩토리 메소드 예시 public static Boolean valueOf(boolean b){ return b ? Boolean.TRUE : Bool..

    2021 존민 회고록

    정말 바쁘게, 열심히 살아온 한 해였다. 느낀 점들과 다시 한 번 일년을 돌이켜보며 앞으로 나아가야할 방향을 정하고자 정리해봅니다. 2020년 말 그리고 1월 & 2월 민간인 복귀 2020.10 전역 이후, 생각과 계획 없이 시간을 보내지말자라는 생각이었다. 군에서 공부하던 자바와 스프링 공부를 시작으로, 대학교 1학년에 따고자했던 네트워크관리사와 SQLD 자격증도 함께 취득하였다. 코로나로 인하여 카페와 헬스장을 갈 수 없었기 때문에 JW 메리어트 호텔의 알바와 집에서의 공부로 하루하루를 채워나갔다. 그렇게 전역하면 파란만장하고 행복할 것 같았던 삶을 그렸지만, 현실과 조금 달랐다. 그저 자유에 만족하면서 대학생이자 개발자로서의 삶에 다시 돌아가고 있었다. 알고리즘 스터디 (ZoA) 시작 주변에 개발자..

    면접 준비를 위한 CS + 프로젝트 질문 정리

    프로젝트에 적용된 ES 기반 질문들 프로젝트에서 검색 성능 향상에 무엇을 했나요? A. 검색엔진 프로젝트에서 Elasticsearch를 사용하며 기존 RDB 의 Join 개념을 통해서는 분산환경인 엘라스틱에서 비효율적이었습니다. 따라서 다른 방법을 찾고자 하였고, Elasticsearch 에서의 enrich policy 도입을 통해 역정규화를 진행하여 mapping 하고자 하였습니다. enrich 필드를 사용하여 기존 src 도큐먼트의 필드들을 match_filed로 매핑 후, enrich_field들로 새롭게 필드를 추가하여 원하는 매핑과 빠른 검색 조회속도를 증가시킬 수 있었습니다. 또한 검색의 관련성의 범위가 상황에 따라 달라져야 했습니다. 따라서 search template을 먼저 작성하여 각 상..

    Elastic Stack

    Elastic Stack 이란 : Elastic의 모든 유형의 Data를 저장하거나, 실시간 검색, 분석 및 시각화할 수 있는 오픈 소스 서비스 v5.0.0 이전 : ElasticSearch + Logstash + Kibana 로 이루어진 서비스 - 흔히 ELK Stack 으로 명칭 v5.0.0 이후 - Beats 를 시작으로 X-Pack과 Elastic Cloud 가 포함되어 Elastic Stack으로 불림 엘라스틱이 좋다 좋다 하지만, 정말 뭐가 좋고 내세우는 게 무엇이며, 내가 왜 써야 하는 지를 알아야 한다고 생각했습니다. Elastic Stack의 장점 (Elastic Search 시스템과 구조상의 장점에서 많이 비롯된다) 유연성 & 호환성 Elasticsearch,Logstash,Kibana..