본문 바로가기
728x90

TIL18

부모 @BeforeEach가 무시된다고? 메서드 오버라이드의 함정 개요최근 테스트 코드를 작성하다 공통적인 초기화 로직을 부모 클래스의 @BeforeEach에 두고, 자식 클래스에서 이를 상속받아 사용하도록 구성하였다. 그런데 예상과 다르게 부모의 @BeforeEach는 수행되지 않고 자식의 @BeforeEach 메서드만 수행되어 예외가 발생하게 되었고, 이번 글에서는 해당 현상의 이유에 대해 정리한다. 문제 상황이해를 위해 다음과 같이 문제가 발생했던 코드를 간략화하여 표현해 보았다. 추상 부모 클래스 BaseTest와 이를 상속한 자식 클래스 ChildTest가 있다고 가정한다.abstract class BaseTest { protected String testData; @BeforeEach void setUp() { testData =.. 2025. 8. 30.
왜 console.log는 내가 찍은 값이 아닌 바뀐 값이 보일까? 개요Javascript로 개발을 하다 보면 가장 자주 사용하는 기능 중 하나가 console.log 이다. 서버에서 내려준 응답 값을 확인하거나, 디버깅을 위해 중간 결과를 출력할 때 없어서는 안 될 도구이다. 그런데 최근 개발 중 위 기능이 예상과 다르게 동작하는 것을 발견했다. 서버에서는 a라는 값을 내려주었고, 프론트에서 해당 값을 변경하기 전에 console.log를 찍었으나 브라우저의 개발자도구를 통해 확인한 값은 변경된 값이 보였다. 이번 글에서는 이러한 현상이 왜 발생하는지, 어떻게 의도한 대로 값을 확인할 수 있는지 정리한다. 문제 상황다음은 이해를 돕기 위한 간단한 예시 코드이다.fetch("/api/data") .then(res => res.json()) .then(data => {.. 2025. 8. 30.
Gradle의 api와 implementation의 차이: 효과적인 의존성 관리 개요회사에서 스프링 부트 프로젝트 버전업 업무를 진행하며 Gradle 버전까지 함께 올려야 할 일이 생겼다. 기존에는 Gradle 5 버전을 사용했는데 8 버전으로 올리며 자료조사를 하던 중 기존 방식과 차이를 발견하여 해당 내용을 정리한다. Gradle은 3.4 버전부터 api와 implementation이라는 새로운 키워드를 도입하며 의존성 관리 방식을 개선했다. 이전에는 compile이라는 단일 키워드로 모든 의존성을 처리했지만, 빌드 성능 최적화와 의존성 관리의 명확성을 위해 compile은 Gradle 7.0에서 완전히 deprecated(사용 중단)되었다. 이번 글에서는 Gradle의 api와 implementation의 차이를 알아보고, 각각을 언제 어떻게 사용하는지 정리해 보려고 한다. a.. 2024. 11. 22.
Optional.ifPresentOrElse로 자바의 조건 분기 깔끔하게 처리하기 개요자바에서 Optional은 널 값 처리와 관련된 문제를 효과적으로 해결해주는 유용한 클래스이다. 최근 프로젝트에서 Optional을 사용하다가 값을 조건에 따라 다르게 처리해야 하는 상황을 만났다. 기존에는 if-else 구문으로 처리했지만, Java 9부터 추가된 ifPresentOrElse 메서드를 사용하니 훨씬 깔끔하고 가독성이 좋아졌다. 이번 글에서는 ifPresentOrElse의 사용법과 활용 사례를 정리해보려고 한다. Optional.ifPresentOrElse란?Optional.ifPresentOrElse는 Optional에 값이 존재할 때와 존재하지 않을 때의 처리를 각각 지정할 수 있는 메서드이다. 이 메서드는 다음과 같은 구조를 가진다:public void ifPresentOrEls.. 2024. 11. 19.