본문 바로가기

자바

(8)
스프링부트 멀티모듈 개발을 할 때 한 패키지에 모든 기능을 구현하는 경우는 드뭅니다. 스프링에선 필요한 기능 별로 module을 나누고, 레고 조립하듯 필요한 모듈만 조립할 수 있는데 이것을 multi Module이라고 부릅니다. 예시를 들어서, DB Entity가 API서버도 필요하고, Batch서버도 필요하다면, 중복된 Entity는 모듈화 시켜서 관리하는게 독립적으로 각각 운영하는 것보다 좋습니다. 만약 독립적으로 관리한다면 두 배로 일을 함에도 리스크는 더 커지는 현상이 일어나요. 간단한 예제로 설명하겠습니다. API 모듈 COMMON 모듈 1. 메인 프로젝트에서 사용할 모듈 연결해주기 메인 프로젝트의 settings.gradle에 들어가서 사용할 모듈들을 include 해주시면 됩니다. 2. 모듈들의 setting..
테스트 코드 작성 요령 GIVEN-WHEN-THEN 패턴 Given : 테스트를 수행하기전에 테스트에 필요한 환경을 설정하는 단계 When : 테스트의 목적을 보여주는 단계 Then : 테스트의 결과를 검증하는 단계 BDD(Behavior-Driven-Development 행위주도 개발)를 통해 탄생한 테스트 접근 방식. 간단한 테스트로 여겨지는 단위 테스트에선 잘 사용되지 않는다. 좋은 테스트를 작성하는 5가지 속성(F.I.R.S.T) Fast : 빠르게 수행 Isolated : 외부 요인에 의해 테스트가 수행되지 않게, 하나의 대상에 대해서만 수행해야함 Repeatable : 어떤 환경에서도 반복 가능하도록 작성 Self-Validating : 테스트는 그 자체만으로 검증이 되야됨. 만약 개발자가 결과값과 기댓값을 비교하는..
제네릭(generic) 제네릭을 사용하면 얻는 이점 데이터 타입 명확히 선언 정확한 데이터를 사용했는지 컴파일 하는 시점에서 확인 가능 클래스 캐스트가 필요없어서 코드 가독성 상승 객체 선언시 명확한 데이터 지정함으로써 가독성 상승(주석사용 줄어줌) for each랑 사용하면 좋음 //제네릭 미사용시 List nameList = new ArrayList(); for(int i=0; i); 두번 째 방법은 와일드 카드를 선언해서 이용하는 것이다. 정적 메서드에서 제네릭을 사용할 경우 public static Map sorting(Map map){ return map; } 리턴 타입과 입력 파라미터에만 제네릭 타입을 지정해줄 뿐만 아니라 static 예약어 다음에도 제네릭을 붙히는 이유는 제네릭에서 K와 V의 값은 객체를 생성하면..
스프링은 어떻게 property를 관리할까 외부 설정 파일이란 처음 spring boot를 실행하면 src/main/resources에 있는 application.properties와 같이 여러가지 설정 값들을 애플리케이션의 밖이나 안에 정의 할 수 있는 기능을 말한다. propertie를 사용하는 이유 : 배포하고나서 설정을 변경할 때 용이하기 때문이라고 생각한다. 키-값 구조로 정의된 값들을 소스코드에서 불러다 치환하면 되기 때문에 소스코드를 수정하지 않아도 되고 배포되고나서 고쳐야할 경우 서버에 접속해서 properties 파일만 수정하면 되기 때문에 편리하다. 스프링은 src/main/resources에 들어가 있는 설정파일(yml, properties)을 자동으로 감지한다. 따라서 이 파일들을 사용하기 위해 PropertySource를 ..
스프링 부트 프로파일(profile)설정 스프링 부트는 서버의 환경(Dev, local, test 등)에 맞춰 애플리케이션을 다르게 설정할 수 있는 프로파일(profile)기능이 있습니다. 프로파일을 통해 다음과 같이 설정이 가능합니다. 특정 환경에서 실행할 Bean 설정 특정 환경에서 사용할 프로퍼티 파일 설정 인텔리 j에선 이렇게 설정합니다. Active profiles에다가 내가 원하는 프로파일의 이름을 적으면 됩니다. 애플리케이션이 가동되는 환경에 따라 application.properties를 별도로 구분하여 관리할 수 있습니다. 파일 이름의 형식은 'application-[profile].properties'로 지정 예시를 봅시다. 스프링 설정 환경은 다음과 같습니다. 더보기 디렉토리 구조 .yaml을 이용해서 한번에 환경을 설정하는..
다형성(polymorphism) 하나의 객체가 여러가지 타입을 가질 수 있는 것을 말한다. 다형성을 구현하려면 메소드 재정의와 타입변환이 필요하다. 부모 타입으로 자동 타입 변환된 이후에는 부모 클래스에 선언된 필드와 메소드만 접근이 가능하다. 그러나 메소드가 자식클래스에서 재정의 되었다면 자식 클래스의 메소드가 대신 호출 된다 class Parent { public void method1(){ } public void method2(){ System.out.println("부모가 정의한 메소드"); } } class Kid extends Parent{ @Override public void method2(){ System.out.println("자식이 재정의한 메소드"); } public void method3(){ } } publi..
접근제어자(Access Modifier)정리 public : 외부 클래스가 자유롭게 사용할 수 있음 protected : 같은 패키지 또는 자식 클래스에서 사용할 수 있음 private : 외부에서 사용 불가능 default : 같은 패키지에 소속된 클래스에서만 사용 가능 protected가 기능상 public과 비슷함에도 굳이 사용되는 이유 : 자식 클래스가 오버라이드해서 바꾸어야 할 경우를 고려한 접근 제어자이다. 완성되지 못한 클래스 맴버를 의미한다. 앞으로 더 구현할 것이 남아있거나, 일부로 완성시키지 않았을 경우를 의미한다. 그럼 abstract와 다른게 무엇일까. abstract는 반드시 구현하고 protected는 일부로 완성시키지 않아도 된다는게 큰 차이다.
싱글톤(Singleton) public class Singleton { private static Singleton singleton = new Singleton(); private Singleton() { } static Singleton getInstance(){ return singleton; } public static void main(String[] args){ /*컴파일 에러: private로 생성자를 호출 못하게 했기 때문이다*/ Singleton obj1 = new SingleTon(); /*obj1과 obj2는 같은 객체이다*/ SingleTon obj1 = Singleton.getInstance(); SingleTon obj2 = Singleton.getInstance(); } } 단 하나의 객체만 만들도록 보..