![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEXmlX%2Fbtrp66himwf%2FZMawM2DJS7uS5aJhBA8D4K%2Fimg.png)
2단계 로또
2022. 1. 9. 19:39
TDD 클린코드 java 10기 교육 과정
2단계 로또 디미터 법칙 기존에는 통계내는 역할이 LottoTickets에 있었다. LottoTicket은 티켓을 생성하고 구매 금액을 검증하고, (통계)수익률과 순위당 맞은 개수를 구하고 있었다. 하지만 생각하다 보니 여기서 통계를 구하는 것이 맞을까? 게임을 하지도 않았는데? 라는 생각이 들었다. 그래서 게임을 시작하는 LottoGame으로 역할을 옮기게 되었다. 또 의문이 들었다. 여기서 통계를 구하는 것이 맞을까? 게임만 실행하면 되는데? 라는 생각이 들었다. 그래서 개발자가 반드시 정복해야 할 객체지향과 디자인 패턴 책에서 본 디미터 법칙을 적용해보기로 했다. 애초에 디미터 법칙을 어기고 의존 객체의 내부 구조를 알아야 하는 코드였기 때문이다. 적용을 하다 보니 결국 아래와 같이 WinningS..
1단계 자동차 경주 회고
2022. 1. 9. 19:05
TDD 클린코드 java 10기 교육 과정
과정 소개 클린코드를 위한 TDD, 리팩토링 with java10 과정을 리뷰하려고 한다. 해당 과정은 순수 자바로 간단한 어플리케이션을 TDD로 만드는 과정이다. 자바를 어느정도 기본 문법만 안다면 초초초강추한다. 그 어디서도 배우기 힘든 교육이라고 생각한다. 왜냐하면, 능동적 학습을 할 수 있고, 코드 리뷰를 받을 수 있다. 그리고 운영하기 좋은 코드는 어떤 코드인가에 대해 집중하여 코드를 작성하다보니 자연스레 공부되는 점도 많다. 결과적으로 객체지향적으로 유지보수 하기 좋은 코드를 짜기위한 훈련을 하는 과정이다. 나는 서비스가 성장하기 위한 기본 베이스는 변화에 빠르게 대응할 수 있는 코드라고 생각한다. 변화에 빠르게 대응할 수 있는 코드는 클린 코드라고 생각한다. 물론 이상적으로 모두 완벽하게 할..
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGKWEC%2Fbtrp95PUKHw%2FqsdhhSLqADtMiRSRvwkw7K%2Fimg.png)
IntelliJ 실행 시 finished with non-zero exit value
2022. 1. 9. 18:19
InteliJ
finished with non-zero exit value 인텔리제이에서 예외가 제대로 발생하지 않고 위와 같은 메시지만 출력되는 현상이 있다. 이 경우 어떤 에러가 발생했는지 알 수 없으므로 해결이 필요하다. 아래와 같이 환경설정 -> BuildTool -> gradle에서 빨간 박스를 gradle에서 IntelliJ로 변경 해주면 된다.
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb28SGo%2FbtrpTgYmcdK%2Ftvy5DvaTd9ukFxqSe6jiY1%2Fimg.png)
상태 패턴이란
2022. 1. 5. 15:46
기타 IT
상태 패턴이란 무엇인가? 상태에 따라 다르게 동작해야 할 때 사용할 수 있는 패턴이다. 볼링으로 언제 사용할 수 있는지 알아보자. 볼링은 총 10 프레임이 있다. 혼자 친다고 가정하고, 현재 프레임의 상태를 예로 들어보자. 프레임의 상태란 한 프레임에서 스트라이크, 스페어, 미스, 1번의 투구만 한 상태, 아직 투구 하지 않은 상태 이렇게 총 5가지의 상태이다. 아직 투구를 하지 않은 상태에서 투구를 시도하면 → 1번의 투구만 한 상태 or 스트라이크 상태가 되어야 하고, 1번의 투구만 한 상태에서 투구를 시도하면 → 스페어 or 미스 상태가 되어야 한다. 이렇게 5가지의 상태에 따라 투구 기능은 다른 동작을 하게 되는 것이다. 클래스 레벨로 알아보자. bowl 메서드만으로 예를 들어보자. Throwin..
템플릿 메서드 패턴
2021. 12. 29. 10:03
기타 IT
템플릿 메서드 패턴이란? 실행 과정/단계는 동일한데 각 단계 중 일부의 구현이 다른 경우 사용할 수 있는 패턴이다. 동일한 실행 과정을 제공하는 템플릿 메서드를 활용해 중복을 제거할 수 있다. 크게 두 가지 구조로 나뉜다. 실행 과정을 구현한 상위 클래스 일부 단계를 구현한 하위 클래스 상위 타입의 역할은 무엇일까? 실행 과정을 구현한 메서드를 제공하는 역할을 한다. 일부 단계 구현을 추상 메서드로 제공한다. 이 일부 단계 구현은 각 다른 구현이기 때문에 추상 메서드로 제공하며, 하위 클래스에서 구현하게 된다. 실행 과정 메서드에서 일부 단계 구현 메서드를 호출하는 방식이다. 보통은 하위 타입이 상위 타입의 기능을 재사용할지 정하기 때문에 흐름의 주체가 하위이지만 템플릿 메서드 패턴은 흐름의 주체가 상위..
전략(Strategy) 패턴
2021. 12. 23. 11:17
기타 IT
전략 패턴이란? 동일한 기능의 알고리즘이 다를 경우 해당 알고리즘을 쉽게 변경하기 위한 패턴이다. DI를 활용한 방식으로 OCP에 특화되어, 변경에 용이하다. 전략 패턴을 사용하지 않으면 어떻게 안좋은데? 동일한 기능이나 알고리즘이 달라져 자주 변경이 된다면 보통 if-else로 많이 작성을 할 것이다. 어떤 상황인지 살펴 보자. 아래는 과일 가게에서 할인 정책을 적용해 가격을 계산하는 기능이다. 해당 모듈은 가격을 계산하는 모듈이다. 가격 계산과 할인 정책이 같이 들어가 있다. 아마 보통 이렇게 작성되어 있는 코드가 많을 것이다. 나도 회사에서 100% 이렇게 되어있다. public class Calculator { public int calculate(boolean firstGuest, List it..
git 명령어 모음
2021. 12. 22. 11:28
Git
프로젝트 복사 특정 브랜치 git clone -b {브랜치명} --single-branch https://github.com/{github_아이디}/{저장소 아이디}모든 브랜치 git clone https://github.com/{github_아이디}/{저장소 아이디}
리플렉션으로 DI 컨테이너 만들기
2021. 12. 21. 19:40
Java
java 리플렉션 리플렉션이란? 클래스 타입을 알지 못해도, 해당 클래스의 필드, 메서드 등 클래스의 메타 정보에 접근할 수 있도록 도와주는 자바 API이다. 즉, 리플렉션은 클래스나 메서드의 메타정보를 사용해서 동적으로 호출하는 메서드를 변경할 수 있다. 구체적인 클래스 타입을 알지 못한다? 이 의미는 스프링의 DI 컨테이너에서 @Service, @Repository를 생각하면 된다. 해당 애노테이션을 붙이면 new를 해주지 않아도 알아서 주입이 된다. 이걸 가능하게 하는 것이 리플렉션이다. 그럼 클래스 타입을 알지 못한다는 것은 무슨 상관일까? 이 부분은 해당 글이 마지막 DI 프레임워크 만들기에서 더상세하게 설명 하겠지만, 간략히 설명 하겠다. 코드로 예를 들어보자. 아래는 두 개의 클래스가 있다...