전체 글242 isEmpty()와 isBlank()의 차이 둘은 언뜻 같아보이지만 다르다. 결론부터 말하면 isBlank는 공백을 true로 판단하고 Empty는 공백도 false로 판단한다. 값(value) isEmpty() isBlank() null true true "" true true " " false true "sdnfi" false false " sdnfi " false false 둘 사이의 동작방식 차이는 무얼까? isEmpty를 살펴보자. public inline fun CharSequence?.isNullOrEmpty(): Boolean { contract { returns(false) implies (this@isNullOrEmpty != null) } return this == null || this.length == 0 } null 혹은 .. 2019. 9. 9. replace()에서 replacement parameter로 File.separator를 사용할 때 character to be escaped is missing String을 replace() 해야할 때 File.separator를 사용할 때 character to be escaped is missing 메세지를 볼 수 있을 것이다. 아마도 윈도우 환경에서만 발생할 것이고, 원인은 File.separator가 '\'를 반환하는데 \가 escape문자이기 때문에 발생한다. 예를 들면 \를 문자로 사용하기 위해서는 \\, /를 쓰기 위해서는 \/ 이런식으로 특수문자를 쓰는데 사용되는 문자인데 \만 단독으로 사용되니 문제가 발생하는 것이다. 근데 에러 메세지도 그렇고 내부를 찾아봐도 if (nextChar == '\\') { cursor++; if (cursor == replacement.length()) throw new IllegalArgumentException.. 2019. 7. 29. HEX와 Base64 암호화의 차이 코드를 보다보니 두 가지 방식에 대한 암호화가 존재하더라. 무슨 차이인가 싶어 알아보았다. 우선, 두 가지 모두 암호화의 의미보다는 Byte에 대한 인코딩 개념으로 많이 사용한다고 한다. 즉, 여러 시스템에서의 다양한 문자 포맷에 대응하기 위해 공통 개념으로 사용한다는 의미. 물론 암호화의 의미가 없진 않겠지. 두가지 차이를 기술하기 전에 우선 HEX는 Base16이라고 해도 무방하다. HEX는 16진수로 표현하고 Base64는 64진수로 표현한다. 찾으면서 살펴봤을 때는 암호화에 대한 안전 레벨은 크게 다르진 않은 것 같다. 그래도 64쪽이 낫지 않을까. 두가지의 또다른 차이는 길이이다. HEX는 1바이트(한글자)를 2바이트 16진수로 표현한다. Base64는 3바이트(세글자)를 4바이트 64진수로 표.. 2019. 7. 23. forever 로컬 모듈로 실행하기 for window 종종 node 프로젝트를 로컬로 돌려야하는 경우가 있다. 내 경우는 암호화 모듈이 dll로 제공되었고, 32비트로 빌드해야 되는 상황에 버젼 호환 문제도 있는지 다른 버젼으로 빌드가 안되서 제공된 것을 그대로 써야 했던 상황... 근데 새로운 서버로 올려야 했기에 forever를 로컬로 설치해야 했다. forever git을 가도 구글을 찾아봐도 로컬 실행에 대한 가이드가 없어서 찾다 찾다 찾음.. 기본적으로 forever를 로컬로 설치하면 root/node_modules/.bin 혹은 forever 폴더 내에 .bin 내에 forever.cmd파일이 생성된다. 열면 아래와 같음 @IF EXIST "%~dp0\node.exe" ( "%~dp0\node.exe" "%~dp0\node_modules\fore.. 2019. 6. 18. 새로운 stage 띄울 때 기존 stage 구하기(듀얼모니터) JavaFX의 stage의 위치는 모니터 갯수에 상관없이 좌표로 구분된다. x,y,width,height 4개의 프로퍼티로 창을 띄우는 위치가 결정된다. 듀얼모니터의 경우 1번 모니터는 minX - 0 maxX - 1080 처럼 구분되며, 2번모니터는 min이 1080 max는 모니터 가로 크기 더한값. 그래서 새로운 stage를 띄울 때 기존 stage값을 기반으로 하지 않으면 무조건 primary 모니터에 뿌려주기 때문에 해당 이슈를 해결하기 위해서는 두 가지 방법이 존재한다. 1. 기존 stage의 프로퍼티를 구해서 새로운 stage에 지정한 뒤 띄운다. 2. 모니터의 갯수를 파악하고 x,y값만 구해서 현재 stage가 있는 모니터에 띄운다. 구현하고자 하는 기능에 따라 솔루션은 나뉘겠지만 내 경우.. 2019. 6. 11. winston logger에서 날짜 제대로 안찍힐 때 인터넷에 있는 수많은 예제 function timeFormat(){ return moment().format('YYYY-MM-DD HH:mm:ss'); } new (winston.transports.Console)({ name : 'debug-console', colorize : true, timestamp : timeFormat(), level : 'debug', showLevel : true, json : false, localTime : true }) 이런식으로 되있는데(이거 말고도 수많은 형식이 있는데... 일단 내 case에서는 format이 안되고 그러니 format.printf 등등 도 안되고...) 문제는 timeFormat()을 지정했음에도 망할 아래처럼 출력되었다. 2019-06-04T.. 2019. 6. 4. 메모리 분석 사이트 1. HeapHero(https://heaphero.io/) 자바 힙 메모리 분석 사이트. zip or gz 파일 가능 2. GCeasy(https://gceasy.io/) GC분석 사이트. 가입 후, 무료로 사용할 경우 횟수 제한 3. FastThread(https://fastthread.io/) 자바 쓰레드 분석 사이트 2019. 5. 28. return label(block) 코틀린의 모든 블록은 라벨 설정이 가능하다. 그래서 return할 때 반환할 블록을 임의로 설정하여 여러가지 효과를 나타낼 수 있다. case 1) 일반적인 return. 3을 만나면 forEach를 종료한다. fun foo() { listOf(1, 2, 3, 4, 5).forEach { if (it == 3) return // non-local return directly to the caller of foo() print(it) } println("this point is unreachable") } 결과값 12this point is unreachable case 2) forEach에 람다를 적용한다. 블록에 라벨을 설정하여 해당 블록만 반환하도록 변경. 3을 제외하고 다 출력 fun foo() {.. 2019. 5. 23. 유용한 함수 let, apply, run, with let : 호출하는 객체를 이어지는 블록의 인자로 넘기고 블록의 실행 결과를 반환(인자가 한 개 일 경우 it으로 대체 가능) class A { fun get() { println("get A") } } A?.let { it.get()// "get A" } apply : 호출하는 객체를 이어지는 블록의 리시버로 전달하고 객체 자체를 반환 class A { var a : Int var b : Int var c : Int fun setA(n : Int) { a = n } fun setB(n : Int) { b = n } fun setC(n : Int) { c = n } } val result = A.apply { setA(1) setB(2) setC(3) } // 아래처럼 쓰는 것을 위 apply로 간단하게.. 2019. 5. 21. 이전 1 ··· 8 9 10 11 12 13 14 ··· 27 다음