본문 바로가기
728x90

전체 글217

[JAVA] @Builder 동작 원리, @Builder.Default, @Singular 1. @Builder 란 @Builder 란 Lombok에서 제공하는 어노테이션으로, 생성자 인자를 메서드 체인을 통해 명시적으로 대입하여 생성자를 호출할 수 있게 빌더 클래스를 생성 해준다. 빌더 클래스와 IDE의 자동 완성 기능을 같이 활용하면 생성자 작성 시 오기입 확률과 인자를 누락할 확률을 낮출 수 있다. API Javadoc의 설명: If a class is annotated, then a private constructor is generated with all fields as arguments (as if @AllArgsConstructor(access = AccessLevel.PRIVATE) is present on the class), and it is as if this constr.. 2022. 9. 16.
[Java] 불변 객체, final을 사용해야 하는 이유 (Immutable Object) 1. 불변 객체란? 불변 객체란 객체 생성 이후 내부의 상태가 변하지 않는 객체이다. 불변 객체는 read-only 메소드만을 제공하며, 객체의 내부 상태를 제공하는 메소드를 제공하지 않거나 방어적 복사(defensive-copy)를 통해 제공한다. Java의 대표적인 불변 객체로는 String이 있다. 아래 코드를 보자. String name = "One"; name.toCharArray()[2] = 'g'; Java의 String은 불변 클래스이기 때문에 위와 같이 String 내부의 char형 배열을 얻어 수정하여도 반영이 되지 않는다. Java에서는 배열이나 객체 등의 참조(Reference)를 전달한다. 그렇기 때문에 참조를 통해 값을 수정하면 내부의 상태가 변하기 때문에 내부를 복사하여 전달하.. 2022. 9. 16.
[Java] Final 의미, 사용법, final 키워드에 대한 이해 Java에서는 불변성을 확보할 수 있도록 final 키워드를 제공하고 있다. 클래스나 변수에 final을 붙이면 처음 정의된 상태가 변하지 않는 것을 보장한다는 의미이다. Java에서 변수들은 기본적으로 가변적인데, 변수에 final 키워드를 붙여 참조값을 변경 못하도록 해 불변성을 확보할 수 있다. 이 Final 키워드가 사용되는 4가지 경우를 정리해보자면 다음과 같다. 1. final 변수 다음과 같이 변수를 선언할 때 클래스 앞에 final 키워드 final String hello = "Hello world"; final 키워드가 붙은 변수는 초기화 후 변경할 수 없다. 다음과 같이 변경하려고 하면 컴파일 에러가 발생한다. final String hello = "Hello world"; hello .. 2022. 9. 16.
[Springboot] ResponseEntity란? Spring에서는 HTTP Response 를 만드는 것이 주요한 관심사다. 200, 404 등 각각의 응답의 상태 코드뿐만 아니라, Body 에 들어갈 내용도 넣어 주어야 한다. 이 세 가지 요소를 채운 객체를 만드는 것, 즉 이 데이터를 받아서 자동으로 구성해주는 것이 바로 @ResponseBody 와 ResponseEntity다. ​ @ResponseBody 우선 @ResponseBody는 HTTP 규격에 맞는 응답을 만들어주기 위한 Annotation 이다. HTTP 요청을 객체로 변환하거나, 객체를 응답으로 변환하는 HttpMessageConverter를 사용한다. 스프링부트 @RequestBody와 @ReponseBody Annotation을 추가하는 것으로 간단하게 처리를 할 수 있다는 점이.. 2022. 9. 16.
Builder Pattern 빌더 패턴의 특징, 장점 (@Builder 사용이유, @Builder 예제) entity나 Dto객체에 값을 넣어줄때, 롬복의 빌더 애노테이션(@Builder)을 사용하는 예제들이 많다. 객체를 생성하기 위해서는 생성자 패턴, 자바빈 패턴, 빌더 패턴 등을 사용할 수 있는데, 이 빌더 패턴을 쓰는 이유가 무엇일까? ​ 우선 빌더 패턴이란 디자인패턴중 하나로, 생성과 표현의 분리다. 클래스를 설계하다보면 필수로 받야할 인자들이 있고 선택적으로 받야할 인자들이 있는데, 쉽게 말해 생성자에서 인자가 많을때 고려해 볼수있는것이 바로 이 빌더패턴이다. 왜 그런 것인지 다른 패턴들과 함께 비교해보자. ​ Telescoping Constructor Pattern 점층적 생성자 패턴 각 생성자를 오버로딩 해서 만드는 기초적인 방식이다. 필수적으로 값이 있어야할 멤버변수를 위해 생성자에 매개변수.. 2022. 9. 16.
[JUnit] @SpringBootTest, @WebMvcTest, @MockBean, WebClinet 다음과 같은 컨트롤러와 서비스가 있다. SampleController.java @RestController public class SampleController { private SampleService sampleService; public SampleController(SampleService sampleService) { this.sampleService = sampleService; } @GetMapping("/hello") public String hello() { return "hello " + sampleService.getName(); } } SampleService.java @Service public class SampleService { public String getName() { .. 2022. 9. 16.
[JUnit5] 기본 테스트 어노테이션 @Test, @BeforeAll, @BeforeEach, @AfterAll, @AfterEach, @Disabled @Test 이 어노테이션을 붙이면 Test 메서드로 인식하고 테스트 한다. @Test void test1() { Study study = new Study(); System.out.println("test1"); } @BeforeAll 본 어노테이션을 붙인 메서드는 해당 테스트 클래스를 초기화할 때 딱 한번 수행되는 메서드다. 메서드 시그니쳐는 static 으로 선언해야한다. @BeforeAll static void beforeAll() { System.out.println("BeforeAll"); } @BeforeEach 본 어노테이션을 붙인 메서드는 테스트 메서드 실행 이전에 수행된다. @BeforeEach void beforeEach() { System.out.println("BeforeEach").. 2022. 9. 16.
[ intellij ] No tests found for given includes: (filter.includeTestsMatching) 1. @Test Annotation을 썼는지 확인한다. 2. 잘 썻는데도 test를 인식하지 못한다면 메뉴 바에서 File > Settings > Gradle > Run tests using : intellij IDEA로 변경 2022. 9. 16.
[Spring data JPA] Auditing (AuditingEntityListener) 1. Jpa Auditing 이란? Auditing이란? Java에서 ORM 기술인 JPA를 사용하여 도메인을 관계형 데이터베이스 테이블에 매핑할 때, 공통적으로 도메인들이 가지고 있는 필드나 컬럼들이 존재한다. 대표적으로 생성일자, 수정일자, 식별자 같은 필드 및 컬럼들.. 그런데 이것들이 도메인마다 공통으로 존재한다는 의미는 결국 코드가 중복된다는 말이다. 이 중복으로 인한 번거로움을 해소해주기 위해 spring data JPA는 Auditing이라는 기능을 제공한다. Audit는 감독하고 검사하다는 뜻으로, 해당 데이터를 보고 있다가 생성 또는 수정이 발생하면 자동으로 값을 넣어주는 편리한 기능이다. 도메인을 영속성 컨텍스트에 저장하거나 조회를 수행한 후 update를 하는 경우, 매번 시간 데이터.. 2022. 9. 15.
728x90