분류 전체보기

    싱글톤 패턴(Singleton Pattern)

    자바 개발을 하면서 제일 많이 쓰는 패턴 중 하나가 싱글톤 패턴이다. 그리고 싱글톤 소스 또한 다양하게 작성한다. Source2와 같은 경우는 다중 쓰레드 상에서 위험하다. Source3과 같은 경우는 안전하긴 하지만 성능상 Source1이 제일 좋다. Source4와 같은 경우는 싱글톤에서 직렬화 처리를 해주기 위한 방법이다. Serializable 을 구현해주고 readResolve메소드를 구현하고 모든 인스턴스 필드를 transient 로 선언해준다. Source5와 같은 경우는 enum을 통한 구현 방법이다. 직렬화가 자동으로 지원되고 인스턴스가 여러개 생기지 않도록 지원해준다. public class Singleton { private static final Singleton instance =..

    JavaHL (JNI) Not Available

    JavaHL (JNI) Not Available

    http://www.sliksvn.com/en/download 자바에서 Subversion이 안되서 한참 애를 먹었는데 블로그 열심히 찾아보다가 해답을 얻었다. 이 [1] 블로그에서 설명이 잘 나와있다. 그렇다!! 결국은 또 64비트가 문제였던것이다. 우라질.... [2]에 가서 64비트 라이브러리를 설치해주면 됀다. 이클립스상에서 라이브러리 로드에 문제가 생기면 다음과 같은 창을 뛰운다. 주의깊게 보지 않고 지나쳤던게 문제다. 경고창의 url을 누르면 [3]으로 연결됀다. 그런데 문제는 나는 [2]에서 다운받고 설치를 했는데도 불구하고 여전히 "JavaHL (JNI) Not Available"상태였다.!!! 아 열받는다. 미치는지 알았다. 원래 subversion에서 자동으로 라이브러리 위치를 검색해서..

    Builder Pattern

    이건 Effctive Java[1]에서 "항목 2. 생성자의 매개변수가 많을 때는 빌더(builder)를 고려하자"를 공부하고 작성하였습니다. 객체를 생성할 때, 텔리스코핑 생성자 패턴과 자비빈즈 패턴은 자주 사용하지만 빌더 패턴은 처음 알게 되었네요. 이런 형태로 객체 생성을 설계할 수 있구나하고 배우게 되었습니다. 텔리스코핑 생성자 패턴(Telescoping constructor) 필수 매개변수들만 갖는 생성자, 필수 매개변수들만 선택 매개변수 하나를 갖는 생성자, 필수 매개변수들과 선택 매개변수 두개를 갖는 생성자 등의 형태로 모든 매개변수를 생성자가 가질 수 있도록 여러 개의 생성자를 만드는 것 -단점 매개변수들의 수가 증가하면 무척 번거로워진다. 자바빈즈 패턴(JavaBeans Pattern) ..

    버전 관리 & 이슈 관리 시스템

    SVN은 너무나 당연하게 쓰고 있었지만 이슈 관리 시스템에 대해서는 조금 무지했던 것 같다. 나중에 내가 선장이 될 경우에 이런 정도는 선원들에게 제공해줘야겠지. 버전 관리 시스템 [ Revision Control System ] - 프로그램 수정 파일을 관리하는 시스템 - 소스 코드 모듈을 유지하거나 문서 파일의 수정에 사용 - 대형 프로젝트 수행 시 반드시 필요한 도구 - 소스 히스토리를 관리 - 동시에 소스를 수정하는 것을 방지 - 개발 결과를 합치거나 변경 내용을 추적할 수 있음 SVN [ SubVersion] - CVS이후에 나옴 - 바이너리 까지 버전관리 할수 있음 - Open Source 이슈 관리 시스템 - 버그 관리 시스템이라고도 함 - 각종 개선점과 버그와 같은 프로젝트의 이슈 트래킹 ..

    달팽이 & 피보나치 수열 구현

    n개의 수를 받아서 달팽이 형태로 출력하는 방법. 문득 이전에 로직이 생각나지 않은게 기억나서 만들었다. 나는 컴퓨터 앞에서 해야 로직이 생각난다. 망할;; Source1은 달팽이, Source2는 피보나치 수열 재귀함수. 달팽이 피보나치같은 경우는 참 간단한데, 달팽이 같은 경우는 의외로 많이 시행착오를 겪었다. 수열 형태를 그려보고 x,y좌표에 따라서 계산해서 하려다가 점점 복잡해지고, 홀수, 짝수에 따른 오차까지 생각해야하나하고 머리가 복잡했는데 갑자기 간단히 풀려버렸다. 난 정말 시행착오 겪으면서 프로그래밍 하는게 제일 좋은것 같다. 1. 달팽이와 같은 형태로 배열을 이동하며 값을 입력한다. 2. 이동시 최대값이나 최소값을 넘기지 않으면서 다음값이 0이면 이동하고 아니면 방향을 바꾼다. publi..

    JNI(Java Native Interface) - 객체

    JNI(Java Native Interface) - 객체

    [1]에서 보고 해보았다. 이전에 쓴 JNI와 같은 방식으로 컴파일하고 실행해보면 됀다. 1. Java Source public class JniFuncMain { private static int staticIntField = 300; static {System.loadLibrary("jnifunc");} public static native JniTest createJniObject(); public static void main(String[] args) { System.out.println("[Java] createJniObject() 네이티브 메소드 호출"); JniTest jniObj = createJniObject(); jniObj.callTest(); } } class JniTest { p..

    두 개의 스택을 이용한 큐 구현

    한번 나에게 그런 문제가 주어진 적이 있었다. 스택(Stack)을 이용하여 큐(Queue)를 구현하라. 힌트는 두 개의 스택을 이용하라. 그런데 도무지 그날따라 머리속에 로직이 떠오르지가 않는 것이었다. 로직, 알고리즘이 떠오르지 않는 날은 최선책이 잘 떠오르지 않을 때가 있다. 그래서 나는 내가 문제를 푸는 과정이 조금 미숙할 때가 있지 않은가 싶다. 체계적으로 문제의 해법에 대해 접근해가야 하는데 그렇지 못한 점이 있는 것이다. 오늘 문득 그 문제를 생각하다보니 참 간단하다. * 두 개의 스택을 이용한 구현 중요한 점은 쌓아진 스택을 그대로 빼서 다시 스택에 쌓으면 큐의 형태로 빼낼 수 있게 됀다. 즉, 첫 번째 스택은 push()만을 담당하고, 두 번째 스택은 pop()만을 담당한다. - 첫 번째 ..

    JNI(Java Native Interface)

    JNI(Java Native Interface)

    프로젝트를 진행하면서 JNI에 대해 알게 되었었다. Java에서 C함수를 호출하거나 C에서 Java의 메소드를 호출할 때 사용하는 것인데, 안드로이드 공부를 하다가 조금 더 파고들게 되었다. * 안드로이드는 자바로 프로그래밍을 하는데 왜 JNI에 대해 알아야 할까? 우선 안드로이드 플랫폼은 순수하게 Java로만 구성되어진 것이 아닌 Java 레이어와 C/C++레이어가 서로 상호 작용하면서 동작한다. 이 두 레이어가 유기적으로 동작하게 만들려면 JNI에 대해 알아야 한다. 그리고 일반적으로 Java는 C/C++에 비해 느리다. 성능이 중요할 경우 C/C++로 작성하고 이를 JNI를 통해 Java에서 호출할 수 있다. * NDK(Native Development Kit) 안드로이드 애플리케이션에서 사용할 네..

    C와 Java의 컴파일 과정

    C와 Java의 컴파일 과정

    C와 Java의 컴파일 과정에 대해서 찾아보는 중에 좋은 책을 찾았다. 국내 웹에는 C의 컴파일 과정에 대한 내용밖에 없었다. Reverse Engineering Software[1]라는 책인데 2장에 컴파일 과정에 대한 내용이 나와 있었다. 1. C Compile 아래는 C의 컴파일 과정이다. Figure 1. 컴파일 과정(출처 : [1]) 1.1 Preprocessor C는 다른 언어의 컴파일러와 다르게 전처리 과정이 들어간다. 전처리([3] 참조)는 컴파일에 앞서 필요한 처리를 해주는 것이다. 전처리문에는 다음과 같은 것들이 있다. Table 1. 전처리문의 종류 전처리문 기능 #include 디스크상의 파일을 편입 #define 매크로를 정의 #undef 정의되어 있는 매크로를 취소 #if~#dn..

    테스트 주도 개발(Test Driven Development) 1

    테스트 주도 개발(Test Driven Development) 1

    근래 TDD에 관심을 갖게 되었다. 꾀 효율적인 개발 기법인데 안타까운 점은 이러한 것을 쓰는 회사나 팀이 많지 않을것 같아서, 개인적으로 공부하지 않는한 배울 기회가 별로 없을 것 같다. 나는 단위테스트에 대해 공부하다가 알게 되었는데 꾀 좋다. 단순한 테스트 기법이 아닌 좋은 분석기법이자 설계기법이다. 기존에 프로그래머는 개발을 먼저 하고 그것을 테스트하는 코드를 만들게 됀다. 회사에서 역시 잘 돌아가나 확인하고 잘 돼네?라고 끝나기도 한다. 지금 생각해보면 정말 체계적이지 못한 방법이다. 나도 아직 이 테스트주도개발이 익숙하지 않지만 숙달시켜보려고 한다. 안타까운 점은 체계적이고 정도를 지키는 회사의 부서가 아니라면 이 방식을 계속 쓰기가 힘들것 같다. ※ 테스트 주도 개발(Test Driven D..