728x90

분류 전체보기 166

테스트 더블의 종류

https://devroach.tistory.com/52?category=1031971 테스트 더블 Effective Unit Test 에서 이 부분을 읽으면서 배운게 너무나도 많다. 그 내용을 한번 정리해보려고 한다. 테스트 더블이란? 테스트 더블이란 쉽게 예기하면 Stub 과 같이 특정 메소드가 완성되기 전에 devroach.tistory.com 앞서 설명한 테스트 더블에 대해서 어떤 종류가 있는지 조금 더 알아보자. 테스트 더블의 종류 테스트 더블은 아래와 같이 4가지 분류로 나뉜다. 테스트 스텁 테스트 스텁은 원래의 구현을 최대한 단순한 것으로 바꾸는 것이다. 우리가 만약에 서버에서 로깅을 하다가 실패하는 로그를 찍어야 된다고 해보자. 하지만 로깅 자체는 테스트 로직에는 영향을 주지 않아 독립시켜..

Test 2021.11.22

테스트 더블

Effective Unit Test 에서 이 부분을 읽으면서 배운게 너무나도 많다. 그 내용을 한번 정리해보려고 한다. 테스트 더블이란? 테스트 더블이란 쉽게 예기하면 Stub 과 같이 특정 메소드가 완성되기 전에 대용해서 사용할수 있는 것을 뜻한다. 너무 추상적인거 같아서 쉽게 얘를 들면 Mocking 한 객체라고 생각해도 좋다. 순수히 그 메소드만 평가해야되는 단위 테스트에서는 이러한 테스트더블을 많이 사용하게 된다. 예를 들면 저번에 말했던 우리가 제어할 수 없는 대상을 테스트 더블로서 통제할 수 있는 것이다. 언제나 그렇듯, 코드로 보는것이 제일 나으니 코드로 한번 살펴보자. 예를 들어, 이런 Car class 가 있다고 해보자. 우리는 외부에서 Car 의 start 메소드 가 호출될때 Engin..

Test 2021.11.19

어떤 것이 좋은 테스트 코드인가?

프로그래밍을 계속 해오고 테스트코드를 작성하면서 내 일생을 관통할 주제 중 하나인 것 같다. 오늘은 그래서 Effective Unit Testing 을 읽으며 느낀 생각들을 정리해보려고 한다. 무엇이 좋은 테스트인가? 좋은 테스트 코드에는 아래와 같이 공통적인 다섯가지 요소들이 있다. 1. 테스트 코드의 가독성과 유지 보수성 우리가 현업에서 코드를 작성하다보면 흔히 불리우는 'Legacy' 로 구성된 시스템에 부딪힌다. 레거시 코드를 읽다보면 코드를 이해하는데만 오랜 시간을 쓰게 된다. 그래서 우리는 레거시 코드를 더 읽기 좋게 바꾸기 위해 리팩토링이란 것을 진행하고는 한다. 테스트 코드 또한 코드로 이루어져 있기에 가독성이 나쁘다면 'Legacy Code' 가 된다. Legacy Code 를 만나보지 ..

Test 2021.11.19

Kotlin Null 처리

우리가 Java 로 프로그래밍을 하다보면 Null Pointer Exception 을 마주치고는 한다. NullPointerException 은 정말 위험한 Runtime 에러이다. 그래서 요즘 최신 언어들은 컴파일 타임에 Null 에 대한 처리를 관리하려고 하는데 코틀린 또한 그렇다. 어떻게 코틀린에서는 Null 처리를 컴파일에 강요한다는 것일까? 한번 알아보자. Null 이 될 수 있는 타입 코틀린과 자바의 차이는 Null 이 될수 있는 타입을 명시적으로 지원한다는 것이다. 이 얘기가 무엇이냐면 프로퍼티나 변수에 Null 이 들어갈 수 있는 걸 명시할 수 있다는 것 이다. 말만 들으면 이게 무슨소리야? 라고 할 수 있으니 한번 코드로 살펴보기로 하자. 일단 이해를 위해서는 자바코드를 먼져 살펴보아야 ..

Kotlin 2021.11.18

Kotlin JPA - 상속 관계 맵핑

RDB 에서는 데이터들간의 연관관계는 있지만, 상속관계는 존재하지 않는다. 하지만 우리는 객체지향적으로 프로그래밍을 해야할때 상속이 필요할때가 있는데 JPA 에서는 이를 상속관계맵핑을 통해 지원한다. 이는 슈퍼타입 서브타입 논리 모델을 통해 실제 모델을 상속관계를 구성할 수 있는데 말이 어려우니 그림을 보자. 우리가 이런식으로 슈퍼타입 서브타입 모델을 실제 물리 모델인 테이블로 구현하기 위한 전략이 필요하다. 즉 쉽게 말해서 Album, Movie, Book 이 Item 을 상속받고 있는데 이것들을 어떻게 실제 물리 모델로 구현하냐이다. 조인전략 첫번째로는 조인 전략이 있다. 뭐 기존 RDB 를 엔티티로 가져오듯, 전부 Entity 각각으로 만들고 Entity 당 Table 을 만든다. 즉 Album, ..

