분류 전체보기 1341

Ch01. 도서관리 애플리케이션 리팩토링 준비하기 - JUnit5 사용하기

필수 사용 어노테이션 class JunitTest { companion object { //스텍틱 함수 @BeforeAll @JvmStatic fun beforeAll(){ println("모든 테스틑 시작 전") } @AfterAll @JvmStatic fun afterAll(){ println("모든 테스트 종료 후") } } @BeforeEach fun beforeEach() { println("각 테스트 시작 전") } @AfterEach fun afterEach() { println("각 테스트 종료 후") } @Test fun test1() { println("테스트 1") } @Test fun test2() { println("테스트 2") } } @Test : 테스트 메서드를 지정한다. 테..

Ch01. 도서관리 애플리케이션 리팩토링 준비하기 - 수동 테스트 코드 작성하기

사칙연산 계산기에 대한 테스트 코드 작성(순수한 kotlin 코드) 사칙 연산 코드(Calculator.kt) class Calculator( //private var _number: Int //생성자로 받아 이 값을 계속 업데이트 할 예정 var number: Int ) { /* val number: Int get() = this.number */ fun add(operand: Int) { this.number += operand } fun minus(operand: Int) { this.number -= operand } fun multiply(operand: Int) { this.number *= operand } fun divide(operand: Int) { if (operand == 0) th..

Ch01. 도서관리 애플리케이션 리팩토링 준비하기 - 테스트 코드?!

테스트 코드란 무엇이고, 왜 필요한가?! 테스트 코드란? 프로그래밍 코드를 사용해 무엇인가를 검증한다. 자동으로(사람 손을 거치지 X) 테스트를 할 수 있다. 테스트 코드가 필요한 이유 개발 과정에서 문제를 미리 발견할 수 있다. 기능 추가와 리팩토링을 안심하고 할 수 있다. 빠른 시간 내 코드의 동작 방식과 결과를 확인할 수 있다. 좋은 테스트 코드를 작성하려 하다 보면, 자연스럽게 좋은 코드가 만들어진다. 잘 작성한 테스트는 문서 역할을 한다(코드리뷰를 돕는다) 예시 최초 개발자가 개발한 코드를 다른 개발자가 이어서 개발하게 된다면, 최초 개발자보다 이해도가 높지 않기 때문에 버그 확률이 높다 -> 테스트가 있다면, 버그 확률을 낮출 수 있다. 리펙토링을 진행하면서, 매번 수동으로 검증하면 시간이 오..

Ch01. 도서관리 애플리케이션 리팩토링 준비하기 - 도서 관리 애플리케이션 이해하기

화면 사용자 관련 기능 도서관의 사용자를 등록할 수 있다(이름 필수, 나이 선택) -> POST /user 도서관 사용자의 목록을 볼 수 있다 -> GET /user 도서관 사용자 이름을 업데이트할 수 있다. -> PUT /user 도서관 사용자를 삭제 할 수 있다. -> DELETE /user 책 관련 기능 도서관에 책을 등록할 수 있다. -> POST /book 사용자가 책을 빌릴 수 있다(대출되어 있는 책만 빌릴 수 있다) -> POST /book/loan 사용자가 책을 반납할 수 있다. -> PUT /book/return 도메인 정리 전체 도메인 User 관련 기능 클래스 확인 Book 관련 기능 클래스 확인 application.yml spring: datasource: url: 'jdbc:h2..

JvmStatic을 이용해 정적 함수 호출하기

JvmStatic을 이용해 정적 함수 호출하기 Kotlin의 동반 객체, 싱글톤 객체의 메서드 class HelloClass { //동반 객체 companion object { @JvmStatic fun hello() = "hello!" } } //싱글톤 객체 object HiObject { @JvmStatic fun hi() = "hi!" } fun main() { val hello = HelloClass.hello() val hi = HiObject.hi() } JAVA에서 사용하기 public class JvmStaticExample { public static void main(String[] args) { //String hello = HelloClass.Companion.hello(); //S..

Kotlin의 예외처리와 JAVA 예약어 접근 방법

JAVA에서 Kotlin 예외 다루기 JAVA 예외, JAVA에서 Kotlin예외 호출하기 public class JavaThrow { public void throwIOException() throws IOException { //호출 시, try-catch로 감싸거나 예외를 전파해야한다 throw new IOException("체크드 익셉션인 IOException 발생"); } public static void main(String[] args) { /* JavaThrow javaThrow = new JavaThrow(); try { javaThrow.throwIOException(); //checked exception이 발생했기 때문에 전파하거나 try-catch로 잡아야한다 } catch (IO..

Getter, Setter 호출하기

JAVA에서 Kotlin Getter/Setter 호출하기 Student Kotlin 클래스 class Student { @JvmField var name: String? = null var birthDate: LocalDate? = null val age: Int = 10 //var 키워드 setter 제거 var grade: String? = null private set //클래스 내부에서만 setter를 사용할 수 있다 fun changeGrade(grade: String) { this.grade = grade } } JAVA에서 호출하기 import java.time.LocalDate; public class JavaGetterSetterExample { public static void mai..

커스텀 스프링 부트 스타터 만들기

스프링 부트 스타터 이름 설명 spring-boot-starter-web SpringMVC 기반의 웹 애플리케이션 스타터, 임베디드 톰캣 포함 spring-boot-starter-security SpringSecurity 관련 설정과 라이브러리 포함 spring-boot-starter-data-jpa SpringTransaction, Hibernate, 히카리CP 등 포함 spring-boot-starter-test JUnit, Mokito, AssertJ 와 같은 테스팅 프레임워크 포함 spring-boot-starter-webflux Reactive 프레임워크인 ProjectReactor, Netty를 포함 스프링 부트 스타터는 스프링 부트 기반의 애플리케이션에 다른 스프링 프로젝트를 쉽게 추가할 수..

스프링 부트 자동 설정

자동 설정 자동 설정은 스프링 부트의 핵심 기술이다. 자동 설정은 개발자들이 스프링 관련 프레임워크나, 라이브러리를 추가했을 때 번거로운 설정 없이 동작하도록 최적화된 자동 설정을 내장하는 것을 말한다. 스프링 부트 프로젝트에 SpringDataJPA, SpringDataMongoDB와 같은 프로젝트를 적용하면, 내장된 설정이 동작하여, 개발자는 최소한의 설정값만 넣어주거나, 새로운 설정을 새롭게 구성할 수 있다. 자동 설정 살펴보기 ... org.springframework.boot.autoconfigure.data.jdbc.JdbcRepositoriesAutoConfiguration org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAut..

스프링 이니셜라이저

스프링 기반의 애플리케이션을 쉽게 만들 수 있게 도와주는 웹 애플리케이션으로, 스프링 이니셜 라이저를 사용해, 애플리케이션을 구성하면 초기 프로젝트 구성 시에 들어가는 시간과 노력을 줄여준다. 프로젝트 생성 방법 CLI로 생성하기 curl https://start.spring.io 터미널에 해당 명령어를 쳐서 다운로드 받는다 curl -G https://start.spring.io/starter.zip -d dependencies=web,data-jpa \ -d javaVersion=11 -o demo.zip 의존성 있는 애플리케이션을 설치하기 위해서는 위의 명령어처럼 치자 IDE에서 생성하기 IntelliJ에서 SpringInitializer로 생성하자(Pro만 가능하다) 웹 페이지에서 생성하기 htt..