본문 바로가기

Java

(6)
어떻게 JVM은 메모리를 관리할까 1. GC란? C 와 같은 언어로 프로그래밍을 한다면 메모리를 할당 후, 사용하지 않는 대상에 대해서는 메모리 해제를 해주어야만 메모리 누수현상을 방지할 수 있습니다. 하지만 Java를 포함한 많은 언어에서는 메모리를 해제하는 작업을 해주지 않는데도 메모리 부족현상 없이 잘 작동합니다. 그 이유는 GC(Garbage Collector) 덕분입니다. GC는 메모리 관리기법중 하나로, 프로그램이 동적으로 할당했던 메모리 영역(Heap 영역) 중 필요 없게된 영역을 알아서 해제 해주는 것입니다. 1 - 1 GC의 장단점 장점 GC가 메모리를 관리해주기 때문에 개발자가 메모리 걱정 STOP 메모리 누수 STOP 단점 GC 작업은 순수 오버헤드 (STOP THE WORLD) 개발자는 언제 GC가 작동하는지 모른다..
디미터의 법칙 디미터의 법칙은 객체에게 자료를 숨기는 대신 함수를 공개하도록 하는 것입니다. 즉, 디미터의 법칙은 다른 객체가 어떠한 자료를 가지고 있는지 몰라야 한다는 것을 의미합니다. 이는 직관적으로 이해하기 위해 여러개의 점(.)을 사용하지 말아야 한다는 법칙으로도 유명합니다. TDD, Clean Code With Java 17기 과정을 들으면서 많은 것을 배우고 있습니다. 특히, 어떻게 클린 코드를 작성할 수 있을까를 많이 배우면서 지저분한 코드를 리팩토링 하고 테스트 코드를 작성하고 있습니다. 이번 미션을 진행하던 중 그동안 작성해왔던 코드의 큰 문제점을 발견하게 되었습니다. 문제점 디미터 법칙을 위반하는 코드 List cars = new ArrayList(); for (int i = 0; i < names...
Spring Test - H2 적용하기 1. 문제 정의 지난 프로젝트에선 모킹에 대한 학습을 위해 테스트 코드는 DB 연동을 하지 않았습니다. 따라서 이번 프로젝트에선 Classist 입장에서 테스트를 진행해보기 위해 DB를 연동한 테스트를 진행하려 합니다. 하지만 테스트를 실제 서비스중인 DB로 진행하게 된다면 예측할 수 없는 에러가 생길 수 있기에, H2 DB를 사용하여 테스트를 진행해보고자 합니다. 2. H2 설정 우선 build.gradle에 의존성을 추가해줍니다. testImplementation group: &#39;com.h2database&#39;, name: &#39;h2&#39;, version: &#39;1.4.200&#39;다음으로 test - resources - application-test.yml 파일을 생성해줍니다..
[JUnit5] @ParameterizedTest 1. 문제 정의 테스트 코드를 작성하다 보면 반복되는 코드들이 쌓이는 것을 알 수 있습니다. Set Collection 의 학습 테스트를 예시로 들어보겠습니다. @Test void numbersTest() { // given Set numbers = Set.of(1, 2, 3); // when, then assertThat(numbers).contains(1); assertThat(numbers).contains(2); assertThat(numbers).contains(3); } 위 테스트 코드의 문제점은 assertThat().contains(); 가 반복된다는 것입니다. 이러한 코드의 중복을 어떻게 줄일 수 있을까요? 2. @ParameterizedTest 위와 같은 문제를 해결하기 위해 @Para..
Java Record 1. Java record 그동안 Java 11 버전을 주로 사용하다보니, 이후 버전에 추가된 것들에 대해 잘 알지 못해서, 학습해보려 합니다. Java Record는 Java 14에서 JEP 359의 일부로 프리뷰 기능으로 도입되었고, Java 16에서 정식 기능으로 승격되었습니다. Record는 데이터만을 담는 불변의 단순한 클래스를 간결하게 생성하기 위한 새로운 타입입니다. 2. 왜 Record를 사용하는가? Java에서는 데이터 전송 객체 DTO, VO 등과 같이 데이터만을 저장하는 클래스를 많이 사용합니다. 그러나 이러한 클래스를 작성할 때 마다 생성자, 게터, equals(), hashCode(), toString() 등의 메서드를 반복적으로 작성해야 합니다. Record는 이러한 반복을 줄이..
== & Equals public class Equals { public static void main(String[] args) { String a = "abc"; String b = "abc"; String c = new String("abc"); System.out.println("a : " + System.identityHashCode(a)); System.out.println("b : " + System.identityHashCode(b)); System.out.println("c : " + System.identityHashCode(c)); System.out.println("a == b : " + a == b); System.out.println("a == c : " + a == c); System.out.pri..