분류 전체보기

    정규표현식 and With Java

    유튜브 우아한 Tech 채널에서 10분 테코톡을 듣고 공부한 내용입니다. 정규표현식 목차 정규표현식의 이해 정규표현식의 활용 Java에서 정규표현식의 활용 정규표현식의 이해 정규표현식 : Regular Expression, RegExp , Regex 정규 표현식은 줄여서 정규식이라고도 하며, 영어로는 Regular Expression, 줄여서 regex, regexp라고도 한다. 초반에는 편집기의 패턴매칭을 시작으로 사용되었으며, 수학적인 의미에서 시작되었다고 하며, 특정한 규칙을 가진 문자열의 집합을 표현하기 위해 쓰이는 형식언어이다. 수학자 Stephen Cole Kleene에 의해 생성됐으며 편집기의 패턴 매칭을 시작으로 사용. grep 명령어가 정규표현식을 사용한다. Vi, emacs 같은 편집기..

    5주차- 클래스

    백기선 님의 유튜브 온라인 자바 스터디를 정리한 글입니다 목표 자바의 Class에 대해 학습하세요. 학습할 것 (필수) 클래스 정의하는 방법 객체 만드는 방법 (new 키워드 이해하기) 메소드 정의하는 방법 생성자 정의하는 방법 this 키워드 이해하기 마감일시 2020년 12월 19일 토요일 오후 1시까지. 과제 (Optional) int 값을 가지고 있는 이진 트리를 나타내는 Node 라는 클래스를 정의하세요. int value, Node left, right를 가지고 있어야 합니다. BinrayTree라는 클래스를 정의하고 주어진 노드를 기준으로 출력하는 bfs(Node node)와 dfs(Node node) 메소드를 구현하세요. DFS는 왼쪽, 루트, 오른쪽 순으로 순회하세요. Class 정의하는..

    6주차 - 상속

    목표 자바의 상속에 대해 학습하세요. 학습할 것 (필수) 자바 상속의 특징 super 키워드 메소드 오버라이딩 다이나믹 메소드 디스패치 (Dynamic Method Dispatch) 추상 클래스 final 키워드 Object 클래스 자바 상속의 특징 상속 : Inheritance 상속이란, 부모 클래스의 변수와 메소드를 자식 클래스가 상속 받는 것을 의미한다 상속을 사용하면, 코드를 재사용하기에 편리하고, 클래스간의 계층구조를 분리하며 관리하기 쉬워진다. 상속 키워드 : extends public class Parent {} public class Child extends Parent{} extends 키워드를 사용하여 부모 클래스를 명시하고 상속받을 수 있다. 상속 받는 클래스 (ex: child)를 ..

    @DataJpaTest H2 in-memory 테스트 오류

    @DataJpaTest H2 기반 in-memory 테스트 시 에러 SpringBoot JPA 를 사용하는 환경에서 JUnit을 이용해서 persistence의 단위테스트가 익숙하지 않아서 공부 하려고 했다. 실제 개발 서버 DB와 연동해서 테스트하다가는 다른 이슈가 있을 수 있어 In-memory로 테스트를 하길 원했다. DBMS를 MySQL로 사용해서 기본 H2 In-memory가 아닌 H2의 MODE와 hibernate의 Dialect를 MySQL 설정하여 사용하려고 하였다. 하지만 다음과 같은 오류로 인해 전혀 테스트를 할 수가 없었다. Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "\000a c..

    Spring Boot JPA Test @DataJpaTest 기본 설정

    Spring Boot JPA Test @DataJpaTest 기본 설정 jpa관련 테스트(Entity, Repository)를 할때 @DataJpaTest를 이용해서 진행하면 JPA관련 Bean과 @Transactional 어노테이션이 달려있어서 테스트가 끝나면 Configuration만 주입받아서 빠르게 테스트를 진행할 수 있다. @Transactional 어노테이션이 달려있어서 테스트가 끝나면 롤백도 되어서 간단하게 결과를 확인할 수 있는 장점이 있다. MySQL, MSSQL, Oracle 처럼 다른 DB를 연동해서 사용할 수도 있지만, 이 글에서는 in-memory DB인 H2를 연동해서 테스트 하는 방법을 정리하고자 한다. 환경 SpringBoot : 2.7.3 Java : JDK11 MacOS ..

    Java Junit 슬라이스 테스트

    슬라이스 테스트 슬라이스 테스트는 단위 테스트와 통합 테스트의 중간 개념, 레이어드 아키텍처를 기준으로 각 레이어 별로 나누어 테스트를 진행한다. 이말인 즉슨, 레이어별로 단위테스트를 한다는것 단위 테스트를 수행하기 위해서는 모든 외부 요인을 차단하고 테스트를 진행해야 한다. 하지만 컨트롤러는 개념상 웹과 맞닿은 레이어로서 외부 요인을 차단하고 테스트하면 의미가 없기 때문에 슬라이스 테스트를 진행하는 경우가 많다. 스프링은 레이어 별로 잘라서 특정 레이어에 대해서 Bean을 최소한으로 등록시켜 테스트 하고자 하는 부분에 최대한 단위 테스트를 지원해주고 있다. 컨트롤러를 이용한 슬라이스 테스트는 WebMvcTest 어노테이션을 이용한다. 그리고 Spring Data JPA 사용시에도 @SpringBootT..

    JUnit5 - Java에서의 단위테스트6 - BDD

    BDD 스타일 Mockito API BDD:애플리케이션이 어떻게 “행동”해야하는지에 대한 공통된 이해를 구성하는 방법으로, TDD에서 창안했다. BDD : Behaviour-Driven Development의 약자 TDD : Test-Driven Development의 약자 BDD는 시나리오를 기반으로 테스트 케이스를 작성하며 함수 단위 테스트를 권장하지 않는다. 이 시나리오는 개발자가 아닌 사람이 봐도 이해할 수 있을 정도의 레벨을 권장한다. 하나의 시나리오는 Given, When, Then 구조를 가지는 것을 기본 패턴으로 권장하며 각 절의 의미는 다음과 같다. Feature : 테스트에 대상의 기능/책임을 명시한다. Scenario : 테스트 목적에 대한 상황을 설명한다. Given : 시나리오 진..

    JUnit5 - Java에서의 단위테스트5 Mock, Mockito, Stup

    Mock 객체 Stubbing stub이란 토막,꽁초,남은부분,몽당연필.. 이라는 뜻으로 dummy객체가 마치 실제로 동작하는 것 처럼 보이도록 만들어놓은 것 즉 Mock 객체의 행동을 조작하는 것 모든 Mock 객체의 행동 Null을 리턴한다. (Optional 타입은 Optional.empty 리턴. 즉 비어있는 옵셔널 객체) Primitive 타입은 기본 Primitive 값. 콜렉션은 비어있는 콜렉션. Void 메소드는 예외를 던지지 않고 아무런 일도 발생하지 않는다. 예제1 memberService.findById(1L) member 객체를 나오게 할라면 다음과 같이 쓰면 된다. 만약 2L, 3L 등 다른 member 객체를 나오게 한다면 오류가 난다. 1L로만 member를 나오게 했기 때문 ..

    JUnit5 - Java에서의 단위테스트4 Mock, Mockito

    Mockito란? Mockito는 개발자가 동작을 직접 제어할 수 있는 가짜(Mock) 객체를 지원하는 테스트 프레임워크. Mock: 진짜 객체와 비슷하게 동작하지만 그동작을 직접 그 객체의 행동을 관리하는 객체. Mockito: Mock 객체를 쉽게 만들고 관리하고 검증할 수 있는 방법을 제공한다. 테스트를 작성하는 자바 개발자 50%+ 사용하는 Mock 프레임워크. 단위 테스트에 고찰 참조 : https://martinfowler.com/bliki/UnitTest.html Mock Object를 만들어 주입시켜주는 방법을 지원해주는 라이브러리이다. Mockito는 과거에는 static메서드를 지원하지 않는 단점이 있어 PowerMock을 대안으로 사용했으나 Mockito 3.4.0부터는 static ..

    JUnit5 - Java에서의 단위테스트3 - 테스트 인스턴스들

    JUnit은 테스트 메소드 마다 테스트 인스턴스를 새로 만든다. 기본 전략. 테스트 메소드를 독립적으로 실행하여 예상치 못한 부작용을 방지하기 위함이다. 이 전략을 JUnit 5에서 변경할 수 있다. 즉 테스트마다 필드를 공유하지 않는다. 테스트 메서드마다 System.out.println(this) 를 찍어보면 인스턴스가 다르단 걸 알 수 있다. @TestInstance(Lifecycle.PER_CLASS) 테스트 클래스당 인스턴스를 하나만 만들어 사용한다. -> 하나의 인스턴스를 공유한다 경우에 따라, 테스트 간에 공유하는 모든 상태를 @BeforeEach 또는 @AfterEach에서 초기화 할 필요가 있다. @BeforeAll과 @AfterAll을 인스턴스 메소드 또는 인터페이스에 정의한 defau..