본문 바로가기

전체 글

(53)
Test - System.in 관련 버그 Test를 할 시 System.in에 특정 값이 삽입되길 원한다면 br.readline()이나 Scanner의 입력함수가 실행되기 전에 System.setIn(InputStream형태의 값)을 넣어주자. 그리고 Static으로 선언되어 메모리에 공유되는 값은 사용할때 주의해야 한다. 테스트시 아직 닫히질 않아 입력에 버그가 생기는 경우가 많다. 따라서 한번 테스트하고 close를 시켜줘야하는데 매번 close를 호출하기 보다는 @AfterEach 어노테이션으로 각 테스트마다 그 이후에 바로 실행시켜줄 메서드를 작성해서 안에서 호출한다. @Test @Order(6) void 우승_후보_Cars_확인(){ assertRandomNumberInRangeTest( ()->{ RacingCarGame game =..
2주차 - Test Driven Devlopment TDD TDD, 실제 코드를 짜기 전에 단위 테스트부터 수행하고 구현하는 개발 방식이다. TDD의 3가지 법칙 1. 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다. 2. 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다. 3. 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다. 필요성? 그리고 테스트는 실제 코드만큼이나 중요한 코드이다. 코드에 유연성, 유지보수성, 재사용성을 제공하는 버팀목이 테스트 코드이다. 설계와 아키텍쳐를 깨끗하게 보존하기 위해서는 자동화된 테스트 코드 슈트가 중요하다. 테스트 코드가 확실하면 실제 코드에 변경이 있어도 별 일 없다. Build-Operate-Check 패턴 이중 표준 테스트 코드는 단순하고 간결하고 표현력이 ..
Map 정렬하기 List entryList = new LinkedList(m.entrySet()); entryList.sort(new Comparator() { @Override public int compare(Entry o1, Entry o2) { if(o1.getKey() != o2.getKey()) //if else 문 3개로 표현해도 되지만 //계산 후 값이 정수 범위를 넘어가지 않을때는 //오름차순의 경우 뒤에꺼에서 앞에꺼 빼고 //내림차순의 경우 앞에꺼에서 뒤에꺼 뺌 return o2.getKey() - o1.getKey(); else return o2.getValue() - o2.getValue(); } }); key와 value 둘다 정렬하고 싶으면 entrySet 활용 keySet은 key값으로만 이루..
팰린드롬 https://www.acmicpc.net/problem/10942 10942번: 팰린드롬? 총 M개의 줄에 걸쳐 홍준이의 질문에 대한 명우의 답을 입력으로 주어진 순서에 따라서 출력한다. 팰린드롬인 경우에는 1, 아닌 경우에는 0을 출력한다. www.acmicpc.net https://www.acmicpc.net/problem/14444 14444번: 가장 긴 팰린드롬 부분 문자열 알파벳 소문자로만 이루어진 문자열 S가 주어졌을 때, S의 부분 문자열 중에서 팰린드롬 이면서 길이가 가장 긴 것의 길이를 구하는 프로그램을 작성하시오. www.acmicpc.net 팰린드롬 알고리즘은 dp로 O(n^2)의 시간복잡도로 풀 수 도 있고 매내커 알고리즘으로 O(n)의 시간복잡도로 풀 수도 있다. 1.dp 풀이 ..
백준 19583 싸이버개강총회 https://www.acmicpc.net/problem/19583 19583번: 싸이버개강총회 첫번째 줄에는 개강총회를 시작한 시간 S, 개강총회를 끝낸 시간 E, 개강총회 스트리밍을 끝낸 시간 Q가 주어진다. (00:00 ≤ S < E < Q ≤ 23:59) 각 시간은 HH:MM의 형식으로 주어진다. 두번째 줄부터는 www.acmicpc.net import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.HashSet; import java.util.NoSuchElementException; import java.util.Set; import java.util.Str..
챕터 1-2 프로그래밍 패러다임 정리 프로그래밍 패러다임 프로그래머에게 프로그래밍의 관점을 갖게 해주는 역할을 하는 개발 방법론 함수형 프로그래밍 출력이 입력에만 의존하는 ‘순수 함수’들로 로직을 구현하고 함수가 함수를 매개변수로 받아 로직을 생성하는 ‘고차 함수’를 통해 재사용성을 높인 프로그래밍 패러다임. ex. 자바스크립트 고차 함수는 해당 프로그래밍 언어가 일급 객체라는 특징이 있어야 함. 일급 객체의 특징 변수나 메서드에 함수 할당 가능 함수 안에 함수를 매개변수로 가져갈 수 있음 함수가 함수 반환 가능 객체지향 프로그래밍(OOP) 객체들의 집합으로 프로그램의 상호 작용을 표현, 데이터를 객체로 취급하여 객체 내부에 선언된 메서드를 활용하는 방식 OOP의 특징 추상화 : 시스템의 핵심적인 개념 또는 기능 추출 캡슐화/은닉화 : 객체..
챕터 1-1 디자인 패턴 정리 디자인 패턴 디자인 패턴이란 프로그램을 설계할 때 발생했던 문제점들을 해결할 수 있도록 하나의 규약 형태로 만들어 놓은 것. 프레임워크 vs 라이브러리 공통점 : 코드 작성에 도움이 되는 타인이 작성한 코드의 집합 차이점 : 프레임워크는 빌트-인 아파트에 입주해서 가구 옵션 고르는 것, 라이브러리는 내가 이케아 가서 재료 사다가 가구 직접 조립하는 것 프레임워크는 개발자가 주체였던 객체의 제어를 대신 해줌으로써 제어 역전이 일어나고, 라이브러리는 개발자가 필요할 때마다 설치, 혹은 호출함으로써 개발자가 능동적으로 사용함. 싱글톤 패턴 하나의 클래스에 하나의 인스턴스만 가지는 패턴 장점 : 인스턴스 생성 비용이 적음. → 이유 : 하나의 private 인스턴스를 내부에 생성해둔 것을 공유해서 사용하기 때문..
1주차 미션 야구 게임 - 2일차 구현하면서 데이터, 메인 프로그램, 서브 프로그램을 계속 생각하면서 구현했다. 데이터에는 이 프로그램이 구동될 때 데이터의 역할을 충실히 하는 클래스는 뭐가 있고 공통된 부분은 뭐가 있을지 고민했다. 메인 프로그램에는 객체지향 원칙에 따라서 depth는 2이상으로 유지하지 않는다는 규칙에 따라 depth가 2 이상으로 넘어가면 따로 메서드로 뺐더니 가독성도 좋아졌다. 서브 프로그램에는 유틸리티 클래스들과 상수 클래스가 있었다. 주로 입출력, 자주 사용하는 단순계산, 상수 등이 들어갔다. Command를 사용할 때 0,1,2보다는 클래스 상수 값으로 보여주는게 좋다고 생각하다가 객체지향 원칙에서 Enum 클래스를 활용하자는 말이 기억나서 찾아보다가 상수형으로 직접 접근은 안되고 대신 ordinal()을 사..