BDD 스타일의 테스트 코드 작성 가이드
·
Java
사내에서 프로젝트를 수행하며 테스트 코드의 중요성을 동료들에게 설파했지만, 테스트 작성에 익숙하지 않은 동료들도 있어 가이드를 작성할 겸 정리하며 모호했던 개념들이 정리했다. 테스트 피라미드를 이해하고 있다면 작성해야 할 테스트와 그렇지 않은 테스트를 좀 더 빨리 알 수 있는데, 이 글의 목적에서 벗어나는 내용도 많으므로 다른 정리 글에서 정리하겠다.용어 정리경험상 용어를 정확히 알고 작성하면 전체적인 코드의 가독성이 좋아짐을 느꼈다.내가 작성하고 있는 코드 한 줄이 Stub인지, Mock인지를 모르고 작성하면, 읽는 사람이 이해하는데 시간과 에너지를 더 많이 써야한다.그래서 자주 사용되는 용어를 간단하게 정리하고 가이드를 보자.용어는 정리가 잘 된 이 블로그를 참고했다.Test Double (테스트 더..
Java Memory Model(JMM)과 동시성 규칙
·
Java
Java Memory ModelJava Memory Model(JMM)은 JVM 내에서 메모리에 데이터를 읽고(read) 쓸 때(write)의 규칙을 말한다.JMM는 메모리를 두 가지의 공간 개념으로 다룬다.하나는 스레드 간 공유되는 메모리로,다른 하나는 스레드 내에서만 사용되는 메모리로 다룬다.JVM에서 스레드 간 공유되는 영역은 Heap(Method Area도 포함)이다.스레드 내에서만 사용되는 영역은 JVM Stack이다. (JVM Stack 내의 Stack Frame들을 아우르는 스택 영역이라 생각하자.) 메모리 모델의 이해를 위해 쉬운 예시를 들어보자 가정Heap에는 `Object 1` 객체와 `Object 2` 객체가 들어있다.메서드 내용은 primitive 타입인 int 변수를 생성하고, `..
JVM 아키텍처 정리
·
Java
JVM(Java Virtual Machine), JMM(Java Memory Model) 관련 글들을 읽다가 "논리적인 개념"과 그 개념을 구현한 "구현체"를 헷갈려했다. 이 글을 통해 JVM 아키텍처에 대해 제대로 정리해 보자.JVM 명세To implement the Java Virtual Machine correctly, you need only be able to read the class file format and correctly perform the operations specified therein. Implementation details that are not part of the Java Virtual Machine's specification would unnecessarily co..
[Java] opencsv 로 CSV 읽고 저장하기
·
Java
개요이 글에서는 Java와 OpenCSV 라이브러리를 사용하여 간단한 웹 크롤러를 구현하고, 수집한 데이터를 CSV 파일로 저장하거나 CSV 파일에서 읽어오는 방법을 다룹니다.OpenCSV 의존성 추가먼저, 프로젝트에 OpenCSV 라이브러리를 추가합니다. build.gradle 파일에 다음 의존성을 추가하세요.implementation 'com.opencsv:opencsv:5.9'Java POJO 구현다음은 CSV 파일의 데이터를 매핑할 Java POJO 클래스입니다.import com.opencsv.bean.CsvBindByName; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.format.DateTim..
[Java] Optional에서 map과 flatMap의 차이점 쉽고 빠르게 이해하기
·
Java
map과 flatMap의 차이점Optional의 map과 flatMap의 주요 차이점은 함수의 반환 타입이 다르다는 것이다.map : Optional로 감싸진 타입(T)이 비어있지 않으면 .map()을 적용하고, 결과를 Optinal로 감싸서 반환한다. 만약 처음부터 Optional이 비어있었다면 빈 Optional을 반환한다.flatMap : map과 비슷하다. 하지만 .flatMap()을 적용한 결과를 Optional로 감싸지 않고 반환한다는 점만 다르다. 즉, 중첩된 Optional을 평면화 해주는 역할을 한다.예제 코드public class Car { // Car의 필드에 name은 차 이름이 있을수도 없을수도 있기에 Optional 로 감싸져 있다. private Optional na..