일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 탐색
- api-gateway
- docker
- code refactoring
- unit
- spring cloud netflix zuul
- spring cloud
- netflix
- microservice architecture
- 설계
- Eureka
- dfs
- 서비스스펙
- spring cloud netflix eureka
- test
- Java
- container image #docker #layer #filesystem #content addressable
- springcloud
- 단위테스트
- java #jvm #reference #gc #strong reference
- reactive
- forkandjoinpool #threadpool #jvm #async #non-blocking
- netflix eureka
- Dynamic Routing
- Spring Data Redis
- BFS
- zuul
- unittest
- spring cloud netflix
- Today
- Total
목록분류 전체보기 (48)
phantasmicmeans 기술 블로그
field Keyword name 프로퍼티의 재 정의된 setter를 살펴보면 field 라는 키워드를 볼 수 있다. field에 값을 넣는 것을 보니 무언가 name의 대리자 느낌이 든다. class Test { var name: String = "" set(value) { field = if (value.isNotEmpty()) value else "" } } Backing Fields 코틀린은 Backing Field가 필요하면 알아서 제공한다. 또한 Backing field는 접근자 내에서 field 키워드로 참조할 수 있다. 바로 위 예제에서 setter 내에 field 라고 선언되어진 부분을 볼 수 있는데, 이 field가 Backing Field를 참조하고 있는 상태인 것이다. 그럼 코틀린에..
Kotlin Properties and Fields 코틀린 class의 프로퍼티들은 var or val 키워드로 선언된다. 이 프로퍼티들은 default로 접근자(get, set) method를 포함하기에 코틀린에서의 프로퍼티 란 필드와 접근자를 통칭하는 개념이다. class Address { var name: String = "Holmes, Sherlock" var street: String = "Baker" var city: String = "London" var state: String? = null var zip: String = "123456" } 프로퍼티는 아래와 같이 간단하게 프로퍼티 이름으로 접근할 수 있다. fun copyAddress(address: Address): Address { ..
Class Inheritance kotlin의 최상위 클래스는 Any 클래스에 상위타입을 선언하지 않으면 Any가 상속됨 Any는 java의 Object와 다른 클래스임.. equlas, hashcode, tostring만 있음 class Example1() // 암시적 Any 상속 class Example2() : Any() // 명시적 Any 상속 open open 은 java final과 반대임 open class는 다른 클래스가 상속할 수 있음 기본적으로 kotline의 모든 classs는 final 임 상속 명시적으로 상위타입을 선언하려면, 클래스 헤더의 콜론 뒤에 상위 타입을 선언하면 되며, 부모 클래스는 open keyword 필요 파생 클래스에 primary constructor가 있으면,..
Kotlin Classe 기본 생성자 클래스 헤더의 일부이자 클래스별로 최대 1개만 가질 수 있다. class Person constructor(firstName: String) { } 어노테이션이나 접근지정자가 없을 때는, 기본생성자의 constructor 키워드를 생략가능하다. class Person(firstName: String) { } Primary Constructor 기본생성자는 코드를 가질 수 없으며, 초기화는 초기봐 블록(init) 안에서 작성해야 한다. 기본생성자의 파라미터는 init 블록 안에서 사용 가능 class Customer(name: String) { init { logger.info("customer intialized with value ${name}") } } Secon..
Kotlin Loop Label 기본적으로는 3가지 jume expression이 있다. return: By default returns from the nearest enclosing function or anonymous function. break: Terminates the nearest enclosing loop. continue: Proceeds to the next step of the nearest enclosing loop. Break and Continue Labels Kotlin은 loop에 label을 지정해 break, continue 스코프를 정할 수 있다. label은 @ 식별자를 통해 지정할 수 있고, @abc, fooBar@ 처럼 사용할 수 있다. 아래는 내부 for문에서 ..
Control Flow: if, when, for, while 위 control flow의 항목들은 익숙한 것들이다보니 모든 내용을 다룰 필요는 없어보이니.. https://kotlinlang.org/docs/reference/control-flow.html If 코틀린에서 if는 expression으로 간주 될 수 있다. 즉 값을 반환할 수 있다는 말이다. 삼항 연산자를 대신할 수 있는 이유도 이 때문인데 아래 코드를 보자 // Traditional usage var max = a if (a b) { max = a } else { max = b } // As expression!! 값 반환 val max = if (a ..
Kotlin Null Safety 기본적으로는 NPE를 제거하기 위해 Kotlin은 null 할당을 허락하지 않는다. 그러나 nullable한 무언가 필요하다면 타입 끝에 ? 를 붙이면 된다 . fun main() { var neverNull: String = "This can't be null" neverNull = null // error var nullable: String? = "You can keep a null here" nullable = null // OK } Null 접근 fun test(str: String?) : String { return str } TypeMismatch 위와 같이 nullable 타입을 인자로 받는 경우 null check가 없다면 IDE에서 아래와 같은 ..
Hello World intellj에 코틀린 프로젝트 생성 및 Hello world는 아래 문서로 https://kotlinlang.org/docs/tutorials/jvm-get-started.html 1. Variables Kotlin은 불변성을 강제하지 않는다. var / val을 사용하여 이를 컨트롤 하면 된다. val: immutable var: mutable val a: String = "initial" // immutable var b: Int = 1 // mutable 또한 Kotlin은 타입 추론을 잘한다. 변수 선언시 타입을 포함하지 않아도 대입 값을 보고 타입 추론한다. var c = 3 // compiler infers the type Int var d = "ABC" // compi..
일반적인 flow는 Publisher -> Data -> Subscriber이다. 그러나 Publisher -> [Data1] -> Operator -> [Data2] -> Operator2 -> [Data3] -> Subscriber 처럼 Operator를 활용해 Subcriber에 도달하는 Data를 컨트롤 할 수 있다. 쉽게 말해 Operator는 Data를 가공한다. JAVA8의 Stream 관련 메소드와 비슷한 의미를 가진다고 보면 된다 아래 코드는 3가지 operator를 거쳐 logSubscriber에게 데이터가 전달되는 과정을 나타낸다. 기본 개념은 아래와 같다. 대리 Subscriber를 사용하여 subscriber를 연결한다. 초기 Publisher에서 정의한 Subscription을 ..
흐름 제어 푸시모델만 사용하는것으로는 기술적 한계가 있다. 메시지 기반 통신의 본질은 요청에 응답하는 것이다. Producer가 Subscriber의 처리 능력을 무시하면 시스템에 악영향을 끼칠 수 있기 때문에 매우 까다롭다. 느린 프로듀서와 빠른 컨슈머 컨슈머가 매우 빠르게 동작하는 상황에서 프로듀서가 느리게 동작한다고 가정하자. 이러한 상황은 컨슈머의 능력을 프로듀서가 믿지 못하기에 발생할 수 있다. 상황에 따라 컨슈머의 처리 능력이 동적으로 변할 수도 있다. 가장 쉽게는 프로듀서 수를 늘려서 컨슈머에게 부담을 증가시킬 수 있고 그렇지만.. 결론적으로 이러한 문제를 해결하기 위해 필요한 것은 실제적 요구이다. 순수 푸시모델은 이러한 메트릭을 제공할 수 없으므로 동적으로 시스템의 처리량을 증가시키는 것..