🚀 기능 요구 사항 로또 게임은 아래와 같은 규칙으로 진행됩니다. - 로또 번호의 숫자 범위는 1~45까지이다. - 1개의 로또를 발행할 때 중복되지 않는 6개의 숫자를 뽑는다. - 당첨 번호 추첨 시 중복되지 않는 숫자 6개와 보너스 번호 1개를 뽑는다. - 당첨은 1등부터 5등까지 있다. 당첨 기준과 금액은 아래와 같다. - 1등: 6개 번호 일치 / 2,000,000,000원 - 2등: 5개 번호 + 보너스 번호 일치 / 30,000,000원 - 3등: 5개 번호 일치 / 1,500,000원 - 4등: 4개 번호 일치 / 50,000원 - 5등: 3개 번호 일치 / 5,000원 로또 구입 금액을 입력하면 구입 금액에 해당하는 만큼 로또를 발행해야 한다. 로또 1장의 가격은 1,000원이다. 당첨 번..
AssertJ의 assertThat() AssertJ는 JUnit 테스트 코드에 사용되어 많은 Assertion을 제공하는 자바 라이브러리입니다. 이는 에러 메세지와 테스트 코드의 가독성을 높여주는 장점이 있습니다. 모든 테스트 코드는 asssertThat() 메서드에서 출발합니다. 다음과 같은 형식으로 AssertJ에서 제공하는 다양한 메서드를 연쇄 호출하며 코드를 작성할 수 있습니다. isEqualTo(Object o) : equals()로 실제값이 기대값과 내용이 같은지 검증 isNotEqualTo(Object o) : equals()로 실제값이 기대값과 내용이 다른지 검증 isInstanceOf(Class type) : 실제값이 기대값 타입의 인스턴스인지 검증 isNotInstanceOf(Clas..
JUnit JUnit는 단위 테스트를 쉽게 해주는 테스트용 Framework입니다. 코드가 거대해지고 복잡해짐에 따라, 유닛 단위로 지속적인 테스트를 해서 작은 단위로 빠르고 안정적인 검증을 하기 위해 JUnit을 사용합니다. JUnit 어노테이션 @Test 함수 위에 선언해 테스트 함수임을 지정합니다. @Test(timeout = 밀리초) 테스트 함수의 수행 시간을 제한합니다. 테스트할 함수가 수행되는 시간이 어노테이션 매개변수로 지정한 시간을 넘긴다면 테스트 Fail @Test(expected = 예외) 테스트 함수의 예외를 지정합니다. 매개변수로 지정한 예외가 발생해야 테스트 Pass @Ignore 해당 어노테이션이 선언된 테스트 함수는 무시하도록 지정합니다. @BeforeEach 해당 어노테이션이..
🚀 기능 요구 사항 초간단 자동차 경주 게임을 구현합니다. 주어진 횟수 동안 n대의 자동차는 전진 또는 멈출 수 있다. 각 자동차에 이름을 부여할 수 있다. 전진하는 자동차를 출력할 때 자동차 이름을 같이 출력한다. 자동차 이름은 쉼표(,)를 기준으로 구분하며 이름은 5자 이하만 가능하다. 사용자는 몇 번의 이동을 할 것인지를 입력할 수 있어야 한다. 전진하는 조건은 0에서 9 사이에서 무작위 값을 구한 후 무작위 값이 4 이상일 경우이다. 자동차 경주 게임을 완료한 후 누가 우승했는지를 알려준다. 우승자는 한 명 이상일 수 있다. 우승자가 여러 명일 경우 쉼표(,)를 이용하여 구분한다. 사용자가 잘못된 값을 입력할 경우 IllegalArgumentException을 발생시킨 후 애플리케이션은 종료되어야..
Rx Rx란 ReactiveX(Reactive Extensions)의 약자로, 리액티브 프로그래밍을 위한 라이브러리입니다. ReactiveX는 비동기 프로그래밍과 Observable 시퀀스를 이용해 이벤트를 처리하기 위한 반응형 프로그래밍 기법입니다. 효율적으로 신속하게 비동기 처리를 도와줍니다. 함수형 프로그래밍을 일부 지원합니다. 옵저버 패턴을 사용합니다. 콜백에서 또 콜백을 하는 콜백 지옥에서 벗어날 수 있습니다. ReactiveX Reactive Extensions for Async Programming. ReactiveX has 42 repositories available. Follow their code on GitHub. github.com ReactiveX에는 다음과 같이 여러 가지가 존..
🚀 기능 요구 사항 기본적으로 1부터 9까지 서로 다른 수로 이루어진 3자리의 수를 맞추는 게임입니다. 같은 수가 같은 자리에 있으면 스트라이크, 다른 자리에 있으면 볼, 같은 수가 전혀 없으면 낫싱이란 힌트를 얻고, 그 힌트를 이용해서 먼저 상대방(컴퓨터)의 수를 맞추면 승리합니다. 예) 상대방(컴퓨터)의 수가 425일 때 123을 제시한 경우 : 1스트라이크 456을 제시한 경우 : 1볼 1스트라이크 789를 제시한 경우 : 낫싱 위 숫자 야구 게임에서 상대방의 역할을 컴퓨터가 합니다. 컴퓨터는 1에서 9까지 서로 다른 임의의 수 3개를 선택합니다. 게임 플레이어는 컴퓨터가 생각하고 있는 서로 다른 3개의 숫자를 입력하고, 컴퓨터는 입력한 숫자에 대한 결과를 출력합니다. 이 같은 과정을 반복해 컴퓨터..
아키텍처 패턴 아키텍처 패턴은 디자인 패턴과 소프트웨어공학에서 발생하는 문제를 해결한다는 점에서 비슷합니다. 하지만 디자인 패턴은 특정 문제를 해결하기 위한 방법이고, 아키텍처 패턴은 전체적인 소프트웨어에서 발생하는 문제들을 해결하기 위한 방법입니다. 앱 아키텍처 패턴에는 MVC, MVP, MVVM, MVI 등 다양한 패턴이 존재합니다. 각 앱의 특성에 맞게 알맞은 패턴을 적용해 앱을 설계해야 합니다. MVC 패턴 MVC 패턴은 Model, View, Controller로 구성되어 있습니다. Model : 앱의 데이터를 저장하고 처리하는 역할을 담당합니다. SQLite, File, Content Provider 등이 포함됩니다. View : 화면 구성을 담당하는 영역입니다. 이 영역은 View 클래스를 ..
Coil Coil은 Coroutine Image Loader의 약자이며, Kotlin Coroutines(코루틴)으로 만들어진 Android 백앤드 이미지 로딩 라이브러리입니다. Coil에는 이렇게 다양한 장점들이 있습니다. Glide, Fresco보다 상대적으로 가볍습니다. 심플함과 최소한의 boilerplate를 위하여 Kotlin의 기능을 활용하기 때문에 사용하기 쉽습니다. Kotlin으로 개발되었으며 Coroutines, OkHttp, Okio, AndroidX Lifecycles 등의 최신 라이브러리를 사용합니다. 메모리와 디스크의 캐싱, 메모리의 이미지 다운 샘플링, Bitmap 재사용, 일시정지/취소의 자동화 등등 수많은 최적화 작업을 수행하므로 처리 속도가 굉장히 빠릅니다. Coil Ove..