gradle 기반 Spring boot 프로젝트 생성 build.gradle 설정 buildscript { ext { springBootVersion = '2.1.7.RELEASE' } //ext{}는 build.gradle에서 사용하는 전역변수를 설정하겠다라는 의미 //의미 : springBootVersion을 2.1.7.RELEASE로 하겠다. repositories { mavenCentral() jcenter() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") } //spring-boot-gradle-plugin라는 스프링 부트 그레이들 플러그인의 2.1.7.RELE..
Validation 추상화 애플리케이션에서 사용하는 객체들을 검증하는 인터페이스다. Bean Validation 1.0과 1.1을 지원한다. Validator 인터페이스 사용하기 두 가지 메소드를 구현해야한다. boolean supports(class clazz) : 어떤 타입의 객체를 검증할 때 사용할 것인지 결정한다. void validate(Object obj, Error e) : 실제 검증 로직을 이 안에서 구현한다. 구현할 때 ValidationUtils를 사용하면 편리하다. 소스를 통해 validator를 만들어 보자 //Event public class Event { Integer id; String title; public Integer getId() { return id; } public..
Resource 추상화 java.net.URL을 추상화 한 것이다. 추상화한 이유 java.net.URL은 classpath 기준으로 리소스를 읽어오는 기능이 부재되어 있다. ServletContext를 기준으로 상대 경로를 읽어오는 기능이 부재되어 있다. URL은 기본적으로 프로토콜 http, https, ftp, file, jar를 지원해준다. 이런 부분들을 통합해서 하나의 추상화로 만든것이다. 구현체 ClassPathResource : classpath 접두어를 사용하면 해당 classpath 기준으로 리소스를 찾는다. FileSystemResource : filesystem 기준으로 리소스를 찾는다. ServletContextResource : 사실상 가장 많이 사용. 웹 애플리케이션 루트에서 상..
배열과 리스트의 관계 ArrayList ArrayList는 자료구조의 한 종류로서 동적으로 배열의 크기를 변경할 수 있다. 그럼 ArrayList는 어떻게 배열의 크기를 조정하는 것일까? ArrayList의 초기 크기는 10이다. add()로 인해 사이즈가 꽉 찼을 시 현재의 1.5배를 증가시켜 새로운 배열을 생성한다. 1.5배 증가시킨 새로운 배열에 현재의 배열을 copy한다. 만약 배열의 추가 및 삭제가 반복적으로 일어나게 된다면, 기존 배열에 있는 데이터들은 공간을 매꾸기 위해서 이동해야한다. 즉, 성능적인 이슈가 발생할 수 있다는 것이다. 이 때는, ArrayList 보다는 LinkedList로 배열을 생성하는 것이 더 적합할 수 있다. LinkedList LinkedList는각 인스턴스들이 다음..
조건에 따라 테스트 실행하기 Assumptions 특정한 OS, Java 버전, 환경변수에 따라 실행하거나 실행하지 말아야할 때 사용한다. 환경에 따라 테스트를 다르게 진행하자 메소드를 활용하자 assumeTrue 메소드 @Test @DisplayName("스터디 만들기") void create_new_method() { String test_env = System.getenv("TEST_ENV"); System.out.println(test_env); assumeTrue("LOCAL".equalsIgnoreCase(test_env)); } //LOCAL 환경 변수에서만 해당 테스트가 실행된다. assumingThat 메소드 @Test @DisplayName("스터디 만들기") void create_ne..
String 사용? 미사용? String은 메모리에 어떻게 저장되는가? 객체의 값은 변경가능 한가? String 객체 대부분은 원시(Primitive) 타입으로 취급하므로 new 키워드를 사용할 필요가 없다. new 키워드를 사용 안 하고 String 리터럴로 표현할 경우 String Constant Pool 영역(힙 영역이 감싸고 있음)에 존재한 후 해당 영역의 값을 가리키게 된다. new 키워드를 사용할 경우에는 heap영역에 String 객체를 생성하게 되는 것이다. Java에서 String은 특별한 참조 자료형이다. 다른 객체들과 마찬가지로 new 생성자를 이용해서 인스턴스를 만들고 heap영역에 올라가지만, 다른 참조형과는 다르게 한번 객체가 생성되면 해당 값은 변하지가 않는다. String s..
Assertion assertEquals() 사용 assertEquals(StudyStatus.DRAFT, study.getStatus(), "Study 생성 시 처음 값은 DRAFT여야 한다"); StudyStatus의 DRAFT값과 study.getStatus() 값이 일치하는지 확인 세번째 파라미터에 String을 입력하면 오류 시 메시지가 호출되어 해당 메소드가 어떤 테스트에 해당하는지를 정확히 알 수 있다. assertEquals()는 assertEquals(내가 기대하는 값, 실제 나오는 값, 오류시 나타내려는 메시지); 이다 메시지를 나타낼 때 Supplier를 사용 가능하다. assertEquals(StudyStatus.DRAFT, study.getStatus(), new Supplier(..
- Total
- Today
- Yesterday
- 인프런
- 복사 팩토리
- mustache
- springboot
- 이펙티브 자바
- 팩토리 메소드 패턴
- java8
- flatMap
- junit
- package-private
- Spring
- 자바8
- 연관관계
- Effective Java
- try with resources
- effectivejava
- try catch finally
- 김영한
- jdk버전
- 빌더 패턴
- 이펙티브자바
- java
- 정적팩터리메서드
- ifPresent
- 생성자
- JPA
- 점층적 생성 패턴
- @Lazy
- 스프링부트
- 빈 순환 참조
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |