본문 바로가기

배민7

[Java] Stream docs 훑어보기 로또 미션을 진행하면서 의도적으로 Stream API를 사용하려고 노력했는데요. 지금까지 개념적 정립이 되지 않은 상태에서 Stream을 사용했다보니 어려움을 많이 겪었습니다. 오늘 포스팅에서는 Stream docs를 파헤쳐서 Stream에 대해 이해하고자 합니다. Stream이란? Stream은 컬렉션에서 map, reduce 처럼 요소의 스트림에 기능적 작업을 지원해주는 클래스입니다. int sum = widgets.stream() .filter(b -> b.getColor() == RED) .mapToInt(b -> b.getWeight()) .sum(); 위 코드를 보면, Collection의 인스턴스를 stream 소스로 변경하여 빨간색을 갖는 내부 객체의 무게 합을 구하는 reduction 과.. 2022. 2. 24.
[Java] 인스턴스를 캐싱하여 성능 개선하기 (feat. 로또) 오늘 포스팅은 빈번하게 사용되는 인스턴스를 캐싱하여 성능을 개선하는 방법에 대해 작성해보고자 합니다. 정적 팩토리 메소드의 장점을 떠올리면 이름을 가질 수 있다 가 가장 먼저 떠오릅니다. 하지만 정적 팩토리 메소드에는 또 다른 장점이 존재합니다. 바로 자주 사용하는 인스턴스를 캐싱하여 성능을 개선하는 방법인데요. Integer 코드를 통해 이 내용을 확인해봅시다. public static Integer valueOf(int i) { if (i >= IntegerCache.low && i 2022. 2. 23.
[Java] Mockito를 사용하여 TDD 적용해보기 최근 우아한 테크 코스 교육 입과 선물(?)로 배민 5000원 쿠폰을 받았습니다. 감사하게도 쿠폰을 받았는데 가만히 있을 수 없죠. 이 쿠폰이 생성되는 과정을 Mockito를 사용하여 TDD 적용해보겠습니다. 물론 실제처럼 작성하려 하면 굉장히 복잡할테니 엄청난 축약 버전으로 코드를 작성해보고자 합니다. 본문을 시작하기 앞서 왜 Mocking을 하는 것일까요? 실제로 개발을 할 때는 다른 팀, 외부 관계사 등등 다양한 포인트로 요청을 보낼 것입니다. 그런데 테스트 코드를 작성할 때 각 실제 포인트로 요청을 보내야 할까요? 저는 아니라고 생각합니다. 갑작스런 전사휴가(?) 혹은 점검으로 응답을 받지 못하는 등 이유가 있겠죠 ㅋㅋ. (반박 댓글점 부탁드립니다 ㅋ) 그래서 대역을 사용하는 것이고 그 중에서도 .. 2022. 2. 17.
[Java] JUnit으로 System.in, System.out 테스트하기 deep dive 레벨 1 미션 레이싱카는 콘솔을 기반으로 진행됩니다. 1단계를 진행하며 작성한 단위 테스트에서는 입, 출력값을 테스트 할 필요가 없었지만 2단계 미션인 MVC리팩토링 과정에서는 컨트롤러를 테스트하는 방법에 대해 많이 고민하게 될 텐데요. 이번 포스팅에서는 입, 출력값에 대한 테스트를 추상클래스로 작성하여 상속을 통해 실제 테스트가 진행되는 코드를 깔끔하게 유지하면서 I/O를 테스트 할 수 있는 코드를 작성해보고자 합니다. Scanner 와 System.in 먼저 테스트를 진행하기 위해서는 사용자가 원하는 입력값을 입력해야 합니다. 이번 미션의 프로덕션 코드에서 아래 예시처럼 Scanner 인스턴스를 System.in 인자로 생성 했을텐데요. Scanner scanner = new Scanner(Syste.. 2022. 2. 16.
[Java] 대역으로 Junit 테스트 코드 작성하기 지난 포스팅에서 Random 값을 테스트 할 수 있는 StubNumberGenerator 를 만들어 간단하게 테스트를 진행해보았다. 이번 포스팅에서는 레벨 1 미션의 랜덤값에 의한 테스트를 자유자재로 할 수 있는 스텁 객체를 만들고자 한다. Stub 이란? Stub이란 구현을 단순한 것으로 대체한 것이다. 테스트에 맞게 단순히 원하는 동작을 수행해준다. 대역 테스트에는 실제 동작을 구현하는 Fake, 호출된 내용을 기록하는 Spy, 기대값을 반환 받는 Mock이 있다. 이번 테스팅은 단순히 원하는 동작을 수행해준다는 의미에서 Stub이라고 접두사를 붙였다. 처음 Stub 객체를 작성할 때는 내가 작성한 테스트가 동작하기 위한 객체를 만들었다. public class StubNumberGenerator i.. 2022. 2. 15.
[Java] 인터페이스로 분리하여 객체 테스트하기 level 1 첫 미션으로 프리코스에서 진행한 racingGame 을 페어 프로그래밍으로 구현하는 미션을 받았다. TDD로 구현하라는 미션덕분에 많은 크루들이 Random 값을 테스트하는 방법, System.in을 테스트하는 방법에 대해 궁금증을 품었고 그 중에서도 Random 값에 대한 테스트에 어려움을 겪었던 것 같다. 내 코드와 리뷰 나는 과거 Mockito를 사용한 경험이 있어 Mockito 라이브러리를 가져와 임의의 랜덤값을 제공하는 가짜 객체를 만들어 테스트 했다. MockRandomGenerator Random 값을 가짜로 전달해줄 수 있는 임의의 추상 클래스를 생성하여 상속받아 테스트했다. public abstract class MockRandomGenerator { MockedStatic.. 2022. 2. 13.