Kotlin 2021.11.17

컴포넌트

컴포넌트는 배포 단위다. 자바의 경우 .jar 파일이 컴포넌트가 되고, 루비의 경우 gem 파일이 컴포넌트가 된다. 개발 초창기에는 프로그래머가 메모리에서 프로그램이 어느 곳에 위치할지 정의해야 했다. 아래의 코드를 간단하게 보자. *200 TLS START, CLA TAD BUFR 위에서 설명한대로 예전에는 프로그래머가 메모리에 어느 곳에 위치할지 적어줘야 하므로 Origin 이 필요했다. 프로그램 시작부의 *200 을 주목해보자. 과연 어떤 의미일까? 이는 메모리 주소 200에 로드할 코드를 생성하라고 알려주는 것이다. 내 단순한 추측인데 메모리의 코드영역이 이 영역이 아닐까? 라는 생각이 들게 되었다. 여하튼 현재 우리는 이런 고민을 할 필요가 없었지만, 그 당시에는 아주 큰 고민이였다. 왜냐하면 ..

Architecture 2021.11.17

Kotlin JPA

Kotlin JPA 를 Gradle 기반으로 간단히 설정해보자. https://start.spring.io/ 위의 링크로 이동해서 아래 사진과 같이 옵션들을 골라주자. 고르고 압축풀고 Intellij 를 통해서 열어주자. Kotlin 은 JPA 를 쓰기 위해서 여러가지 설정이 필요한데 그 이유는 첫번째로, JPA 는 기본적으로 클래스를 final 형태로 사용하는데 이는 Hibernate 와 별로 어울리지 않습니다. 그 이유는 JPA 에서는 지연로딩을 하게 될 경우 프록시 객체를 만들어야 하는데 이때 class 에 final 이 있게 되면 프록시 객체를 만들 수 없게 됩니다. 따라서 all-open plugin 을 이용해야 합니다. 뭐, 이런 문제 때문에 data class 를 이용하는 사람들도 있지만 스..

Kotlin 2021.11.16

학습방법 회고

오늘은 그간 프로그래머라는 길을 걸어오면서 어떻게 학습하는지? 꾸준히 할 수 있는 원동력이 뭔지 적어보려고 한다. 처음 컴퓨터공학이라는 걸 배웠을때는 대학교 1~4 학년 때 까지 컴퓨터 공학을 배웠던게 전부였다. 뭐 열심히 다니지도 않았고, 매일 놀러다니기만 했지만 그 당시의 학습법은 단순히 어느정도의 성적만 나오기 위한 공부였던 것 같다. 목적이 단기 목표인 "어느정도의 성적" 이였기에 추구하고자 하는 가치도 낮았고 그에 수반되는 노력도 적어질 수 밖에 없던 것 같다. 그래서 그 당시의 공부 내용들은 크게 머릿속에 잘 남지 않았지만, 그 중 유독 남는 기억들이 있다. 그 당시를 추억하며 생각해볼때, 어떻게 내 머릿속에 남았을까? 를 고민했던 적이 있는데 생각해보니 진짜로 이해하고, 남에게 그걸 설명해..

끄적 2021.11.16

Kotlin object

코틀린에는 object 라는 새로운 키워드가 도입되었다. 자바에는 이 키워드가 없는데 코틀린에서는 object 가 어떤 역할을 하게 되는지 알아보자. 백문이 불여일견 코드를 한번 작성해보자. 위의 코드는 급여를 계산하는 간단한 object 코드이다. 코틀린에는 자바와는 다르게 static keyword 가 존재하지 않는다. 그래서 object 로 선언해서 생성하게 되면 클래스 선언과 동시에 객체가 생성된다. 일단 object 는 싱글톤으로 구현되는 장점이 있다. 어떻게 Singleton 으로 구현되는 것일까? 컨버팅된 자바코드를 한번보자. 위의 코드를 컨버팅한 자바코드이다. 위를 보면 INSTANCE 에 Payroll 객체를 집어 넣는 모습이다. 하지만 위에 만 본다고 해서 전혀 싱글톤이 될거 같지는 않..

Kotlin 2021.11.15

Kotlin 변수 선언

배달의 민족으로 이직하게 되면서 이동하게 되는 팀에서 내년까지 100% 코틀린 마이그레이션이 목표라고 한다. 그래서 코틀린을 공부해야 하는 상황이다. 코틀린은 많이 해본적이 없어서 공부하며 나오는 내용들을 정리하려고 한다. (지금 까지 느낌은 TypeScript 와 무언가 많이 비슷하다..) 변수선언 자바에서는 변수를 선언할때 Type 이 가장 앞에 온다. 예를 들면 아래와 같은 코드와 같은 형태일 것 이다. Person person = new Person 위 코드 처럼 자바에서는 Person 이라는 Type 이 가장 앞에오며, person 이라는 변수가 Person Type 임을 알려준다. 하지만 코틀린에서는 Type 이 변수 뒤에 온다. 예를 들면 코틀린에서의 코드는 아래와 같다. val person..

Kotlin 2021.11.13
728x90