프로그래밍 199

주어진 문자배열내의 공백을 모두 %20으로 바꾸는 메소드를 작성하라.

/** * Created by kwo2002 on 2015-07-30. */ object RelpaceSpace { def replaceSpace(cArr: Array[Char], n: Int): Array[Char] = { //새로운 배열 사이즈를 얻기 위한 loop def getNewArraySize(i: Int, newSize: Int): Int = { if (i >= n) newSize else { if (cArr(i) == ' ') { getNewArraySize(i + 1, newSize + 2) } else { getNewArraySize(i + 1, newSize) } } } def repChar(i: Int, i2: Int, newArr: Array[Char]): Array[Char] =..

자바 8 Optional

Null Pointer Exception 이 피곤하신가요? 그렇다면 자바 8 Optional 을 써보세요 . 예를 들어 아래와 같은 클래스가 있다고 가정합시다. public class Computer { private Soundcard soundcard; public Soundcard getSoundcard() { ... } ... } public class Soundcard { private USB usb; public USB getUSB() { ... } } public class USB{ public String getVersion(){ ... } 우리는 USB 클래스의 getVersion 을 호출하고 싶습니다. 그렇다면 이러한 방법을 생각해볼 수 있습니다. String version = compu..

문자열 두개를 받아 그 중 하나가 다른 하나의 순열인지 판단하라(2)

/** * Created by kwo2002 on 2015-07-29. * 문자열 두개를 받아 그 중 하나가 다른 하나의 순열인지 판단하라 */ object Permutation { def permutation1(a: String, b: String): Boolean = { if (a.trim.length != b.trim.length) { false } else { a.sorted.equalsIgnoreCase(b.sorted) } } def permutation2(a: String, b: String, p: Array[Char] => Array[Int]): Boolean = { if (a.trim.length != b.trim.length) { false } else { val aArr: Array[..

문자열 두개를 받아 그 중 하나가 다른 하나의 순열인지 판단하라

/** * Created by kwo2002 on 2015-07-29. * 문자열 두개를 받아 그 중 하나가 다른 하나의 순열인지 판단하라 */ object Permutation { def permutation1(a: String, b: String): Boolean = { if (a.trim.length != b.trim.length) { false }else { a.sorted.equalsIgnoreCase(b.sorted) } } def main(args: Array[String]) { println(permutation1("aaccbb", "bbccaa")) } } 1. 공백은 무시. 대소문자 무시2. 문자열 길이가 다르다면 무조건 순열이 아님.3. 문자열을 문자열.sorted 로 정렬한 후 비교..

문자열에 포함된 문자열이 유일한지 검사하는 알고리즘

/** * Created by kwo2002 on 2015-07-27. */ object UniqueChar { def validUniqueChar(text: String): Boolean = { def go(n: Int, seq: Int, text: String): Boolean = { if (n < text.length && seq < text.length) { if (text.charAt(n) == text.charAt(seq)) { false } else { go(n, seq + 1, text) } } else { if (n + 1 < text.length) { go(n + 1, n + 2, text) } else { true } } } go(0, 1, text) } def main(args: A..

스프링 시큐리티를 이용한 보안 - 1부 인증

현재 맡고 있는 프로젝트의 Rest Api 가 보안이 전혀 돼 있지 않아서, 보안을 강화하는 작업을 시작했다. 보안이 전혀 돼 있지 않기 때문에, 사용자 아이디/비밀번호 정보가 없어도, Rest Api 를 호출하면 비밀정보를 쉽게 볼 수 있는 상황이였다. 보안을 위해 Spring Security 를 적용하였다. 보안 적용을 하면서 Spring Security 에 대해서 좀 더 자세히 알게 되었고, 그 내용에 대해 포스팅 하고자 한다 위 사진은 웹 기반 인증 요청을 처리하는 기본 프로세스이다. 굉장히 이해하기 쉽게 잘 도식화돼있고, 스프링 시큐리티 인증 처리의 기본 동장 방식 이기 때문에, 스프링 시큐리티를 이해하려면 반드시 위 인증 처리 과정을 이해하고 있는 것이 좋다. 설명에 앞서, 설정 파일을 JAV..

Spring Framework 을 이용하면서 Mockito 로 테스트하기

나는 개인적으로 개발할 때, 테스트가 제대로 안되는 상황이 가장 답답하다. 어떤식으로 작동하고 어디서 버그가 발생하는지 정확히 눈으로 보이지 않는 상황이 개발할 때 가장 답답한 것 같다. 대용량 분산 처리. 캐쉬. Message Queue. 마이크로 아키텍처. Redis. NoSQL. SNS(트위터.라인.페이스북.인스타그램 등) 아키텍처를 공부하면서 연신 감탄하고. 시간복잡도. 공간복잡도를 분석하고. 보다 나은 알고리즘에 대해 생각하고.. 연구하고.. 정말 재밌고 좋다.. 다 좋은데, 실상 회사에서 일할때. 가장 많이 접하는 건 거대한 소스덩어리 이고 가장 많이 체감하는 건 이 거대한 소스덩어리 는 정말 많은 객체들과 강력하게 결합돼있고, 단위 테스트를 도무지 어떻게 해야할지 감이 안잡히는 상황 이다. ..

프로그래밍/TDD 2015.03.13

Google Guava

프로젝트를 하다보면 Collection ( List , Map ), String 을 정말 많이 다룬다. Map에서 특정 키로 get해서 꺼내쓰거나 String 의 값을 equals 로 비교하여 특정조건문을 수행할 때, 개발자가 아무리 꼼꼼하게 테스트하더라도 개발자도 사람이라 비교하려는, 혹은 사용하려는 값이 null인 경우는 거의 무조건 발생한다. 그렇기 때문에 NullPointerException 정말 자주 만나게 된다. 디버깅해보면 금방 알아내긴 하지만 경우에 따라선 찾기 힘든경우도 있고, 때로는 정말 찾기 힘든 끔찍한 버그를 만들기도 한다. FastFail 이라는 말이 있다. 문제가 있을 땐 최대한 빨리 실패시키는 것이 좋다. 제일 좋은것은 컴파일 시점에 알아내는것이고. 요즘은 프로젝트가 거의 Sp..

엑셀의 내용을 도메인에 셋팅하는 유틸리티 클래스

엑셀의 내용을 도메인클래스에 셋팅하는 유틸리티 클래스를 만들어보았습니다. 우선 메소드는 아래와 같습니다. /** * @param excelFile : 읽어들일 엑셀파일 * @param clazz : 읽어들인 엑셀파일의 내용을 셋팅할 Domain 클래스 * @return 읽어들인 엑셀파일의 내용이 셋팅된 Domain 클래스 리스트 */public static List excelToDomain(File excelFile, Class clazz) 만들면서 발생했던 이슈는, 처음에는 Domain 클래스의 setter 메소드를 엑셀의 셀의 순서대로 호출하는 것이였습니다. 이렇게 엑셀 데이터를 순차적으로 setter 메소드에 Reflection을 사용하여 셋팅하려 했습니다. 그런데 이 방법은 너무 위험해보였습니다...