분류 전체보기 107

[Clean Code] 9장. 단위 테스트 : Unit Tests

[Clean Code 시리즈 포스팅] [Clean Code] 1장. 깨끗한 코드: Clean Code [Clean Code] 2장. 의미 있는 이름 : Meaningful Names [Clean Code] 3장. 함수 : Functions [Clean Code] 4장. 주석 : Comments [Clean Code] 5장. 형식 맞추기 : Formatting [Clean Code] 6장. 객체와 자료구조 : Objects and Data Structures [Clean Code] 9장. 단위 테스트 : Unit Tests (Now) ❑ TDD 법칙 세가지 첫째 법칙 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다 둘째 법칙 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트..

[Java] Java Array와 Hash의 데이터 접근/삽입 속도 비교

1. 서론Codility Lesson4. MissingInteger 문제를 풀면서 Hash와 Array간 데이터 접근/삽입 속도의 차이를 크게 체감할 수 있었다. 해당 문제에서 array로 접근하기엔 size를 100만개로 줘야 했기에 사이즈가 좀 크지 않은가 하는 생각에 Hash, Priorty Queue로 접근했는데 아무리 머리를 굴려봐도 Time Out이 났다. 그래서..! 메모리 제한도 없고, 그냥 배열로 풀라는 뜻인가 해서 배열로 풀었더니 바로 Pass. 도대체 Hash와 Array간 속도 차이가 얼마나 나길래 이런것인가 싶어서 직접 테스트해봤다. 2. 테스트 개요 array, HashMap, ConcurrentHashMap 세 가지에 대해 데이터 삽입/접근을 테스트한다 데이터 삽입(Add El..

Back-End/Java 2022.03.06

[프로그래머스] KAKAO RECRUITMENT 2022 신고결과받기

문제 https://programmers.co.kr/learn/courses/30/lessons/92334 코딩테스트 연습 - 신고 결과 받기 문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의 programmers.co.kr 접근 제한시간은 [정확성 테스트: 10초]만 존재하므로 불필요한 반복만 줄이면 된다. 네 개의 Hash 자료구조를 사용했다. 1. abuseCntMap: 아이디 별 신고 당한 횟수 Map 2. abuseAndReportIdMap: 각 신고당한 사람이 어떤 사람(아이디)에게 신고 당했는지 기록 3. reportAndAbuseIdMap: 신고한 사람이 ..

Algorithms 2022.03.04

[Java] JUnit5 기본 Annotation

1. @Test 테스트 메서드임을 나타내는 어노테이션. 테스트 하려는 메서드에 붙여서 사용할 수 있다. public class MyTestClass { @Test void myTest1() { System.out.println("myTest1"); } } 2. @BeforeAll, @AfterAll: 생명주기 어노테이션 2.1. @BeforeAll 클래스가 실행되기 전 한 번만 실행되는 메서드 2.2. @AfterAll 클래스의 모든 테스트 메서드가 실행된 후 한 번만 실행되는 메서드 2.3. @BeforeEach 클래스의 각 테스트 메서드가 실행되기 전 매번 실행되는 메서드 2.4. @AfterEach 클래스의 각 테스트 메서드가 실행된 후 매번 실행되는 메서드 @Test 여러개 있을 때 Before/..

Back-End/Java 2022.03.03

[Codility] PermMissingElem

분석 문제는 워낙 간단하고 쉽다. 단 해당 문제의 Lesson 주제가 Time Complexity인 만큼 시간 복잡도를 최소화하는 것이 문제의 의도로 보인다. 가장 쉽게 떠올릴 수 있는 방법은 N개의 크기 배열 A를 받았을 때 (1부터 N+1)까지의 숫자를 전부 Hash의 Key로 넣고 하나씩 Remove 하는 것이다. 이렇게 하면 가장 마지막에 남는 Key가 답이 된다. 하지만 이 방법은 Hash에 넣는데 N+1번, 그리고 A배열을 순회하며 찾는데 N번 걸리므로 O(n^2)이다. O(N)으로 끝낼 수 있는 방법은 배열을 딱 한 번만 순회하는 것이다. 처음 A 배열을 받으면 1~N+1 숫자의 합을 구한다. 그리고 A 배열을 순회하면서 합에서 값을 한 개씩 뺀다. 이렇게 하면 없는 숫자는 뺄 수 없으므로 ..

Algorithms 2022.02.28

[Codility] OddOccurrencesInArray

제약사항 N is an odd integer within the range [1..1,000,000]; each element of array A is an integer within the range [1..1,000,000,000]; all but one of the values in A occur an even number of times. 간단한 문제다. A에 들어가는 값이 1~10억이므로 배열의 인덱스와 동일하게 처리하기엔 사이즈가 너무 큼 그래서 Hash를 이용해서 발생한 숫자를 Key로, 발생한 횟수를 Value로 사용함 그리고 2로 나눈 나머지가 0이 안되는 것이 홀수번 발생한 것이므로 해당 숫자를 답으로 리턴 Code class Solution { public int solution(in..

Algorithms 2022.02.26

[Codility] CyclicRotation

예외사항을 생각해야 한다. Empty array, input 배열의 크기보다 rotation 횟수가 더 클때, K가 0일 때 등을 추가 테스트 케이스로 넣어준다 Additional Test Case ([], 3) ([1,2,3,4], 5) ([1,2,3,4], 0) Code class Solution { public int[] solution(int[] A, int K) { int[] res = new int[A.length]; // K 값이 A 배열의 길이보다 클 때 중복해서 rotation 하는 것이므로 나머지를 대입 if (A.length != 0 && K > A.length) { K = K % A.length; } // A배열의 크기가 K와 동일하면 로테이션 필요 없음 // A배열의 크기가 0이거..

Algorithms 2022.02.24

[Java] Process & Thread 개념

❑ 프로세스(Process)와 쓰레드(Thread) 프로세스와 쓰레드의 개념 및 관계 프로세스는 간단히 말해 '실행 중인 프로그램(Program)'이다 쓰레드는 프로세스를 구성하는 한 가지이자, 작업을 처리하는 일꾼이다. 프로세스는 프로그램을 수행하는 데 필요한 데이터와 메모리 등의 자원 그리고 쓰레드로 구성되어 있다. 쓰레드를 프로세스라는 공장에서 작업을 처리하는 일꾼으로 생각하면 이해하기 쉽다. 스레드를 경량화된 프로세스라고도 한다 컴퓨터는 프로세스마다 자원을 분할해서 할당한다. 한 프로세스의 스레드들은 같은 공간(분할된 자원)에서 진행된다. 각 스레드는 Stack 영역만 독립적으로 갖고 그 외 부모 프로세스의 자원을 공유한다. 그렇기 때문에 Context Switching처럼 하나의 프로세스를 다 ..

Back-End/Java 2022.02.21

[프로그래머스] 모의고사

문제 https://programmers.co.kr/learn/courses/30/lessons/42840 코딩테스트 연습 - 모의고사 수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는 programmers.co.kr class Solution { public int[] solution(int[] answers) { int[] answer = {}; Solver sovler = new Solver(); int[] res = new int[3]; for (int i = 0; i < answers.length; i++) { int[] solve = sovler.solve(a..

Algorithms 2022.02.20

[Java] Java에서 외부 jar 실행 후 출력되는 결과 가져오기

외부 jar를 실행할 때 실행한 jar에서 Console에 출력하는 결과를 가져와야 할 때가 있다. Process 객체가 제공하는 InputStream을 이용해 해당 결과를출력할 수 있다. Code public class MyProcessTest { public static void main(String[] args) { try { Runtime r = Runtime.getRuntime(); Process p = r.exec("java -jar TestJar.jar"); InputStream is = p.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); while (true) { String s = b..

Back-End/Java 2022.02.15

[프로그래머스] 완주하지 못한 선수

문제 https://programmers.co.kr/learn/courses/30/lessons/42576 코딩테스트 연습 - 완주하지 못한 선수 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수 programmers.co.kr 오랜만에 공부 시작할 겸 가벼운 문제 풀어봄 주의할 점은 완주한 사람(completion)을 기준으로 해시를 만들고 참여한 사람(participant)을찾는 방식이 아니라, 참여한 사람을 기준으로 해시를 만들고 완주한 사람을 찾아야 한다는 것. 그리고 이름이 중복되는 사람이 여러 사람일 수 있으므로 각 사람의 이름을 count 한 후 ..

Algorithms 2022.02.13

[Java] 외부 jar 실행 후 pid(process id) 가져오기(Java 8)

In Java9 java 9 버전부터 Process Class가 pid 라는 메서드를 제공하므로 쉽게 얻을 수 있다 pid public long pid​() Returns the native process ID of the process. The native process ID is an identification number that the operating system assigns to the process. Implementation Requirements: The implementation of this method returns the process id as: toHandle().pid(). Returns: the native process id of the process Throws: Un..

Back-End/Java 2022.02.11

[Kafka] Kafka Broker 설정(server.properties) 꼼꼼히 들여다보기

0. server.properties 원본더보기...############################# Server Basics ############################## The id of the broker. This must be set to a unique integer for each broker.broker.id=0############################# Socket Server Settings ############################## The address the socket server listens on. It will get the value returned from# java.net.InetAddress.getCanonicalHostName() i..

Back-End/Kafka 2022.02.04

[Spring] Annotation을 이용한 DI (2) @AutoWired와 @Qualifier

❑ @Autowired 의존성 주입 규칙1: Type Client 객체: Car package com.test.ui; @Component // @Component("carBean") // id를 직접 입력할 때 public class Car { private PowerUnit powerUnit; // Dependency @Autowired public Car(PowerUnit powerUnit) { this.powerUnit = powerUnit; // 생성자를 통한 외부 주입(Injection) } } 의존 객체: ElectricMotor @Component // @Component("electricMotorBean") // id를 직접 명시 할때 public class ElectricMotor imp..

Back-End/Spring 2022.02.02