본문 바로가기

java

[Java] Integer.compare(int x, int y) Java7부터 제공되는 API로 int 형 비교때는 이걸 사용하자.. Integer.compare(int x, int y) x - y로 계산 할 경우 오버플로우 가능성이 존재함. 더보기
[Java] Map의 값 비교 후 출력 sample 더보기
[Java] Map.Entry for(ClassA key : myMap.keySet()) { System.out.println(key); System.out.println(myMap.get(key);} 보다는.. for(Map.Entry entrie : myMap.entrySet()) { System.out.println(entrie.getKey()); System.out.println(entrie.getValue()); } 더보기
[Java] 테스트케이스 가독성 높이기 마찬가지로 "테스트 주도 개발로 배우는 객체 지향 설계와 실천"의 4부에 나오는 예제입니다.전체적인 책의 내용은 Swing 소스라서 눈에 잘 안들어와서 읽기가 힘들었는데.. 4부는 일반적인 상황에 대한 이야기라서 잘 읽히네요..;; 편식도 아니고..편독을... 아무튼.. 테스트 케이스 가독성 높이기에 대한 예제 코드 2개입니다. 1. 첫번째 코드는 테스트 케이스의 메서드명을 테스트 대상 객체의 메서드명을 그대로 쓰거나, 의미없는 메서드명을 사용하지 말고, 기능을 설명하는 형태로 메서드명을 작성하라는 것입니다. TO-BE 코드를 보시면 메서드명이 상당히 길게 작성이 되어있는데요, 이 책에서는 어차피 이 메서드를 누군가 직접 쳐서 사용할 일이 없으므로 아무리 길어도 상관없다라고 하고 있네요. 그리고 채수원님.. 더보기
[Java] TestCase 작성시 테스트 데이터 생성에 관한 Tip 먼저 "테스트 주도 개발로 배우는 객체 지향 설계와 실천" 책의 22장에 나오는 예제 코드임을 밝힙니다. 책을 읽던 중 평소에 테스트케이스를 작성하면서 가장 귀찮았고 보기 안 좋았던 부분에 대한 해결방법이 나와서gist에 정리 후 블로그를 이용하여 포스트해봅니다. 1. Sample1.java테스트를 위한 객체가 필요한데 이 객체를 생성하기위해 위와 같이 다수의 객체 혹은 String등을 입력해줘야 할때 사용 할 수 있는 방법입니다. Builder 클래스를 작성하는 것.. 2. Sample2.java비슷한 객체를 다수 생성해야 할때가 있습니다. 특정 필드의 값만 다른... 그럴때 사용하는 방법입니다. 3. Sample3.java2의 예를 사용해서 테스트 데이터를 생성하다보면, 비슷한 이름의 필드에 대해서 .. 더보기
[XStream] XStream 사용예 crescent에서 색인 설정 파일을 xml로 정의하고 있습니다. collections.xml인데요... 본래 이걸 그냥 dom4j를 사용해서 읽어서 Map과 기타 필요한 오브젝트를 생성하는 형태로 만들어서 사용하고 있었습니다. 그러다보니.. webpage에서 이 collections.xml설정을 변경하는 기능을 추가하려보니.. 저런 형태로는 다루기가 어려울 것 같아서 XML과 POJO의 변환에 관련된 라이브러리를 찾아보다가 XStream을 알게되어 처음 사용해보았습니다. 꽤 오래전부터 많이 사용되던 것 같은데.. 왜 몰랐을까요 -_-; http://xstream.codehaus.org 예제도 잘 나와있습니다. 이걸 사용해서 collections.xml을 변환해본 예제입니다. xml 자체가 그리 복잡하지.. 더보기
ZERO WIDTH NO-BREAK SPACE 며칠전부터 영 디버깅이 안되는 부분이 있었다.. 파일에서 읽어오는 "nbsp"라는 String과사용자가 입력한 "nbsp"라는 String이 equals를 하면 false가 나오는 것이었다. 공백이 있나? 로직이 잘못되었나? 해서 이래저래 막 디버깅해보고 바꿔보고 해봐도..도무지 모르겠었다. 그래서 혹시나해서 파일에 직접 "nbsp"라고 한줄을 더 넣었다. 그랬더니, Map의 키에 nbsp가 두개가 생겼다.!뭐여 이게..?? 혹시나해서 원래있던 nbsp를 지우고 새로 입력해 넣었더니 정상작동을 한다. 뭔 상황인지도 모르고 상황이 해결되어버려서 그냥 놔둘까하다가..문득, 혹시..? 해서 각 char의 유니코드 값을 찍어보았다. D : 65279 더보기
[Java] Semaphore(세마포어)를 이용한 ThreadExecutor DB에서 데이터를 읽어와서 네트워크를 통해 뭔가 작업을 한 후 다시 DB에 넣는 작업을 해야하는데 이 데이터의 건수가 많고 네트워크를 통한 작업에 시간이 좀 걸려서 이 부분을 스레드로 돌렸다. 기존에 알고 있는 Executor exec = Executors.newFixedThreadPool(10); 을 사용해서 실행을 했더니 DB에서 데이터 읽어오는 속도가 훨씬 빠른탓에 OOM 에러가 발생하기 시작... 처음에 도무지 왜 에러가 나는지 몰랐는데 확인해보니.. 내부에서 스레드들이 처리하지 못 한 JOB을 Queue에 저장해 두는데 이게 너무 쌓이다보니 문제가 되었던듯 하여... 자바병렬처리 프로그래밍 책을 다시 집어들었다. 미리 준비된 ExecutorService중 스레드가 추가 작업을 하지 못 할 때 w.. 더보기
[Java] 데몬(daemon) 만들기... http://ir.bagesoft.com/640 더보기
[Java] BlockingQueue를 사용한 생산자-소비자 패턴 모델 구현 요즘 회사에서 RabbitMQ를 사용하여 메시지 처리 프로그래밍을 하고 있습니다. 다른 개발자분과 함께 개발 중인데 저는 Consumer 역할을 하는 데몬을 구현중이네요. 생산자-소비자라는 것이 상대적인 부분이 있어서 MQ를 중심으로 제가 개발 중인 데몬은 소비자가 되지만... 제 데몬을 중심으로는 이 소비자가 다시 생산자가 되는 그런 개념이 됩니다. 아무튼 MQ로부터 메시지를 가져오고 그것을 내부 Queue에 저장하여 이런저런 할 일들을 구현을 해야하다보니 데몬안에서도 또 다시 생산자-소비자 패턴의 모델이 되어버렸습니다. 이를위해 Java에서 제공되는 BlockingQueue를 사용하였습니다. "자바 병렬처리 프로그래밍"이란 책에서는 이 Queue가 생산자-소비자 패턴을 구현하는데 아주 좋은 Queue.. 더보기