🐢 Study

    [Effective Java] 3. 생성자나 열거 타입으로 싱글턴임을 보증하라

    Effective Java 3/E 정적 팩터리 메서드와 public 생성자는 각자의 쓰임새가 있으니 상대적인 장단점을 이해하고 사용하는 것이 좋겠다. 그렇다고 하더라도 정적 팩터리를 사용하는게 유리한 경우가 더 많으므로 무작정 public 생성자를 제공하던 습관이 있다면 고치자! 아이템3: 생성자나 열거 타입으로 싱글턴임을 보증하라 싱글턴? 인스턴스를 오직 하나만 생성할 수 있는 클래스 싱글턴을 만드는 방식 1. public static final 필드 방식 2. static factory method 방식 3. 원소가 1개인 ENUM 타입 1. public static final 필드 방식의 싱글턴 생성자는 private으로 감춰두고, 유일한 인스턴스에 접근할 수 있는 수단을 public static ..

    [Effective Java] 2. 생성자에 매개변수가 많다면 빌더를 고려하라

    Effective Java 3/E 정적 팩터리 메서드와 public 생성자는 각자의 쓰임새가 있으니 상대적인 장단점을 이해하고 사용하는 것이 좋겠다. 그렇다고 하더라도 정적 팩터리를 사용하는게 유리한 경우가 더 많으므로 무작정 public 생성자를 제공하던 습관이 있다면 고치자! 아이템2: 생성자에 매개변수가 많다면 빌더를 고려하라 Class 설계시 필수, 선택적으로 받을 매개변수가 구분됩니다. 이렇게 설계된 다향한 형태의 클래스들을 객체화하는 대표적인 3가지 패턴이 존재합니다. 1. 점층적 생성자 패턴 ( Telescoping Constructor Pattern ) 2. 자바 빈즈 패턴 ( Java Beans Pattern ) 3. 빌더 패턴 ( Builder Pattern ) 1. 점층적 생성자 패턴..

    [Effective Java] 1. 생성자 대신 정적 팩터리 메서드를 고려하라

    Effective Java 3/E 정적 팩터리 메서드와 public 생성자는 각자의 쓰임새가 있으니 상대적인 장단점을 이해하고 사용하는 것이 좋겠다. 그렇다고 하더라도 정적 팩터리를 사용하는게 유리한 경우가 더 많으므로 무작정 public 생성자를 제공하던 습관이 있다면 고치자! 아이템1: 생성자 대신 정적 팩토리 메소드를 고려하라 public class ClazzA { private String name; public ClazzA(String name) { this.name = name; } public static void main(String[] args) { ClazzA clazzA = new ClazzA("name"); } } 클래스의 인스턴스를 얻는 전통적인 방법은 public 생성자를 이용하..

    java 코드를 이용한 Spring-MVC 환경 설정

    순수 자바 클래스와 어노테이션을 이용한 시동 0. 개요 Servlet 3.0 이상 버전부터는 web.xml 없이 서블릿 컨텍스트를 초기화할 수 있는 방법이 나왔습니다. 따라서 servlet, filter, listener 컴포넌트의 등록과 설정을 코드로 입력하여 사용 가능하고 web.xml 파일과 같이 사용할 수 도 있습니다. 그래서 ServletContext에 관련 메소드들이 추가되었습니다. 이 메소드들을 사용하기 위해서 ServletContainerInitializer의 onStartup 메소드를 적절하게 호출하면 됩니다. 코드로 설정하는 것의 장점은 최종 사용자나 어플리케이션이 DD(deployment descriptor, 일명 web.xml)를 배포하지 않고도 프레임워크의 web component..

    JPA, h2 / Table not found / spring.jpa.defer-datasource-initialization: true

    Error creating bean with name 'dataSourceScriptDatabaseInitializer' defined in class path resource [org/springframework/boot/autoconfigure/sql/init/DataSourceInitializationConfiguration.class]: Invocation of init method failed;nested exception is org.springframework.jdbc.datasource.init.ScriptStatementFailedException: ~~ # 오류 내용 data.sql 에 임시 데이터를 넣어 놓고 서버를 실행시켰는데 처음보는 에러를 만났다. table을 찾을 수 없다는 에..

    @Bean VS @Component

    @Bean vs @Component @Bean 과 @Component 사용하는 이유? IoC Container는 @Configuration, @Bean, @Component, @Repository, @Service, @Controller가 달린 클래스를 감지하며 빈을 가져오기 위해 빈 스캐닝을 합니다. 대표적으로 빈으로 사용 할 수 있도록 해주는 어노테이션으로 @Bean과 @Component이 있다. (@Configuration은 구성클래스를 만들 때 사용, @Repository, @Service, @Controller는 @Component에 속해있다.) 👉 @Bean @Bean은 개발자가 직접 제어가 불가능한 외부 라이브러리를 사용할 때 사용한다. @Configuration을 선언한 클래스 내부에서 사..