전체 글

매달 비용을 지불해야 사용할 수 있는 유료 서비스가 있다. 이 서비스는 다음 규칙에 따라 서비스 만료일을 결정한다.서비스를 사용하려면 매달 1만원을 선불로 납부한다. 납부일 기준으로 한 달 뒤가 서비스 만료일이 된다.2개월 이상 요금을 납부할 수 있다.10만원을 납부하면 서비스를 1년 제공한다.납부한 금액 기준으로 서비스 만료일을 계산하는 기능을 TDD로 구현한다면 어떤 순서로 진행해야 할까? 먼저 테스트 클래스 이름을 정하자. 클래스 이름은 ExpiryDateCalculatorTest 로 정했다.public class ExpiryDateCalculatorTest {}쉬운 것부터 테스트이제 테스트 메서드를 추가한다. 테스트를 추가할 때에는 다음 두 가지를 고려해야 한다.구현하기 쉬운 것부터 먼저 테스트예..
예외 상황을 먼저 테스트해야 하는 이유다양한 예외 상황은 복잡한 if-else 블록을 동반한다.후에 예외 상황을 반영하려면 코드의 구조를 뒤집거나 조건문을 중복해서 추가하는 일이 발생한다.미리 예외 상황을 테스트 하면 예외 상황에 따른 if-else 구조가 미리 만들어지므로 코드 구조가 덜 바뀐다.예외 상황을 처리하지 않아 발생하는 버그를 줄여준다.완급 조절한번에 얼마만큼의 코드를 작성 할 것인가?TDD를 처음 접할 때는 다음 단계에 따라 익히는 것이 추천된다.정해진 값을 리턴값 비교를 이용해서 정해진 값을 리턴다영한 테스트를 추가하면서 구현을 일반화예를 들어 암호 강도 측정 기능에서 길이가 8글자 미만이지만 나머지 규칙은 충족하는 상황을 위 단계를 밟아 진행해보자. 먼저 다음 테스트 코드를 추가했다. ..
"테스트 주도 개발 시작하기" - 최범균 저위 책으로 공부하며 배운 것을 정리한 시리즈TDD를 공부하며 1장에서(1장은 포스팅하지 않았다.) 암호 강도 측정 기능을 만들었다. 기능을 구현할 때 규칙은 다음과 같았다.검사할 규칙 3가지길이가 8글자 이상이어야 한다.0부터 9 사이의 숫자를 하나 이상 포함해야 한다.대문자를 하나 이상 포함해야 한다.판별 기준세 규칙을 모두 충족하면 암호 강도는 "강함"이다.두개의 규칙을 충족하면 암호 강도는 "보통"이다.1개 이하의 규칙을 충족하면 암호는 "약함"이다.위 요구사항을 만족하는 테스트 코드를 작성한 순서는 다음과 같았다.모든 규칙을 충족하는 암호 강도는 "강함" 이다.길이만 8글자 미만이고 나머지 규칙은 충족하는 암호의 강도는 "보통" 이다.숫자를 포함하지 않고..
로버트 C. 마틴의 "클린 코드"를 읽고 정리하고 생각하는 시리즈 나쁜 코드 …우리 모두는 대충 짠 프로그램이 돌아간다는 사실에 안도감을 느끼며 그래도 안 돌아가는 프로그램보다 돌아가는 쓰레기가 좋다고 스스로를 위로한 경험이 있다. 다시 돌아와 나중에 정리하겠다고 다짐했었다... 나중은 결코 오지 않는다. Clean Code, 4p 나쁜 코드의 악순환 나쁜 코드는 생산성을 떨어트린다. 코드를 고칠 때마다 매번 복잡한 코드를 다시 해독하고 수정해야 한다. 시간은 한정되어 있고 개발은 해야 하기에, 나쁜 코드 위에 나쁜 코드가 쌓이는 악순환이 생긴다. 생산성이 떨어지면 관리층은 나름대로 복구를 시작한다. 프로젝트에 인력을 추가로 투입하는 것이다. 하지만 새 인력은 시스템 설계에 대한 조예가 깊지 않아 나쁜 ..
· Java
생성자를 계속 호출하는 아래 코드를 실행 했을 때, 어떻게 출력이 될까? Parent 클래스 package Questions.Inhertance.Q7; public class Parent { public String nation; public Parent(){ this("대한민국"); System.out.println("Parent() call"); } public Parent(String nation) { this.nation = nation; System.out.println("Parent(String nation) call"); } } Child 클래스 package Questions.Inhertance.Q7; public class Child extends Parent{ public String ..
· Java/Error
에러 설명 Parent 클래스를 상속해서 Child 클래스를 다음과 같이 작성했는데, Child 생성자에서 컴파일 에러가 발생한다. 그 이유와 해결 방법은? 코드 Parent 클래스 package Questions.Inhertance.Q6; public class Parent { public String name; public Parent(String name) { this.name = name; } } Child 클래스 package Questions.Inhertance.Q6; public class Child extends Parent{ public int studentNo; public Child(String name, int studentNo){ this.name = name; this.stude..
· Coding Test
문제 문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요. s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다. 제한 사항 str은 길이 1 이상인 문자열입니다. 문제 풀이 간단하다. 사전순으로 텍스트를 정렬하면 되는 문제. 문자열을 한 글자씩 나눠서 배열에 넣어준 후 사전순으로 정렬. 이후 StringBuilder로 붙여주고 반환하면 끝! 풀이 코드 import java.util.*; class Solution { public String solution(String s) { String[] a = s.split(""); Arrays.sort(a, Collections.reverseOrder()); St..
· Coding Test
*모든 풀이 코드는 직접 작성하였습니다. 문제 1부터 n까지 번호가 붙어있는 n명의 사람이 영어 끝말잇기를 하고 있습니다. 영어 끝말잇기는 다음과 같은 규칙으로 진행됩니다. 1번부터 번호 순서대로 한 사람씩 차례대로 단어를 말합니다. 마지막 사람이 단어를 말한 다음에는 다시 1번부터 시작합니다. 앞사람이 말한 단어의 마지막 문자로 시작하는 단어를 말해야 합니다. 이전에 등장했던 단어는 사용할 수 없습니다. 한 글자인 단어는 인정되지 않습니다. 다음은 3명이 끝말잇기를 하는 상황을 나타냅니다. tank → kick → know → wheel → land → dream → mother → robot → tank 위 끝말잇기는 다음과 같이 진행됩니다. 1번 사람이 자신의 첫 번째 차례에 tank를 말합니다. ..
· Coding Test
*모든 풀이 코드는 직접 작성하였습니다. 문제 짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙입니다. 이 과정을 반복해서 문자열을 모두 제거한다면 짝지어 제거하기가 종료됩니다. 문자열 S가 주어졌을 때, 짝지어 제거하기를 성공적으로 수행할 수 있는지 반환하는 함수를 완성해 주세요. 성공적으로 수행할 수 있으면 1을, 아닐 경우 0을 리턴해주면 됩니다. 예를 들어, 문자열 S = baabaa 라면 b aa baa → bb aa → aa → 의 순서로 문자열을 모두 제거할 수 있으므로 1을 반환합니다. 제한사항 문자열의 길이 : 1,000,000이하의 자연수 문자열은..
· Coding Test
*모든 풀이 코드는 직접 작성하였습니다. 문제 피보나치 수는 F(0) = 0, F(1) = 1일 때, 1 이상의 n에 대하여 F(n) = F(n-1) + F(n-2) 가 적용되는 수 입니다. 예를들어 F(2) = F(0) + F(1) = 0 + 1 = 1 F(3) = F(1) + F(2) = 1 + 1 = 2 F(4) = F(2) + F(3) = 1 + 2 = 3 F(5) = F(3) + F(4) = 2 + 3 = 5 와 같이 이어집니다. 2 이상의 n이 입력되었을 때, n번째 피보나치 수를 1234567으로 나눈 나머지를 리턴하는 함수, solution을 완성해 주세요. 제한 사항 n은 2 이상 100,000 이하인 자연수입니다. 문제 풀이 수들을 계속 업데이트 해주고 연산만 해주면 된다. 단, 피보나..
· Coding Test
*모든 풀이 코드는 직접 작성하였습니다. 문제 자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다. 조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다. 조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니다. 조건 3. n의 다음 큰 숫자는 조건 1, 2를 만족하는 수 중 가장 작은 수 입니다. 예를 들어서 78(1001110)의 다음 큰 숫자는 83(1010011)입니다. 자연수 n이 매개변수로 주어질 때, n의 다음 큰 숫자를 return 하는 solution 함수를 완성해주세요. 제한 사항 n은 1,000,000 이하의 자연수 입니다. 문제 풀이 문제를 보고 바로 생각한 해결 방법은, "숫자를 하나씩 더해 가면서 이진수로 변환했을 때 1의 갯수가..
· Coding Test
*모든 풀이 코드는 직접 작성하였습니다. 문제 Finn은 요즘 수학공부에 빠져 있습니다. 수학 공부를 하던 Finn은 자연수 n을 연속한 자연수들로 표현 하는 방법이 여러개라는 사실을 알게 되었습니다. 예를들어 15는 다음과 같이 4가지로 표현 할 수 있습니다. 1 + 2 + 3 + 4 + 5 = 15 4 + 5 + 6 = 15 7 + 8 = 15 15 = 15 자연수 n이 매개변수로 주어질 때, 연속된 자연수들로 n을 표현하는 방법의 수를 return하는 solution를 완성해주세요. 제한 사항 n은 10,000 이하의 자연수 입니다. 문제 풀이 "투 포인터 알고리즘"을 사용해 풀었다. start 와 end 라는 두개의 포인터를 두었고, start는 항상 n/2 보다 같거나 작어야 한다. start ..
킹효준
King Dev.