
입력받은 int값을 2진수로 변환 후 1과 1 사이 길이를 모두 찾아서 제일 길이가 긴 길이를 반환하도록 하는 문제. 이 문제는 시간제한이 따로 없길래 아래와 같이 (좀 무식하게) 이중 for문으로 처리하도록 구현하였다. class Solution { public int solution(int N) { int result = 0; // 2진수로 변환 String binaryString = Integer.toBinaryString(N); for (int i = 0; i < binaryString.length(); i++) { // i번째가 1인 경우 if (binaryString.charAt(i) == '1') { // i+1부터 다시 for문을 돌면서 for (int j = i + 1; j < binar..
int 값 하나 자체는 그냥 아무 의미 없는 스칼라 값일 뿐이다. 어떤 메서드가 int 값을 매개변수로 받는다면 그 메서드 이름은 해당 매개변수의 의도를 나타내기 위해 모든 수단과 방법을 가리지 않아야 한다. 만약 똑같은 메서드가 시간을 매개변수로 받을 경우, 무슨 일이 생기는지는 훨씬 자명하다. 이런 작은 객체가 프로그램의 유지보수성을 높일 수 있는 것은 시간 값을 매개변수로 받는 메서드에게 연도 값을 넘길 수는 없기 때문이다. 원시형 변수로는 컴파일러가 의미적으로 맞는 프로그램 작성을 안내할 수 없다. 객체로라면 아주 사소하더라도 컴파일러와 프로그래머에게 그 값이 어떤 값이며, 왜 쓰고 있는지에 대한 정보를 전하는 셈이다. 또한 시간이나 돈과 같은 작은 객체는 행위를 놓을 분명한 곳을 마련해 줘서, ..
모든 프로그래머는 if/else 구문을 이해한다. 이 구문은 거의 모든 프로그래밍 언어에 들어 있고, 간단한 조건 논리는 누구나 쉽게 이해한다. 거의 모든 프로그래머는 따라가기 불가능할 정도로 지저분한 중첩 조건문이나 몇 페이지씩 되는 case 문을 본 적이 있을 것이다. 더욱이 리팩토링보다는 그냥 기존 조건문에 분기를 하나 더 치기가 무척 쉽다는 점이다. 조건문은 또한 곧잘 코드 중복의 원흉이기도 하다. 예를 들어 아래 status 플래그는 자주 이런 문제에 빠진다. public static void endMe() { if (status == DONE) { doSomething(); } else { // 다른 코드 } } else를 빼고 코드를 다시 짜는 데는 몇 가지 방법이 있다. 간단하게, 이렇게 ..

요즘 Reactor 기반의 RxJava, Spring Webflux 등의 기술들이 내세우는 점이 Asynchronous & Non-Blocking 기반 방식이라는 점이다. 그래서 Webflux를 학습하기 전에 Sync, Async, Blocking, Non-Blocking에 대한 개념을 한번 정리하고자 한다. Synchronous (동기) vs Asynchronous (비동기) 먼저 Synchronous의 어원을 보면 syn -> together, chronous -> time을 의미한다. 그래서 두 가지 이상이 함께 시간을 맞춘다 (동기) 라는 의미이다. Asynchronous는 Synchronous에 부정 접두사인 a가 붙은 것으로 두 가지 이상이 서로 시간을 맞추지 않는다 (비동기) 라는 의미이다...
규칙 1: 메서드당 들여쓰기 한 번 어디서 시작할지 몰라 덩치크고 오래된 메서드를 노려보고 있다면? 거대한 메서드는 응집력이 떨어진다. 한 지침은 메서드 길이는 5줄로 제한하는 것이지만, 그런 종류의 이전(transition)은 코드가 500줄짜리 괴물들로 어질러져 있으면 의욕이 꺾이기 쉽다. 대신, 각 메서드가 정확히 한 가지 일을 하는지, 즉 메서드당 하나의 제어 구조나 하나의 문장 단락(block)으로 되어 있는지를 지키려고 노력한다. 한 메서드 안에 중첩된 제어구조가 있다면 다단계의 추상화를 코드로 짠 것이며, 고로 한 가지 이상의 일을 하고 있다는 뜻이다. 정확히 한 가지 일을 하는 메서드들로 작업을 하면 코드가 달라지기 시작한다. 애플리케이션의 각 단위가 더 작아짐에 따라 재사용의 수준은 기하..

Interface 선언을 통해 자동으로 Http Client를 생성 RestTemplate은 concreate 클래스라 테스트하기 어렵다 관심사의 분리 서비스의 관심 - 다른 리소스, 외부 서비스 호출과 리턴값 관심 X - 어떤 URL, 어떻게 파싱할 것인가 Spring Cloud에서 Open-Feign 기반으로 Wrapping한 것이 Spring Cloud Feign Feign Feign은 Netflix에서 만든 선언적 Http 클라이언트이다. 선언적 Http클라이언트란, 어노테이션 선언만으로 Http 클라이언트를 만들 수 있고 이를 통해서 Http Api 호출이 가능한 것을 의미함. Feign 설정 방법 인터페이스 선언 만으로 Http Client 구현물을 만들어 줌 @FeignClient(name=..

Ribbon 사용 시 서버 목록을 yml에 직접 넣었는데, 자동화 할 방법은? '서버가 새롭게 시작되면 그것을 감지하여 목록에 자동으로 추가되고, 서버가 종료되면 자동으로 목록에서 삭제하기 위한 방법은 없을까?' Service Registry Service Registry 서비스 탐색, 등록 클라우드의 전화번호부 (단점) 침투적 방식 코드 변경 DiscoveryClient spring-cloud에서 서비스 레지스트리 사용 부분을 추상화(Interface) Eureka, Consul, Zookeeper, etcd 등의 구현체가 존재 Ribbon은 Eureka와 결합하여 사용 할 수 있으며, 서버 목록을 자동으로 관리. Eureka Server (Registry) 만들기 @EnableEurekaServer ..

Server Side LoadBalancer 일반적인 L4 Switch 기반의 Load Balancing Client는 L4의 주소만 알고 있음 L4 Swicth는 Server의 목록을 알고 있음 (Server Side Load Balancing) H/W Server Side Load Balancer 단점 H/W가 필요 (비용 up, 유연성 down) 서버 목록의 추가를 위해서는 설정 필요 (자동화 어려움) Load Balancing Schema가 한정적 (RR, Sticky) 12 factors의 dev/prod를 만족하기 어려움 (상용과 개발의 동일함을 가지기가 어렵다) Client LoadBalancer - Ribbon Client (API Caller : 호출하는 쪽에서) 에 탑재되는 S/W 모듈..
- Total
- Today
- Yesterday
- 프로그래머스 Level 1
- 프로그래머스
- Filter
- 비동기
- 핸들러 인터셉터
- 필터
- 프로그래머스 Level 2
- 인터셉터
- http://www.nextree.co.kr/p6960/
- 논블로킹
- 해시
- blocking
- Asynchronous
- a
- 프로그래머스 Level 3
- 블로킹
- Handler Interceptor
- non-blocking
- 스택/큐
- 동기
- 코딩테스트 고득점 Kit
- Synchronous
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |