테스트 주도 개발 (Test-driven development TDD) 여기서 가장 중요한 단어는 development 이다. d가 들어간 단어가 많은데 Development 인지 design 인지 구분해야한다. TDD 는 development 이므로 TDD로 넘어가기 전에 설계(design) 을 끝내야 한다. design에 대한 고민을 안하고 TDD 를 하려고 하면 어렵다. TDD를 사용하면 자신감을 불어 넣어 준다.TDD = TFD(Test First Development) + 리팩터링 클래스 설계, 명세, 기능 요구사항 분석은 사전에 수행 TDD의 사이클실패 테스트 작성테스트가 빨리 통과 되게끔 만든다. -> 죄악을 저지른다. 밑에 나오는 예시를 보면 죄악이 어떤건지 알게될 것이다ㅎㅎ리팩터링 ->..
분류 전체보기
이전 글에 이어서 현직자 분의 step2 리뷰 입니다. 반복되는 리뷰는 앞 글에서 묶어서 이미 정리하였습니다. 1. 재사용 가능하게 만들어라 class RaceTime(private var time: Int) { ... fun reduceTime(): Boolean { if (time Unit) { repeat(time) { func() } } } repeatTimes는 함수를 인자로 받아 time 만큼 반복한다. 컨트롤러에서 반복하고 싶은 함수를 전달한다. 기존 var time 은 이제 불변 변수 val 로 변경한다. class Controller(){ private fun race(cars: List, raceTime: RaceTime) { outputView.printExecutionResult()..
현직자 리뷰어 님의 피드백을 바탕으로 정리하였습니다. 페어 프로그래밍 리뷰 페어 프로그래밍을 처음해봐서 아직 제대로 이해하지 못한 코드를 많이 적용하게 되었고 그러다 보니 이해도가 점점 떨어지게 되었다. 리뷰 또한, 당연하게도 제대로 이해하지 못한 것들의 질문을 많이 받게 되었다. 그 질문들에 대한 답을 간단하게 정리해 본다. 1. 스켈레톤 코드 커밋 프리코스 때 부터 시작하기 전에 대략적인 구조를 만들고 그 구조에 맞게 클래스를 미리 정의하고 커밋했다. 기능을 구현하는 과정에서 어떻게 구현을 해 나갈지 모르고 구현 시 코드에 많은 변경이 있을 것이다. 따라서 작성자 본인 외에 알기 어려운 커밋 단위는 좋지 않은 커밋이다. 귀찮음을 피하는 것은 커밋으로 해결해선 안된다. 2. 멤버 변수로 사용할 필..
1. 코틀린이란? JVM, 안드로이드, 자바스크립트 및 네이티브를 대상으로 하는 정적 타입 지정 언어 젯브레인즈에서 개발한 오픈 소스 OO, FP 스타일 모두 가능 간결하고 실용적이며 안전하고 기존 언어와의 상호 운용성을 중시한다( + 코루틴 ) java 이름의 유래를 오마주하여 kotlin도 섬이름을 따왔다. 2. 정적 타입 지정 언어 자바와 마찬가지로 코틀린은 정적 타입 지정 언어이다. 정적 타입 지정 언어란 프로그램 구성 요소의 타입을 컴파일 시점에 알 수 있어 프로그램 안에서 객체의 필드나 메서드를 사용할 때 마다 컴파일러가 타입을 검증해 준다. 즉, 실행하기 전에 컴파일러가 검증해 잘못됨을 감지하여 매우 효율적이다. 인텔리제이와 다르게 안드로이드 스튜디오는 백그라운드에서 컴파일러가 계속 돌면서 ..
오늘은 대망의 우아한테크코스 5기 시작 날!! 모바일 안드로이드 분야인 나는 10시까지 선릉 캠퍼스에 도착했다. 먼저 오전에 모든 분야를 합친 전체 OT가 진행했는데 사람이 많은 만큼 Zoom 을 사용한 온라인으로 진행되었다. 우아한테크코스 소개 캡틴 포비와 많은 코치 분들이 있었고 각 코치는 학습에 도움을 주는 역할이 큼..! 분야별 코치는 물론 스프트 스킬, 협업, 글쓰기 코치분들도 있었다. 우아한테크코스의 교육 목표 1. 일반 사용자용 소프트웨어 개발 회사의 1년 경력에 준하는 역량을 갖춘 개발자를 양성 2. 개발 프로세스를 지키면서 프로젝트를 진행하고 협업 경험을 가진 개발자 3. 자기 주도적 학습, 지속적 성장할 수 있는 개발자 미션 소개 1주일에 두 번 2시간의 수업이 있고 나머지 시간에는 짝..
문제 N개의 숫자로 구분된 각각의 마을에 한 명의 학생이 살고 있다. 어느 날 이 N명의 학생이 X (1 ≤ X ≤ N)번 마을에 모여서 파티를 벌이기로 했다. 이 마을 사이에는 총 M개의 단방향 도로들이 있고 i번째 길을 지나는데 Ti(1 ≤ Ti ≤ 100)의 시간을 소비한다. 각각의 학생들은 파티에 참석하기 위해 걸어가서 다시 그들의 마을로 돌아와야 한다. 하지만 이 학생들은 워낙 게을러서 최단 시간에 오고 가기를 원한다. 이 도로들은 단방향이기 때문에 아마 그들이 오고 가는 길이 다를지도 모른다. N명의 학생들 중 오고 가는데 가장 많은 시간을 소비하는 학생은 누구일지 구하여라. 입력 첫째 줄에 N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 10,000), X가 공백으로 구분되어 입력된다. 두..
[문제] 문제 3×N 크기의 벽을 2×1, 1×2 크기의 타일로 채우는 경우의 수를 구해보자. 입력 첫째 줄에 N(1 ≤ N ≤ 30)이 주어진다. 출력 첫째 줄에 경우의 수를 출력한다. 힌트 아래 그림은 3×12 벽을 타일로 채운 예시이다. [풀이] n = 2 3 n = 4 3 * 3 + 2 =11 n = 6 11 * 3 + 2 * 3 + 2 = 41 n = 8 41 * 3 + 2 * 11 + 2 * 3 + 2 = 123 + 22 + 6 + 2 = 153 즉 A[2n] = 3 * [2n-2] + [2n-2] - [2n-4] -> A[2n] = 4A[2n-2] - A[2n-4] dp array 크기를 최대로 해도 되지만 메모리 절약을 위해 1과 3은 0으로 return 2는 3으로 return n> 4 ..
[문제] N명의 병사가 무작위로 나열되어 있다. 각 병사는 특정한 값의 전투력을 보유하고 있으며, 병사를 배치할 때는 전투력이 높은 병사가 앞쪽에 오도록 내림차순으로 배치를 하고자 한다. 다시 말해 앞쪽에 있는 병사의 전투력이 항상 뒤쪽에 있는 병사보다 높아야 한다. 또한 배치 과정에서는 특정한 위치에 있는 병사를 열외시키는 방법을 이용한다. 그러면서도 남아있는 병사의 수가 최대가 되도록 하고 싶다. 예를 들어, N=7일 때 나열된 병사들의 전투력이 다음과 같다고 가정하자. 이 때 3번 병사와 6번 병사를 열외시키면, 다음과 같이 남아있는 병사의 수가 내림차순의 형태가 되며 5명이 된다. 이는 남아있는 병사의 수가 최대가 되도록 하는 방법이다. 병사에 대한 정보가 주어졌을 때, 남아있는 병사의 수가 최대..
[문제] [문제] n가지 종류의 동전이 있다. 각각의 동전이 나타내는 가치는 다르다. 이 동전을 적당히 사용해서, 그 가치의 합이 k원이 되도록 하고 싶다. 그 경우의 수를 구하시오. 각각의 동전은 몇 개라도 사용할 수 있다.사용한 동전의 구성이 같은데, 순서만 다른 것은 같은 경우이다. [입력] 첫째 줄에 n, k가 주어진다. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) 다음 n개의 줄에는 각각의 동전의 가치가 주어진다. 동전의 가치는 100,000보다 작거나 같은 자연수이다. [출력] 첫째 줄에 경우의 수를 출력한다. 경우의 수는 2^31보다 작다. [풀이] 골드 dp는 역시 어렵다. 리스트에 동전을 넣어두고 시작 key point : 동전 2로는 1을 만들 수 없다. 코인을 기준으로 인덱스..
[문제] 상담원으로 일하고 있는 백준이는 퇴사를 하려고 한다. 오늘부터 N+1일째 되는 날 퇴사를 하기 위해서, 남은 N일 동안 최대한 많은 상담을 하려고 한다. 백준이는 비서에게 최대한 많은 상담을 잡으라고 부탁을 했고, 비서는 하루에 하나씩 서로 다른 사람의 상담을 잡아놓았다. 각각의 상담은 상담을 완료하는데 걸리는 기간 Ti와 상담을 했을 때 받을 수 있는 금액 Pi로 이루어져 있다. N = 7인 경우에 다음과 같은 상담 일정표를 보자. 1일 2일 3일 4일 5일 6일 7일 Ti 3 5 1 1 2 4 2 Pi 10 20 10 20 15 40 200 1일에 잡혀있는 상담은 총 3일이 걸리며, 상담했을 때 받을 수 있는 금액은 10이다. 5일에 잡혀있는 상담은 총 2일이 걸리며, 받을 수 있는 금액은 ..