java
-
[Java] Arrays.asList vs new ArrayList카테고리 없음 2022. 9. 7. 08:00
java에서 리스트로 만들 때 자주 사용하는 Arrays.asList() 아래와 같이 사용할 수 있다. @Test void asListTest(){ List list = Arrays.asList("test1", "test2", "test3"); // todo list.forEach(System.out::println); } 출력은 기대한 것과 같이 3개의 문자열을 출력한다. 여기서 list에 하나의 문자열을 추가해보면 기대와는 다른 결과를 확인할 수 있다. @Test void asListTest(){ List list = Arrays.asList("test1", "test2", "test3"); list.add("test4"); list.forEach(System.out::println); } 실행을 하..
-
[Java] 특수문자를 사용한 문자열 splitprogramming/JAVA 2022. 6. 12. 15:45
자바에서 특수문자를 사용한 split을 사용할 때는 주의해서 사용해야 한다. 콤마(,)를 사용할 때는 아래와 같이 사용하면 문자열을 구분자로 나누어 배열로 사용할 수 있다. String str2 = "AAAAA,BBBBB,CCCCC"; for (String s : str2.split(",")) { System.out.println(s); } 하지만, 특수문자를 사용할 때는 아래와 같이 "\\"를 포함하여 사용해야, 구분자로 사용해서 배열로 나눌 수 있다. @Test @DisplayName("split 테스트") void splitTest(){ String str = "AAAAA|BBBBB|CCCCC"; String[] expect1 = new String[]{"A","A","A","A","A","|","..
-
[Java] LocalDate Unsupported field: HourOfDayprogramming/JAVA 2022. 6. 6. 00:26
LocalDate.format을 이용해서 날짜를 표현할 때 발생하는 에러다. @Test void localDateTest1(){ DateTimeFormatter yyyyMMddHHmmss = DateTimeFormatter.ofPattern("yyyyMMddHHmmss"); LocalDate localDate = LocalDate.of(2022,06,06); localDate.format(yyyyMMddHHmmss); } 위 코드를 실행시켜보면 아래와 같이 에러가 발생한다. 해당 에러는 LocalDate에서 시간을 표현하는 포맷을 사용해서 발생한 에러다. format을 "yyyyMMdd" 형식으로 바꾸던지, LocalDateTime을 사용하면 에러는 발생하지 않는다. @Test @DisplayName("..
-
[Java] Arrays.asList(int[]) 의 잘못된 사용programming/JAVA 2022. 3. 27. 20:59
Arrays.asList() 는 배열을 List로 바꿔주는 것으로 알고 있었다. 그래서 아래와 같은 코드를 의심 없이 작성하였다. (코드를 작성할 때 의도한 것은 2,4를 배열에 넣고, 3,4가 해당 배열에 있는지, 없는지 확인하는 코드이다.) int[] int_numbers = {2,4}; Integer[] integer_numbers = {2,4}; @DisplayName("List.contains 테스트") @Test void listContainsTest(){ assertAll( ()->assertFalse(Arrays.asList(int_numbers).contains(3) , "int_numbers contains 3"), ()->assertTrue(Arrays.asList(int_number..
-
[ETC] 구글 OTP 인증 오류 해결 하기programming/ETC 2022. 2. 12. 15:40
구글 OTP 인증 오류 해결하기 * 자체 서버가 있고, 서버 및 코드를 수정할 수 있을 때의 문제 해결 방법입니다. 구글 OTP는 처음 사용할 때 QR코드를 스캔하거나, 키를 입력하여 일회용 비밀번호를 생성한다. 해당 번호들은 30초 간격으로 새로 생성되어서 일회용 비밀번호로 사용할 수 있다. 이 코드가 인증이 안 되는 경우 해결 방법. 1. 서버시간을 확인 후, 동기화한다. 클라이언트(휴대폰, 또는 컴퓨터)의 시간을 먼저 확인해보고, 서버의 시간을 확인해본다. 리눅스에선 date 명령어로 확인할 수 있는데, 이 시간이 클라이언트와 시간이 차이가 날 경우 인증이 되지 않을 수 있다. 이때 서버의 시간을 동기화해서, 클라이언트와 서버의 시간을 맞춰준다. 2. 인증코드 간격을 늘리는 방법 구글에서 'Goog..
-
[Java] Builder 어노테이션 기본값 사용하기(Builder.Default)programming/JAVA 2021. 12. 31. 14:16
@Builder 빌더 패턴을 사용하기 위해서 Lombok의 Builder 어노테이션을 사용할 수 있다. 아래처럼 해당 클래스에 붙여서 사용할 수 있다. import lombok.Builder; import lombok.ToString; @Builder @ToString public class Member { String id; int age; } @Builder Test Builder는 아래처럼 사용하면 된다. public class MemberTest { @Test void memTest(){ Member mem = Member.builder().build(); System.out.println(mem); } } 이때는 기본값이 설정되어 있지 않기 때문에 실행결과는 아래와 같다. @Builder.Def..
-
[Java] junit Disabled 어노테이션 사용하기programming/JAVA 2021. 11. 26. 21:18
@Disabled 어노테이션 사용하기 아래 코드는 2개의 테스트를 실행하기 위한 테스트 코드다. @SpringBootTest public class DisabledTest { @Test void test1(){ int result = 1; assertEquals(1,result); } @Test void test2(){ int result = 2; assertEquals(2,result); } } 인텔리제이에서 실행하면 두 개의 메소드 모두 실행되고 아래와 같이 보인다. 항상 모든 테스트를 같이 확인할 수 도 있지만, 일부 테스트를 제외하고 실행시키고 싶을 때, @Disabled를 사용할 수 있다. @Disabled가 적용된 코드 @Test @Disabled void test2(){ int result ..
-
[Java] 테스트메소드에 이름 붙이기programming/JAVA 2021. 11. 24. 00:12
테스트 코드 작성 중 메소드 이름은 영어로 적고 보여주는 이름만 따로 붙이고 싶을 때, @DisplayName 어노테이션을 사용해서 해결할 수 있다. @DisplayName이 없을 때 아래와 같은 코드를 실행하면 @Test void two_Plus_One(){ int num1 = 2; int num2 = 1; int result = num1 + num2; int expected = 3; assertEquals(expected, result); } 인텔리제이에선 아래 스크린샷처럼 보인다. @DisplayName을 작성했을 때 위의 코드에서 @DisplayName 어노테이션만 추가로 작성했다. @Test @DisplayName("2 + 1 = 3일 것인가?") void two_Plus_One(){ int n..