본문 바로가기

Java23

[Java] 인스턴스를 캐싱하여 성능 개선하기 (feat. 로또) 오늘 포스팅은 빈번하게 사용되는 인스턴스를 캐싱하여 성능을 개선하는 방법에 대해 작성해보고자 합니다. 정적 팩토리 메소드의 장점을 떠올리면 이름을 가질 수 있다 가 가장 먼저 떠오릅니다. 하지만 정적 팩토리 메소드에는 또 다른 장점이 존재합니다. 바로 자주 사용하는 인스턴스를 캐싱하여 성능을 개선하는 방법인데요. Integer 코드를 통해 이 내용을 확인해봅시다. public static Integer valueOf(int i) { if (i >= IntegerCache.low && i 2022. 2. 23.
[Java] Java 예외처리와 StackOverFlow 인테리어 커머스 플랫폼 인턴 면접을 보며 "StackOverFlow는 왜 발생하나요?" 라는 질문을 받았습니다. 저는 정말 단순하게 메모리가 초과했기 때문입니다. 라고 답변했으나 아마 이는 썩 만족스럽지 못한 대답이었을 것입니다. 오늘은 그날의 기억을 되돌리며 StackOverFlow라는 에러를 알아보고 이어서 Java가 어떻게 예외를 처리하는지 살펴보고자 합니다. StackOverFlow StackOverFlow는 VM에서 런타임 시점에 발생시키는 에러로 application이 너무 깊이 재귀를 할 때 발생하는 에러입니다. 아니 그런데 왜 이름이 RecurseTooDeepError 이런게 아닌가요? 이렇게 이름이 생긴 이유는 Java의 메모리 구조를 통해 유추해 볼 수 있습니다. Java에서 인자나 지.. 2022. 2. 21.
[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.