java 174

팩토리 메소드 디자인 패턴

[팩토리 메소드 디자인 패턴이란]객체지향 디자인 패턴중 하나.상위클래스에 알려지지 않은 구체화된 클래스를 생성하는 패턴이며, 하위클래스가 구체화된 클래스를 생성하도록 하는 것.기존 코드를 수정하지 않고, 새로운 인스턴스를 여러방법으로 생성할 수 있는 "확장에 열려있고 변경에 닫혀있는 객체 지향 원칙"을 지킬 수 있는 패턴.이러한 원칙을 만족하는 이유는 제품과 제품을 생성하는 팩토리가 느슨한 결합 구조를 가질 수 있기 때문.추상화와 다형성을 통해 이를 실현한다.동일한 인터페이스를 통해 구현된 객체들은 다형성을 이용하면 코드의 수정을 최소화할 수 있기 때문에 느슨한 결합을 가져갈 수 있는 것.[코드 수정이 최소화  될 수 있는 이유]객체를 생성하는 코드 부분을 분리 시켰기 때문에 객체를 추가수정이 일어 나더..

Java 2022.11.26

Windows 환경에 Zulu JDK 설치하기

[설치 경로] 다운로드: https://www.azul.com/downloads/ (msi버전 다운로드하고 설치) 기본설치경로: C:\Program Files\Zulu\zulu-11 [환경변수 설정] 환경변수 - 시스템변수 - JAVA_HOME 추가 - 변수값 (C:\Program Files\Zulu\zulu-11) 환경변수 - 시스템변수 - Path 편집 후 추가 (%JAVA_HOME%\bin) [확인] cmd에서 확인 C:\Users\jaeshim>javac Usage: javac where possible options include: @ Read options and filenames from file -Akey[=value] Options to pass to annotation processor..

Java 2022.11.20

유틸성 클래스를 만들기 위해 private 접근제어 활용하기

static 메서드들을 모아놓은 클래스는 기본적으로 인스턴스화를 시켜 사용하지 않는다. 우리가 Arrays를 사용할 때를 생각해보면 절대 Arrays arrays = new Arrays()로 생성하지 않고, Arrays.asList(배열)과 같은 형태로 사용하고 있다. Arrays클래스를 실제로 열어보면 아래와 같다고 한다. public class Arrays { public static boolean isArray(Object o) { ...} public static Object[] asObjectArray(Object array) { ...} public static List asList(Object array) { ...} public static boolean isNullOrEmpty(T[] a..

Java 2022.11.19

throw, throws에 대한 정리

[throw, throws의 차이] throw: 에러를 고의로 발생시킬 때 사용 throws: 자신을 호출한 상위 메소드로 에러 처리의 책임을 전가 시킴. [throw] 예외를 강제로 발생시킨 후 catch문을 통해 예외를 처리한다. public static void main(String[] args) { middleMethod(); } private static void middleMethod() { myException(); } public static void myException() { try{ throw new Exception(); }catch (Exception e){ System.err.println("myException 메서드에 오류 발생!"); } } //실행결과 : myExcepti..

Java 2022.11.19

Annotation 정리

[AutoConfigurationBefore] Target.class 전에 어노테이션이 선언된 Class를 진행한다. [ConditionalOnProperty] Spring 기반 Application에서는 구성 속성의 존재와 값에따라 조건부로 빈을 생성해야 하는 케이스가 있다. ex) 속성 값을 "prod" 혹은 "test"로 설정했는지 여부에 따라 운영이나 테스트 데이터베이스를 가리키도록 Datasource 빈을 등록할 수 있다. 이럴때 사용하는 케이스 ConditionalOnProperty 어노테이션을 사용하면 구성 속성의 존재여부에 따라 조건부로 빈을 등록할수 있게 되는 것

Bean 생성

BeanDefinitionRegistryPostProcessor Spring에서 Bean을 동적으로 생성하는 방법 중 하나. 스프링에서는 보통 정적으로 Bean을 생성한다. 근데 DcmDatasource 같은 경우는 properties파일을 읽어다가 여러 개의 DcmDataSource Bean을 생성해야 한다. (configuration에서 dcm properties수가 몇개가 될 지 모르는 상황) 결국 동적으로 Bean을 생성해줘야하는 상황이다. 이럴 때 사용할 수 있다. ex) configuration에 언급된 에이전트 개수 (DB A서버,DB B서버..) 만큼 datasource를 만들어야 하는 상황 샘플코드 BeanDefinitionRegistryPostProcessor를 사용하기 위해서는 인터페..

Auto Configuration

[Auto Configuration?] AutoConfiguration을 알아보기 전에 "@SpringBootApplication"을 먼저 알아본다. "@SpringBootApplication"은 3가지 어노테이션을 합친것 "@SpringBootConfiguration": "@Configuration"과 같은 기능을 한다. "@EnableAutoConfiguration": "/reousrce/META-INF/spring.factories중 EnableAutoConfiguration에 정의된 Configuration들을 자동으로 빈등록한다. "@ComponentScan": 컴포넌트 어노테이션을 모두 스캔해서 빈으로 등록 이 때 ComponentScan이 먼저 일어난 후 AutoConfiguration의 B..