Decorator Pattern은 기존 객체가 가진 기능에 새로운 기능을 추가하는 방법에 대한 내용입니다. 기존 객체를 수정하지 않고, 좀더 유연하게 새로운 기능을 추가하는 방식을 제공합니다. 새로 추가된 기능들은 손쉽게 조합해서 통일된 방식으로 사용할 수 있습니다. Decorator Pattern의 가장 대표주자는 Java IO API라고 할 수 있습니다.InputStream input = new BufferedInputStream( new FileInputStream("text.txt"));단순하게 파일을 읽는 FileInputStream 객체에 버퍼를 통한 성능향상 기능을 추가할 수 있으며, 그 외에 다양한 기능들을 손쉽게 추가하여 사용할 수 있습니다. Decorator Pattern을 이용해서 S..
Spring 4.0 이상 버전을 사용하며,maven을 이용해 Test 진행 시다음과 같은 오류가 발생할 수 있습니다. java.lang.NoClassDefFoundError: javax/servlet/SessionCookieConfig Spring 4.0 이후 부터는 unit test 진행 시Sevelet 3.0 API을 사용하기 때문에pom.xml에 다음과 같이 라이브러리 버전을 변경해 주어야 합니다. javax.servlet javax.servlet-api 3.0.1
Observer Pattern 옵저버 패턴은 흔히 신문사 - 구독자 관계로 설명 되곤 합니다. 신문사는 구독자 리스트를 관리하고, 새로운 신문이 발행되면 새 신문을 모든 구독자에게 전달합니다. 새로운 구독자가 추가될 수도 있고, 기존의 등록 되었던 구독자가 해지될 수도 있습니다. 신문 발행 시에는 그 시점에 등록되어 있는 구독자들에게만 신문을 전달해야 합니다. 신문사 - 구독자 관련 설명은 개념을 이해하기에는 쉽지만, 개발자들이 피부로 와 닿게 느낄만 한 것은 아닌 것 같아 Click Event 발생 시, 다양한 View 객체들에게 이벤트를 전파하는 방식으로 코드를 작성해 보도록 하겠습니다. Subject Interface는 신문사 역할을 하는 인터페이스로 Observer들을 등록/해지 해주며, 이벤트 ..
간단한 클라이언트단 작업 진행 시에결과물을 웹 서버에 올려 확인할 필요가 있습니다.톰캣 등의 웹 서버는 좀 번거롭기도 해서좀 서 심플하게 사용할 수 있는 node용 웹서버가 있습니다. https://github.com/indexzero/http-server 사용 방법은 아래와 같습니다. # 설치$ sudo npm install -g http-server# 서버 시작$ http-server -a 0.0.0.0 -p 8000 브라우저를 통해 localhost:8000/index.html 으로 접속 시http-server를 실행한 디렉토리의 index.html 파일로 접근이 가능합니다. 혹시 node.js 가 설치 안되어 있을 경우 아래 명령어로 설치 가능합니다. $ apt-get install nodejs-..
Maven을 이용한 실행 가능한 jar 파일을 만드는 방법입니다. pom.xml 파일에 아래 플러그인을 추가 후 프로젝트의 루트 디렉토리에서 maven package 를 실행하면 됩니다. $mvn package * pom.xml ... org.apache.maven.plugins maven-shade-plugin 2.4.3 package shade META-INF/spring.handlers META-INF/spring.schemas com.test.MainProcess false * Jar 파일 실행 방법 $java -jar filname.jar maven-shade-plugin은 package의 모든 파일들을 하나의 jar파일로 묶어주는 플러그인 입니다. 실행 가능한 jar 파일을 만들기 위해서는 m..
비트연산을 처리하는 중에 1의 개수가 하나인지 여부를 확인해야 할 경우가 있었습니다.비트 수 만큼 루프를 돌면서 카운트를 하는 방법도 있겠지만,왠지 간단한 연산만으로 처리가 가능할 것 같았고,고민 끝에 아래 와 같은 방법으로 처리가 가능하다는걸 알게 되었습니다. public boolean isOneBitEnable(int value) { return (Math.log(value) / Math.log(2)) != (int)(Math.log(value) / Math.log(2)); }
프로젝트 진행 중 여러 외부장비에 명령을 전송해야 하는 이슈가 있었습니다. Request 호출 시 순차적으로 외부장비의 API를 호출하는 방식이었습니다. 문제는 외부 장비들도 서로 통신을 하기 때문에 연속된 요청을 하나의 트랜잭션 처럼 동작 시켜야만 했습니다. 필요한 로직은 아래와 같습니다. A, B, ... Z 장비들에게 순차적으로 작업을 요청하며, 각 작업 요청 시 마다 성공 여부를 전달받아 성공일 경우에만 다음 작업을 시작합니다. 단, 특정 작업이 실패했을 경우 이전에 진행되었던 모든 작업에 대한 복구 로직이 실행되어야 합니다. 복구 로직을 실행시키기 위해서는 모든 작업 성공 시, 필요한 복구 작업을 등록해 주어야 할 필요가 있습니다. 위와 같은 프로세스를 구현하기 위해 아래와 같은 방식으로 코드를..
업무적으로는 안드로이드를 개발해 볼 기회가 없어,개인적으로 시작한 프로젝트 입니다.어린 아이들을 대상으로 개발한 앱으로정해진 색상을 자신의 주위에서 찾는 간단한 게임입니다. 이왕 공부하는 거 게임 엔진을 이용하지 않고,모든 부분을 직접 개발해 보기로 했습니다.OpenGL 까지 사용하기에는 공부해야 할 것이 너무 많아서Android에서 제공하는 기본 View를 이용해서 개발했습니다. 게임 개발을 위해서 몇가지 기능을 제공하는 framework를 먼저 개발했습니다.- Resource 관리 기능 . 이미지, 사운드, 사각형- 애니메이션 기능 . 투명도 변환 . Transform (회전, 비틀기, Size 변환) . RGB 변환 . 직선 이동 (곡선이동은 어려워서 제외) . frame 애니메이션- Event 처..
안드로이드가 우리나라에 처음 들어왔을 때, 공부 삼아 만들어 본 앱 입니다.그 당시에는 개발자가 아니라 공장 생산라인에서 정비 업무를 보고 있었습니다.개발을 본격적으로 하던게 아니라, 혼자 공부만 하던 시절이라코드가 엉망 진창입니다..굉장히 볼품없는 실력으로 혼자 공부 하면서 힘들게 만들었던 기억이 나네요.하지만, 앱의 아이디어는 제법 기발합니다.당시 3교대를 돌았기 때문에 주간에 잠을 자는 경우가 많았는데요.힘들게 잠이 들었는데 별로 중요하지 않는 전화에 잠이 깨면 굉장히 스트레스를 받게 됩니다.그래서 중요한 전화만 골라 받고 중요하지 않는 전화는 자동으로 차단하는 앱을 생각하게 되었습니다. 중요한 전화인지 별 필요 없는 전화인지 어떻게 구분하는지가 관건인데..나름 간단하면서도 정확한 방법을 생각했습니..