본문 바로가기
관리자

Programming-[Backend]/Java

(41)
[TIL][TDD] TDD 4편. 자바 Reflection 의 원리와 활용, Spring의 ReflectionTestUtils.invokeMethod 1. Reflection의 정의와 원리 자바의 Reflection은 어떤 클래스의 구현 내용을 모를 때, 해당 내용들을 조회할 수 있도록 자바에서 제공하는 API라고 한다. 이것은 참조 2에 따르면, 자바는 클래스 파일을 바이트 코드로 컴파일하여 static 영역에 위치하게 되므로 여기서 해당 클래스의 정보를 가져올 수 있는 것이라고 한다. 가져올 수 있는 정보는 아래와 같다. ClassName Class Modifiers Package Info Superclass Implemented interfaces Constructors MethodsFields Annotations 2. Reflection 사용해보기 TestClassForReflection라는 클래스를 임시로 만들고 .class 뒤에 .을 붙이..
[TIL] 자바 리스트 2개 이상 stream으로 순차적으로 비교 처리하기 : LongStream, IntStream for문을 안쓰고 길이가 같은 리스트의 정보들을 순차적으로 처리할려면, stream 문법으로 LongStream 또는 IntStream을 사용하면 된다. for(int i = 0; ...) 을 쓰지 않는 방법이다. 1 2 3 4 5 6 7 8 9 10 int size = AList.size(); List result = IntStream.range(0, size).boxed().map(i -> { ADto aDto = AList.get(i); BDto bDto = BList.get(i); //필요한 로직 처리... //ex) aDto.setName(bDto.getName()); return aDto }).collect(Collectors.toList()); Colored by Color Scripter cs
[TIL][TDD] TDD 3편. 인터페이스 분리로 테스트는 분리, 서비스는 트랜잭션으로 묶기 TDD 2편에서는 서비스 메서드를 기능(의미)적으로 분리해가며 작성하는 것이 TDD 방식의 기본이라고 기록했다. 이번 글에서는 이것을 각 인터페이스로 분리해서 설계하는 방법에 대해 정리한다. 정확한 정보는 아닐 수 있으니 이 글을 발견하시는 분이 있다면 참조만 하시길. TDD 2편 [TIL][TDD] 테스트 코드 기반으로 짜되, service 코드에서 의미적으로(기능적으로) 분리해가며 작성하기 1. 문제점 1-1. 메서드를 분리하면 트랜잭션 하나로 묶이지 않는다. 다른 사용자가 실행 순서를 기억해야한다. 2편에서 다룬 것처럼 서비스 코드를 메서드별로 분리하면서 테스트하면 좋다. 그런데, 분리만 하다보면 모든 서비스 코드가 개별 트랜잭션으로 분리되고, Controller에서 각 service 메서드들을 불..
[TIL][TDD] 테스트 코드 기반으로 짜되, service 코드에서 의미적으로(기능적으로) 분리해가며 작성하기 전체 그림 1. API 분석 및 테스트 코드 작성 API 분석을 잘하는 것이 가장 중요하다. 요구되는 기능과 사양이 어떤지 명확히 알고, 그에 따른 경우의 수와 상황 등을 구체적으로 작성해본다. 최대한 많은 경우의 수를 고려하여 명기해놓고, 이것을 테스트 코드로 옮겨적으면 된다. 케이스별로 필요한 데이터를 Mock 데이터로 만들어서 테스트를 진행한다. 2. 테스트 통과를 위한 구현체 코드 작성 및 메서드 묶기 작성한 테스트 코드를 의미적, 기능별로 Service 메서드의 기능으로 묶어서 생각한다. 그리고 이 테스트 코드들을 통과하기 위한 구현체 코드를 작성한다. 테스트를 먼저 작성하고 이를 통과하기 위해 구현체 코드를 작성하므로 Test Driven Development가 된다. 이렇게 개발을 하면 최대..
[TIL]자바 리스트 중복 항목만 추출 : indexOf, lastIndexOf, HashSet 활용 자바의 리스트에서 중복된 항목들만 뽑아내기 위해 indexOf, lastIndexOf, HashSet을 활용한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 @Test void overrodeTest() { List list = List.of("사자", "호랑이", "사자", "토끼", "거북이", "거북이", "사자"); HashSet hs = new HashSet(); for (String el : list) { if (list.indexOf(el) != list.lastIndexOf(el)) { hs.add(el); } } System.out.println("hs = " + hs); } Colored by Color Scripter cs 출력결과 원리 List.indexOf : 리스..
[패턴][TIL] HashSet으로 자바 List String 중복검사, equals, hashCode Override List 내부 모든 항목 중복 검사를 위한 패턴과 비교 List의 원소 내부에 공통으로 중복되는 필드값이 있는 경우 에러를 반환해야되는 상황을 생각해보자. 아래 코드와 같이 SchoolDto가 level과 code가 모두 같은 경우 에러를 던져야한다. 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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 public class SchoolService { public void checkOverrode()..
[TIL][링크] Predicate, BooleanExpression의 개념과 차이점 Predicate, BooleanExpression 개념 뭐냐 BooleanExpression 클래스는 자바8 문법이다. 조건문을 담을 수 있고, 담은 조건문을 다른 곳에서 활용할 수 있다. 왜쓰냐 조건문이 null일수도 있다. 단순 Builder를 쓰면 문법도 보기 좋지 않고 무슨 조건절인지 한눈에 파악이 어렵다. BooleanBuilder builder = new BooleanBuilder(); if(XxxRepository.getMemberId() != null) { builder.and(....) } 이런식으로 BooleanBuilder에 조건절을 if문을 통해서 하나하나 검사하고, and 메서드로 조건절들을 추가한다. 그리고 완성된 BooleanBuilder를 쿼리문의 조건절에 넣는데, 조건이 ..
[링크] 자바 final 요약 참조1. 링크 요약 -final은 클래스, 메서드, 변수에 붙일 수 있다. -final로 선언하면 해당 객체가 변하더라도 원래 선언 시에 할당되었던 값으로만 객체를 참조한다. -final이 붙은 클래스는 상속 불가 -final이 붙은 메서드는 오버라이드 불가 -final이 붙은 변수는 재할당 불가 참조 1. 개발왕 도던님의 블로그 https://makemethink.tistory.com/184