-
2013-06-26
(maven) jar-dependency 복사하기
필자의 경우 자바 서버쪽에서 java -jar 로 만든 jar 파일을 만드는 경우가 있는데 그때에 maven 으로 연동한 라이브러리들을 모두 가지고 있어야 제대로 구동이 된다. 때문에 pom.xml 에 다음의 부분을 추가해서 jar 를 만들고 target/lib 에 연동된 라이브러리들을 배치(복사) 하도록 해야 한다.
-
2013-05-29
(Java) Thread, Runnable 콜백함수
최근에 [자바 네트워크 관련 책](http://book.naver.com/bookdb/book_detail.nhn?bid=1583597)을 보고 있는데(조금 옛날책) 스레드에 관련된 내용이 나와서 정리한다. [이전에 ExcutorService 에 대해서 썼을때](http://ash84.tistory.com/933)는 Runnable 의 run()함수가 void 형을 리턴하도록 되어 있기 때문에 결과 값을 받을수 없다고 설명했었는데, 이 책에서는 콜백 함수를 이용해서 각 스레드
-
2013-05-28
(Java) RSS 파싱 라이브러리 ROME
-
2013-03-09
(espressoOtr) Canister/Shelfer 소개
-
2013-03-07
(espressoOtr) DateTime wrapping 작업
개인적으로 여러가지 데이터 형이 있겠지만 가장 쓰기 불편하고 짜증나는 형은 단연 날짜와 시간에 대한 데이터 형식인 Date(Java 기준, 다른 언어도 크게 다르지 않다.) 일것이다. wrapping 작업을 하는 이유는 사실 우리가 날짜 와 시간 관련 작업을 할때 하는 작업이 그리 다양하지 않다는 가정에서 출발했다. 실제로 내가 가장 필요했던
-
2013-03-05
(JSP) 간단 OpenAPI 만들기
앱 작업을 하다 보면 서버에서 해주었으면 하는 작업들이 있다. 특히 아이폰 앱의 경우 애플 심사가 최소 일주일의 경우가 많기 때문에 파싱하는 부분이나 연동하는 외부 API가 변경되는 경우 아이폰 앱내에서 해당 코드가 있으면 변경을 하더라도 사용자가 다시 본래의 기능을 쓰려면 시간이 오래 걸린다.
-
2013-03-05
(espressoOtr) jericho parser를 이용한 HTMLExtractor
HTML 파싱은 이제 어떤 서비스와 연동할때 필수적인 부분이 되었다. 그래서 쉽게 쓸수 있게 클래스화 해두면 좋은것 같아서 개인적으로 만들고 있는 [espressoOtr](https://github.com/AhnSeongHyun/espressoOtr) 이라는 자바 라이브버리에 jericho parser 를 이용해서 HTMLExtractor 클래스를 만들었다. jericho 파서는 자바기반 html parser 인데 쉽게 쓸수 있도록 되어 있다. [espressoOtr](htt
-
2013-03-02
[후기] 제 13회 JCO를 다녀와서
자바 개발자는 JCO를 다녀와야 하는가? 하는 물음을 가지고 있었다. 작년에 나는 전업 자바 개발자가 아니였기 때문에 JCO 를 가는 동료들을 바라보면서 굳이 갈 필요가 있을까 하는 생각을 가지고 있었다. Deview 와는 다르고 개인적으로 자바라는 언어는 어느정도 완성된 언어라는 느낌이 들었다. 더 새로울게 있을까 하는 느낌? 그렇지만 올해 내가 처음 참가한 JCO의 느낌과 내용을 쓰려고 한다. 지극히. 주관적인 자바 초보 개발자의 JCO 후기라는 점을 잊지마시길.
-
2013-02-19
(Java) Effective Java 정리 파편.
별거는 아니고 Effective 자바 읽으면서 몇가지 메모한 사항들 정리한다.
-
2013-02-18
(Java) mybatis 기본 사용 정리
-
2013-02-15
(Java) ExecutorService, Thread 를 이용한 스레드 사용
자바 프로그래밍을 하면서 스레드를 자주 사용하는 편인데, 아무래도 속도가 안나오면 데이터를 많이 처리하는 부분에서 병렬처리를 하는 것이 가장 첫 번째로 생각할 수 있는 처리속도의 향상 방법이라고 할수 있겠다. **Thread 객체를 사용하는 방법과 ExecutorService를 사용하는 방법이 있는데, 필자는 주로 각각 다른 작업을 병렬로 해야하는 경우에는 Thread-Runnable 조합을 이용하고, 같은 작업을 여러개로 나눠서 처리한 뒤 결과를 모아서 정렬, 처리 등을 하는 작업의 경우 ExecutorService-Callab
-
2013-02-12
(maven) maven phase
maven에서 빌드를 하다보면 goal 을 입력해야하는 경우가 있는데 그냥 package 를 입력하면 jar를 생성해 주는것으로 생각해서 작업을 하곤 했는데, maven 홈페이지 가서 각 phase에 대한 내용을 발췌해왔다. 몇가지 살펴보면 package 는 당연히 compiled code 를 가지고 jar와 같은 배포형식으로 만든다고 되어 있다. install은 말 그대로 설치인데, package 된 것을 다른 프로젝트에서 사용할 수 있도록 (maven)local repos
-
2013-02-08
(Java) 싱글톤 + Map을 이용한 객체관리.
-
2013-02-06
(Java) 상수 인터페이스 패턴
-
2013-01-14
[Java] SortedSet에 대해서.
-
2013-01-12
[Java] StringAppender, StringBuilder 짭.
-
2013-01-07
[Java] HashSet 을 파헤쳐보자.
HashSet은 Set 인터페이스를 구현하는 클래스로 내부적으로 HashMap 인스턴스의 지원을 받는다. [GrepCode](http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/String.java)에 가서 HashSet을 찾아보자.
-
2013-01-04
[Java] Set 인터페이스, 간략 정리.
Set 인터페이스에 대해서 알아보자. Collection 의 일부인데 중복되는 element를 포함하지 않는것이 가장 큰 특징이며, Java Doc 에서는 “수학적으로 말해서 집합을 의미한다” 라고 설명하고 있다. Set 인터페이스는 Collection 를 상속 받아서 만들어진 인터페이스이다. 때문에 대부분의 함수들이 Collection 에서 제공하는 함수들과 동일하다.
-
2013-01-03
[Java] PriorityQueue(우선순위큐)를 알아보자.
일반적인 큐(Queue)는 선입선출(FIFO)의 구조를 가진다는 것은 다들 아시고 있을 것이라고 생각된다. 그렇다면 PriorityQueue 는 일반적인 큐와 어떻게 다를까?
-
2012-12-27
[Java] Vector에 대해서.
vector는 증가 가능한 객체의 배열형태( a growable array of objects)라고 자바문서에서 설명하고 있다. ArrayList와 다른 점은 capacity와 capacityIncrement 를 관리함으로써 저장용량 최적화를 시도한다는 점이다. capacity는 vector의 용량인데 개발자가 지정할 수 있다. capacityIncrement 은 capacity가 증가하는 단위이며, 초기 생성시 capacity는 10으로 지정되어 있다.
-
2012-12-27
[Java] LinkedList, ArrayList와 뭐가 다른가.
클린코드등의 책을 보면서, 인터페이스에 맞춰서 프로그래밍 하라는 이야기를 많이 들었고, C#의 ArrayList가 익숙해서 그런지 주로 자바에서 사용하는 Collection중 하나가 아래와 같은 List 이다.
-
2012-12-27
[Java] Collection Hierarchy
출처 : [http://ajaypinnaka.blogspot.kr/2011/01/java-collection-hierarchy.html](http://ajaypinnaka.blogspot.kr/2011/01/java-collection-hierarchy.html)
-
2012-12-24
[Java] List 분배하기, distributeListToSubList()
개인적으로 필요할것 같은데 하는 라이브러리를 만드는 작업을 하고 있는데 이름은 espressoOtr 이라고 지었다. (github에 아직은 미공개상태.) 뭐 이름은 내 마음대로니까 거두절미하고, 짜잘한 라이브러리가 있지만, 최근에 만든것을 하나 공개하려고 한다. 대단한건 절대 아니고, 누군가 이미 만들어 쓰고 있을지도 모르지만.
-
2012-12-24
[Java] List 분배하기, distributeListToSameCapacity()
앞의 포스트에서는 [하나의 리스트에 대해서 n 개의 subList로 분배하는 distributeListToSubList()](http://ash84.tistory.com/874) 함수를 소개했는데, 이번에 소개할 함수는 하나의 리스트를 n개의 동일한 아이템 개수를 가지는 subList로 분배하는 함수이다. 차이점은 distributeListToSubList() 함수는 통제하는 부분이 subList 의 개수인 반면에, distributeListToSameCapacity() 함
-
2012-12-20
Nexus를 이용한 사내 Maven Repository 만들기 1.
앞서 이클립스에 maven을 설치하는 과정에 대해서 설명했는데, 이번 장에는 사내 maven Repository를 구성하는 방법에 대해서 알아보자. 일단 사내 Repository를 구성해야 하는 가장 큰 이유는 매번 참조하고 있는 라이브러리를 가져와야 하는 불편함도 있겠지만, 솔직히 필자에게 더 필요한건 사내에서 만들어진 라이브러리를 Repository에 올려놓고 다른 동료개발자분들이 쉽게 찾아서 쓸수 있게 하는것이 더 중요했다.
-
2012-12-19
[Java] StringBuilder delete() 시, 현재 길이 체크할것.
너무 간단한것이긴 한데, 최근에 만든 소스에서 실수를 한적이 있어서 체벌(?)차 이렇게 적는다. 무엇인가 가변 문자열 조합을 위해서는 String 이 단연 후달리는 것은 보편적 자바 개발자라면 다 아는 사실일텐데, 그래서 StringBuilder를 사용하는데 실수 할수 있는 부분이다.
-
2012-12-18
[maven] 기본 설치 및 메이븐 프로젝트 만들기
maven에 대해서 포스팅 하는 이유는 Java 의 빌드에 대해서 여러가지 방법이 있지만, 가장 jar에 대한 관리가 잘 되기 때문이라는 생각에서였다. 본 글은 이클립스 Juno 버전이 설치되어 있다는 가정하에 진행하도록 하겠다. 기존의 이클립스가 있으신 분들이라면 Juno 버전을 따로 다운 받아서 해보시길 바란다.
-
2012-12-12
[JAVA] 서브클래싱을 막는 방법
서브클래싱(subclassing)을 막는 두가지 방법
-
2012-12-07
[JAVA] slf4j-log4j 간단 세팅하기.
개인적으로 log4j 세팅을 그리 좋아하지 않고, logger 라는것 자체가 좀 싫어하는데 많은 사람들이 사용하고 사실상 회사에서 자바 프로젝트를 하려면 안 쓸수가 없다. 때문에 간략하게 나마 정리를 한다. slf4j를 log4j보다 선호하는 이유는 각자 찾아보길 바란다. ([링크](https://www.google.com/search?q=slf4j%EB%A5%BC+%EC%82%AC%EC%9A%A
-
2012-12-05
[JAVA] getUnicodeFromString, 문자에서 유니코드 값 가져오기
유니코드를 가져와야 하는 경우가 있다. 어떤 경우에는 문자 대신에 유니코드 자체값을 사전 같은 곳에 넣어 주는 곳이 있다. 사실은 그리 선호 하지 않는 경우인데 이유인즉, 해당 문자를 별도로 눈으로 확인해야 할 필요성이 있는경우, 불편하다. 대부분 이런 경우, unicodinator 를 이용한다. 자바에서 어떤 문자에 대한 유니코드 값을 가져오는 코드는 다음과 같다.
-
2012-11-29
[JAVA] private 생성자의 사용에 대해서.
필자는 데이터 클래스라는 것을 많이 만들어쓰는 편인다. List나 Hashtable 의 변수에 이름을 주는 것 보다 클래스와 멤버에 이름을 줌으로써 좀 더 의미를 명확하게 표현할 수 있기 때문에 자주 사용하는 편이다. 데이터 클래스들의 경우 사실상 클래스에서 행동이라고 하는게 set, get 과 같은 정도의 것 밖에 없는 경우가 많다. 다음의
-
2012-11-29
[JAVA] C개발자를 위한 자바 코딩 스타일 파일
[](http://ash84.net/wp-content/uploads/1/cfile27.uf.1231724F50B7509137A4BA.xml)cfile27.uf.1231724F50B7509137A4BA.xml
-
2012-11-27
[JAVA] 약간은 낯설은 가변인자 사용법.
개인적으로 가변인자 사용을 그리 추천하지는 않지만, 어쩔수 없이 사용할때가 있다. List나 Hashtable을 사용하는것도 하나의 방법이겠지만, 간단하게는 가변인자를 활용하는것도 좋은 예라는 생각이 든다.
-
2012-11-26
[Java] HashMap에 대한 정리.
뭐, 다들 아는 사실이겠지만, HashMap에 대해서 한번 더 정리를 하려고 한다. 필자는 Hashtable을 많이 쓰긴 하는데 HashMap에 대해서 정리를 하는 이유는 단연 **성능**때문이다. 스케일 아웃도 좋지만, 일정 수준이상의 성능 최적화 작업은 늘 필요하기 마련이기 때문이다.
-
2012-11-22
[JAVA] Comparable 인터페이스 구현
필자는 Comparable 인터페이스를 이용해서 compareTo 함수를 구현하는 것 보다는 사실 Comparator 를 이용해서 정렬에 활용하는 케이스를 자주 사용했었다. (물론 그 안에서 이미 구현되어 있는 기본 클래스의 compareTo()를 사용한다.) 여기서는,** Effective Java** 항목12번에 Comparable 인터페이스의 구현을 고려하자 라는 부분에 대해서 요약해서 정리하고, Watch 클래스를 통해서 시계를 비교하는 compareTo() 함수를 구
-
2012-11-05
[JAVA] FileReaderManager, FileWriterManager 쉽게 읽고 쓰자.
자바에서 파일 읽고 쓰는 부분에 대한 정리차원에서 쓴다. 개인적으로 자주 쓰는 FileReaderManager, FileWriterManager 클래스를 올린다. 유틸리티 클래스(static 함수)로 중요한 부분은 현재 JVM 인코딩을 가져와서 읽고 쓰고 하는 부분이다. [이전 포스팅](http://ash84.tistory.com/783)에서도 언급했지만 findbug 플러그인을 통해서 걸러지는 부분이기도 하거니와 인코딩 문제는 미리 처리해주는게 문자열 관련 처리를 할때
-
2012-11-05
[JAVA] correctDirectoryPath(), 디렉토리 경로 한번더 검사하기.
간혹 디렉토리 안에 여러가지 파일에 대해서 접근해야 할때, 디렉토리 경로를 받을때가 있다. 그런데 이 경로를 가지고 뭔가 작업을 할때 머리속에 늘 남는것 중 하나가 바로 사용자의 입력 행태이다. 즉, 사용자는 디렉토리 경로를 다음과 같이 입력할수 있다.
-
2012-11-01
[JAVA] @Override eqauls() 함수
**** **Effective Java** 에 나오는 내용중 **[항목8]** 번에 해당하는 내용인데 equals() 메소드의 오버라이드에 대한 내용이 정리되어 있다. 요약하자면, 기본형(primitive) 타입은 == 을 이용해서 검사하고, 클래스 형은 자바에서 제공하는 것이라면, equals() 메소드를 사용하면 된다. 그리고 기본형 중에서 double, float 형은**[Double.Compare
-
2012-10-22
[JAVA] 자바에서 싱글턴 패턴을 구현하는 세 가지 방식들.
안티패턴임에도 불구하고, 자주 쓰게 되는 패턴중 하나가 싱글턴 패턴인데, 멀티스레드에 취약하다는 문제점을 가지고 있으면서도 선택된 데이터나 현재 데이터만을 표현할때 좋은것 같다. 이전 포스팅에서도 [H](http://ash84.tistory.com/762) [ashtable 을 이용한 로컬 캐쉬 소스](http://ash84.tistory.com/762)에서도 싱글턴을 썼는데 이번에 이펙티브 자바를 읽으면서 싱글톤에 대한 이야기가 나와서 정리하고자 한다.
-
2012-09-03
[JAVA] jedis를 이용한 Redis 와 연동하기
-
2012-08-23
[JAVA] FilenameFilter 를 이용한 특정 확장자 파일리스트 가져오기
파일처리 관련 부분에서 자주 사용되는 부분이 바로 디렉토리에서 파일리스트를 읽어오는 부분이다. 그런데 간혹 원치 않는 파일을 읽어오고 해당 파일에 접근하거나 파싱하는 과정에서 문제가 생길 수가 있다. 때문에 정해진 확장자만 읽어오는 부분이 필요한데, JAVA 에서는 이를 위해서 FilenameFilter 라는 것을 제공한다.
-
2012-08-16
[JAVA]현재 인코딩 출력하기
자바는 JVM 세팅을 통해서(이클립스를 통해서도 가능) 인코딩을 변경할 수 있는데, 사용자가 JAR를 실행시킬때, JVM 세팅에 따라서 인코딩을 다르게 줄 경우가 있다. 그럴때, 프로그램 내에서 현재 인코딩을 가져와서 사용해야 할 경우가 있다면 다음과 같이 인코딩을 가져오면 된다.
-
2012-02-18
[JAVA] Gson 라이브러리로 JSon 이용하기
최근에 회사에서 프로젝트를 하면서 쓴 것은 아니고 프로토타입핑을 하는 도중에쓴것이 있어서 소개하려고한다. 목적은그랬다. 데이터양이엄청많았는데서버에서가져오기벅차니까결과를캐쉬하자는목적이었다. 그런데메모리에올려져있는캐쉬를사용하자니서버에부담도되고, 그 사용량 역시 만만치 않다는 결론에이르렀다.
-
2012-01-15
[JAVA] 단위테스트를 보다 쉽게, JUnit 을 사용하자.
단위 테스트를 어떻게 구성해야 할까에 대해서 생각해 볼 경우가 종종 있는것 같다. 실제로 필자가 속한 조직에서는 아직 단위테스트에 대한 필요성을 인지 하지 못한것인지는 모르겠지만, 아무튼 새롭게 프로토타입(Prototype)을 구성중인 자바 기반의 문서 이미지 추출 프로젝트에서는 클린코드와 단위테스트를 필수로 포함시키기로 하였다. <
-
2012-01-09
[Sejong] 한글인지 여부 체크(Java)
한글인지 아닌지를 체크하는 함수입니다. 입력받은 글자 하나하나를 유니코드 상의 한글 범위안에 있는지 체크하고 부분적으로 한글인지, 전체가 한글인지, 아니면 입력한 문자열이 한글이 아닌지를 체크하는 함수 입니다.
-
2011-11-30
[JAVA] HashTable 을 이용한 로컬캐쉬(LocalCache)
-
2011-11-18
[JAVA] MD5 + 자릿수
최근에 해쉬테이블의 키 값을 만들기 위해서 입력 문자열에 대한 MD5를 추출하는 자바 소스를 인터넷에서 구했는데, 입력 문자열에 따라서 MD5 로 추출되는 자릿수가 달라서 해쉬테이블의 키 값으로 쓰기에는 조금 불편한 점이
-
2011-10-29
[C/C++] strlen() 과 String 클래스의 length()함수의 차이점.
문자열의 갯수를 구하는 함수만큼 공통적으로 여러 언어에서 구현되어 있는 기능도 드문것 같습니다. 오늘 소개할 내용은 C++ 의 내에 있는 char * 형의 문자열의 갯수를 세어주는 `strlen()` 함수에 대해서 이야기 하려고 합니다. 제목처럼 일반적인 객체지향의 언어 자바나 C#의 String 클래스에서 사용하는 length() 함수와 어떻게 다른지 이야기 하려고 합니다. 물론 아시는 분들도 있겠지만.^^