[H2 Database] 스프링 부트와 H2 데이터베이스: 인메모리 RDBMS의 장점과 활용
·
Database/H2 Database
H2 데이터베이스는 Java로 작성된 오픈 소스 데이터베이스 관리 시스템(DBMS)입니다. 주로 테스트 및 개발 환경에서 사용되며, 경량 데이터베이스로서 빠르고 간편하게 설정할 수 있는 것이 큰 장점입니다.관계형 데이터베이스 관리 시스템(RDBMS)이란?RDBMS는 관계형 데이터베이스 관리 시스템(Relational Database Management System)의 약자로, 데이터를 행(Row)과 열(Column)로 구성된 테이블 형태로 관리하는 데이터베이스 시스템을 의미합니다. RDBMS의 주요 특징은 다음과 같습니다.테이블 기반 구조데이터는 행과 열로 구성된 테이블에 저장됩니다. 각 테이블은 고유한 이름을 가지며, 서로 관계를 맺을 수 있습니다.데이터 무결성데이터의 정확성과 일관성을 유지하기 위해 ..
[Java] JUnit과 AssertJ를 활용한 효과적인 단위 테스트 작성 방법
·
Back end/Java
JUnit의 기본 개념과 Given-When-Then 패턴, JUnit 테스트 생명주기, 그리고 AssertJ를 활용하여 테스트 코드의 가독성을 높이는 방법에 대해 설명하겠습니다.JUnitJUnit은 자바 기반의 단위 테스트를 위한 강력한 프레임워크입니다. 단위 테스트는 개별 구성 요소나 함수가 의도한 대로 동작하는지 확인하는 과정으로, JUnit은 이러한 테스트를 간편하고 효율적으로 작성할 수 있게 해줍니다. Given-When-Then 테스트 방식JUnit에서 자주 사용되는 테스트 방식 중 하나는 Given-When-Then 패턴입니다. 이 패턴은 테스트를 보다 명확하고 읽기 쉽게 만들어줍니다. 각 단계는 다음과 같습니다.Given: 테스트의 초기 상태를 설정합니다. 필요한 객체를 생성하거나 초기화하..
[Java] 자바 레코드(Record)란? (예제 포함)
·
Back end/Java
레코드(Record)란?Java 14에서 처음 소개되었고, Java 16에서 정식 기능으로 추가되었습니다.데이터 전달 객체(Data Transfer Object, DTO)를 더욱 간편하게 만들기 위한 기능을 제공합니다.파라미터에 정의한 필드는 private final로 정의됩니다.private → 클래스 외부에서 직접 접근 불가. → 게터(getter)를 자동으로 생성함.final → 초기화된 이후 값이 변경되지 않음(불변성) → 상속할 수 없음.게터(getter)를 자동으로 만들기 때문에 따로 정의하지 않아도 됩니다.생성자, 게터, equals(), hashCode(), toString() 메서드를 자동으로 생성함.'get' 접두사 없이 필드명과 동일하게 자동 생성됨.예제 코드record Person(..
[Java] Scanner 클래스의 next()와 nextLine() 차이
·
Back end/Java
Scanner 클래스 공백 문자(white-space)를 기준으로 입력 데이터를 나눕니다. 공백 문자(white-space): 공백(space), 탭(tab), 엔터(\n) 등 sc.next()와 sc.nextLine()은 모두 문자열을 반환하지만 아래와 같은 차이점이 있습니다. sc.next() 공백(space)을 기준으로 입력받습니다. 이는 개행문자(Enter)를 무시하고 입력받기 때문입니다. import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); // 동대문 엽기떡볶이 while(sc.hasNext()){ System.out.print..
[Java] Stream.distinct() 중복 제거
·
Back end/Java
Stream.distinct() Stream의 distinct() 메서드는 컬렉션의 요소에서 중복을 제거하여 반환합니다. 예제. distinct() 메서드 활용하여 중복된 과일 제거 후 출력하기 import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { String[] StringArray = new String[]{"딸기", "딸기", "당근", "참외", "메론", "메론"}; List list = Arrays.asList(StringArray); List distinctList = list.stream().distinct().toList(); distinctList..
[Java] Stream의 filter() 메소드 (ft.collect())
·
Back end/Java
filter() - 컬렉션에서 조건에 맞는 요소만 뽑아 새로운 스트림을 생성합니다. (필터링 기능) - collect()와 같이 사용하여 조건에 맞는 새로운 리스트를 만들 수 있습니다. 예제. 리스트에서 30보다 큰 값을 뽑아 새로운 리스트로 만들기 1. 기존 방식 import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { Integer[] arr = new Integer[]{10, 20, 30, 40, 50}; List list = Arrays.asList..
[Java] for-loop를 Stream forEach로 변경하기
·
Back end/Java
아래와 같이 list의 모든 값을 for-loop로 순회하는 코드가 있습니다. import java.util.ArrayList; import java.util.List; public static void main(String[] args) { List list = new ArrayList(); list.add("딸기"); list.add("당근"); list.add("수박"); list.add("참외"); list.add("메론"); for(int i = 0; i < list.size(); i++){ System.out.println(list.get(i)); } } 이러한 코드를 Stream의 forEach을 활용하여 간결하게 바꿀 수 있습니다. forEach : 컬렉션의 요소들을 하나씩 꺼내어 반복한다..
[JavaScript] var / let / const (중복선언, 재할당, 스코프)
·
Front end/JavaScript
자바스크립트에서 변수를 선언할때 사용하는 var, let, const는 어떤 차이점이 있을까요? [1. 변수의 선언방식] 1.1. var var은 중복 선언과 변수의 재할당이 가능합니다. 변수를 유연하게 사용할 수 있다는 장점이 있지만 복잡한 코드에서 같은 이름의 변수가 여러번 사용되면 문제를 파악하기에 어려움이 있습니다. var name = "메롱" console.log(name) //메롱 var name = "안녕" console.log(name) //안녕 name = "하이" console.log(name) //하이 이러한 문제점을 보완하기 위해 ES6에서 등장한 변수의 선언방식이 let과 const 입니다. 1.2. let let은 중복 선언은 불가하고 변수의 재할당은 가능합니다. let name..