본문 바로가기

전체 글360

Hello, Reactive | 명령형 프로그래밍과 선언형 프로그래밍 명령형 프로그래밍 vs 선언형 프로그래밍 코드가 어떤 식으로 실행되어야 하는지에 대한 구체적인 로직이 코드 안에 그대로 드러나는 명령형 프로그래밍 방식과는 달리 선언형 프로그래밍의 경우는 코드 상에 보이지 않는 내부 반복자가 존재한다. // 명령형 for(int number : numbers){ if(number > 4 && (number % 2 == 0)){ sum += number; } } // 선언형 int sum = numbers.stream() .filter(number -> number > 4 && (number % 2 == 0)) .mapToInt(number -> number) .sum(); Java의 Stream API를 떠올려 보면 메서드 체인(중간 연산)에서는 선언하는 람다 표현식을 .. 2022. 10. 12.
리액티브 프로그래밍 리액티브 시스템 리액티브(Reactive)는 사전적으로 '반응을 하는', '반응을 보이는'라는 의미를 가진다. (리액션이 좋은 사람을 떠올려 보자!) 리액티브 시스템이란 클라이언트 요청에 반응을 잘하는 시스템을 의미한다. 이는 쓰레드의 Non-Blocking과 관련이 있다. 클라이언트의 요청에 대한 응답 대기 시간을 최소화하기 위해 요청 쓰레드가 차단되지 않게 함으로써 즉각적으로 반응할 수 있도록 구성된 시스템이다. 방법(MEANS): 리액티브 시스템에서의 커뮤니케이션 수단 👉 메시지 기반 통신으로 여러 시스템 간 느슨한 결합을 유지 형태(FORM): 메시지 기반 통신을 통해 어떤 특성을 가지는 구조로 형성되었는가? 👉 Elastic: 시스템에 들어오는 요쳥량과 상관없이 일정한 응답성을 유지 👉 Resi.. 2022. 10. 12.
[Java] 프로그래머스 : K번째수 K번째수 문제 분석 배열1과 2차원 배열인 배열2가 주어진다. 배열1의 i번째부터 j번째까지 수를 정렬하여 k번째 수를 반환해야 한다. 배열2는 [i, j, k]를 원소로 가진다. 배열2의 길이는 고정되어 있지 않다. 먼저 반환값으로 사용할 배열을 생성한다. 배열2의 길이는 고정되어 있지 않으므로 length로 모든 요소를 순회하는 for문을 생성한다. 배열1에서 자른 요소들을 담을 list를 생성하고 배열1의 ([i][0] - 1)번 인덱스부터 ([i][1] - 1)의 인덱스를 넣는다. list를 정렬하고, get 메서드를 통해 k번째 요소를 뽑아서 반환값 담을 배열에 넣는다. 🤔 배열의 일부를 자르고 이를 담아 둘 곳이 필요하다는 점에서 한참 고민했다. 다른 효율적인 방법을 고민해 보기! 문제 풀기 .. 2022. 10. 11.
운영 전략 보호되어 있는 글 입니다. 2022. 10. 11.
[Java] 프로그래머스 : 위장 프로그래머스 : 위장 문제 분석 상의, 하의, 겉옷 등의 큰 분류 안에 여러 의상이 존재할 때, 입을 수 있는 조합의 수를 계산한다. Map을 생성하고, Key는 의상 분류, Value는 분류에 해당하는 의상의 수를 넣는다. 경우의 수는 각 Key의 Value들의 곱이다. 이때 겉옷은 입지 않고 상의와 하의만 입는 경우의 수도 있다. 각 옷의 개수에 + 1(안 입는 경우) 아무것도 입지 않는 경우는 없다. 전체에서 - 1 (상의의 수 + 1) x (하의의 수 + 1) x (겉옷의 수 + 1) - 1 문제 풀이 import java.util.*; class Solution { public int solution(String[][] clothes) { //옷의 종류를 Key로 하고, 해당하는 옷의 개수를 V.. 2022. 10. 10.
[Java] 프로그래머스 : 전화번호 목록 프로그래머스 : 전화번호 목록 문제 분석 전화번호 목록이 주어지고, 한 전화번호가 다른 전화번호를 포함하는 경우가 있는지 확인한다. 예를 들어 전화번호 '111'과 '1112'가 있을 때, '1112'는 '111'를 포함한다. Map을 생성하고 모든 전화번호를 넣는다. 반복문을 통해 전화번호부 배열의 요소 하나하나에 접근해서 각 번호의 길이만큼의 중첩 반복문을 만들고, 번호의 일부를 포함하는 번호가 Map에 존재하는지의 여부를 확인한다. 예를 들어 전화번호 '111'과 '1112'가 있을 때, '1112'를 나눈 '1', '11', '111'가 전화번호부에 존재하는지 확인한다. 문제 풀이 import java.util.*; class Solution { public boolean solution(Stri.. 2022. 10. 9.