분류 전체보기
-
JPA getById() 와 findById()의 차이Spring 2022. 1. 12. 22:33
jpa에서 ID를 이용하여 객체를 가져오는 방법에는 getById(), findById() 두가지 방법이 존재한다. getById() public void get_activity_with_id(Integer id) { //given //when Activity activity = repo.getById(id); //then } getById()는 원래 메소드인 getOne()이 deprecated되어 대체된 메소드로 내부적으로 EntityManager.getReference() 메소드를 호출하여 엔티티가 아닌 프록시를 반환한다. 이 때문에 실제로 사용하기 전에는 데이터 베이스에 접근하지 않고 실제로 사용될 때 프록시에서 데이터 베이스에 접근하려고 할때 데이터가 존재하지 않는다면 EntityNotFound..
-
테스트 코드 작성할 때 Junit5 사용시 JUnit Vintage 오류 발생Spring 2022. 1. 11. 11:40
테스트 코드를 작성하던 중 다음과 같은 오류를 맞닥뜨리게 되었다. 테스트 메소드를 읽지 못하는 메세지였다. Junit5 import org.junit.jupiter.api.Test; class Junit5Test { @Test void test() { //... } } 단일 jar였던 Junit4와는 다르게 Junit5는 Junit Platform, Junit Jupiter, Junit Vintage 세가지로 이루어져있다. Junit Platform : JVM에서 동작하는 테스트 프레임워크 (TestEngine 인터페이스 정의) Junit Jupiter : Junit5 기반의 테스트 실행 (TestEngine의 실제 구현체) Junit Vintage : Junit3 및 Junit4 기반의 테스트 실행 (..
-
자바에서 Scanner.nextInt() 후 nextLine() 입력받지 못할 때JAVA/Java 2022. 1. 10. 18:12
Scanner를 이용해서 입력을 받으려고 할 때 nextInt()후 nextLine()을 이용하여 입력받지 못하고 끝나버리는 경우가 발생했다. 이러한 문제는 nextInt()는 개행문자(엔터 '\n') 전까지 숫자를 입력 받는 데 이후 개행문자 까지 입력을 받는 nextLine()을 사용하게 되면 버퍼에 남아있는 개행문자 하나만 입력을 받은 후에 메소드가 종료되기 때문에 발생 한다. 해결방안 public class InputView { private static final Scanner sc = new Scanner(System.in); public InputView() { } public static int inputPrice() { System.out.println("구입 금액을 입력해 주세요.");..
-
자바에서 메소드 순서JAVA/Java 2022. 1. 10. 18:04
프로젝트 리팩토링을 진행하면서 코드를 작성할 때, 변수와 메소드 순서에 대해서 작성하는 방법을 배웠다. 전체적인 순서 public class LottoResult { // static 변수 private static final int LOTTO_PRICE = 1_000; private static final int LOTTO_MATCH_MINIMUM_BOUND = 3; // instance 변수 private Map result = defaultResult(); private BigDecimal yield; // constructor public LottoResult(final List matchResult) { setResult(matchResult); } // 메소드 private Map defaul..
-
Java Optional의 사용JAVA/Java 2022. 1. 6. 19:37
런타임에 발생하는 객체없음(NullPointException)을 방지하기 위해서 java8 부터는 함수형 언어를 이용해서 존재하지 않을 수 도 있는 값이라는 Optional 타입을 만들어냈다. 그러나 Optional의 사용에는 주의해야 할 점 이 26가지나 존재하므로 유의해서 사용해야 한다. Optional Card card = cardRepository.findById(1).orElseThrow(new IllegalException("Card not found with id: " + 1)) Optional은 null이 될 수도 있는 값을 가진 객체를 감싸는 Wrapper 클래스 로 반환할 결과 값이 null(없음)임을 명백하게 표현할 필요가 있지만 null반환시에 에러가 발생할 가능성이 높은 곳에서 제..
-
자바에서 static의 사용JAVA/Java 2021. 12. 30. 21:18
프로젝트 리팩토링을 진행 중 자바에서의 static메서드를 가진 utility 클래스의 사용은 자제해야 한다는 코드 리뷰를 받게 되었다. 자바에서의 static의 사용 public class FileUploadUtils { //폴더에 사진을 저장 public static void saveFile(String uploadDir, String fileName, MultipartFile multipartFile) throws IOException { ... } //폴더에 파일이 이미 존재한다면 폴더 비워주기 public static void cleanDir(String dir) throws IOException { ... } //폴더 삭제하기 public static void deleteDir(String d..
-
케이스 스타일 (Camel case, Kebab case, Snake case, Pascal case).etc 2021. 12. 30. 09:14
케이스 스타일은 프로그래밍을 할 때에 변수나 클래스 명에 공백(" ")을 지우고 이름을 짓기 위해서 사용하는 문자 표기 스타일을 뜻한다. 공백을 사용하지 않고 문자를 표기위한 방식으로 자주 쓰이는 4가지에 대해 알아보자. Camel case 원래 문자 : camel case 카멜 케이스 : camelCase 카멜 케이스란 문자열의 첫 문자를 제외하고 단어의 첫 글자마다 대문자로 표현하는는 방식이다. 사용처 : 많은 언어에서 컨벤션 으로 사용 Kebab case 원래 문자 : kebab case 케밥 케이스 : kebab-case 케밥 케이스는 모든 문자를 소문자로 표현하며 단어와 단어 사이에 대시문자(-)를 사용하여 구분한다. 사용처 : 스프링의 yml파일, url 주소 Snake case 원래 문자 :..
-
Lombok 사용시 주의할 점Spring 2021. 12. 29. 09:36
스프링 프로젝트를 진행하면 lombok 라이브러리의 편리함 때문에 이를 사용하는 경우가 많지만, 롬복을 사용시에는 다음과 같은 주의점이 존재한다. @AllArgsConstructor, @RequiredArgsConstructor 의 사용 금지 @AllArgsConstructor public static class Card { // private Card(long frontNumber, long backNumber) { // this.frontNumber = frontNumber; // this.backNumber = backNumber; // } private long frontNumber; private long backNumber; } @AllArgsConstructor public static cl..