Lacti's Archive

26 posts tagged with java

  • go interface 구현하기

    June 21, 2012

    사실 go interface가 어떤 스펙을 가졌는지는 모르겠고 그냥 summerlight님께서 그걸 c++로 구현하면 재미있겠다고 해서 시작을 한건데 대충 내용은 다음과 같다. A라는 class는 a, b, c라는 함수를 가지고 있지만, 명시적으로 X, Y, Z interface를 구현하고 있지 않기 때문에 X, Y, Z pointer로 A 객체를 지칭할 수 없다. 하지만 암시적으로라도, 동일한 함수 signature…

  • ClassLoader를 사용하여 Resource Stream 얻기

    June 10, 2012

    class 파일이 있는 위치와 resource가 같다면 위처럼 간단히 getClass().getResourceAsStream()으로 읽어올 수 있고, 그렇지 않다면 URL을 적절히 활용해서 읽어올 수 있다.

  • java annotation과 reflection을 사용한 xml mapping

    May 31, 2012

    마침 요즘 spring을 쓰면서 자바를 공부한다는 친구를 채팅방에서 만나게 되어 reflection과 annotation을 사용한 xml mapping에 대한 코드를 작성해보라고 이야기하였다. 그 친구가 언급한 DI와는 좀 다른 방향이지만, annotation을 사용한 metadata 사용과 reflection을 통한 설계적 유연성을 공부해보면 spring framework…

  • java의 FutureTask를 사용한 간단한 수행 대기

    May 28, 2012

    어떤 작업에 timeout을 주고 실행하고 싶은 경우가 있다. 예를 들어 web crawler를 만들 때에는 해당 페이지에 대한 응답이 10초정도 없을 경우에 그냥 그 페이지를 읽지 않도록 예외처리 하는 것이다. 이 글에서는 ExecutorService와 FutureTask를 사용하여 timeout 처리를 하는 간단한 예제를 소개한다. ExecutorService는 java 1.5 때 Doug Lea…

  • EventHandler와 Message Passing

    December 20, 2011

    객체(object)는 상태(state)를 갖고 외부의 조작(mutator)에 의해서 변경될 수 있다. 이러한 객체를 다루는 프로그래밍을 할 때는, 관찰자(observer)가 객체의 상태 변화(property change)를 감지하여 어떠한 동작(action)을 수행하는 경우가 많이 있다. 이러한 코드를 작성할 경우, 관찰 당하는 객체(subject)와 관찰자(observer…

  • 간단한 Message 체계 구현 (Java)

    November 27, 2011

    본 글을 객체 간의 메시지 통신이 아니라 모듈 간의 메시지 통신에 대해 다룬다. 즉, 특정 대상 객체를 지정하여 메시지를 보내는 내용이 아니라 전역 MessageQueue에 대해 어떤 Message를 수신할지를 등록하는 Handler 객체에 대한 내용이다. MessageQueue는 전역 객체이다. Message를 받아서 이를 수신 Handler 객체에게 전달한다. 여러 Thread에서 접근할 수 있으므로 Concurrent…

  • 자바로 만드는 비행기 게임 4

    November 13, 2011

    이번과 다음은 코드 정리를 해보자. 이전까지의 비행기 게임 코드는 너무 하나의 class 에서 다 처리하는 방식으로, 뭐 하나 수정하기도 좋지 못한 구조였다 (물론 코드 전체가 별로 안 기니까 크게 상관없겠지만) 예를 들어 적기의 종류를 새로 추가한다던가, 총알의 종류를 새로 추가한다던가 하는 것이 쉽지 않은 코드였다. 따라서 이번에는 간단하게 코드를 묶으면서 정리를 해보자. resource…

  • 자바로 만드는 비행기 게임 3

    November 06, 2011

    이번에는 적기의 등장과 충돌검사를 해보자. 적기는, y=0에서 등장해서 y=height까지 진행한다. 즉, 화면 위쪽에서 아래쪽으로 일직선으로 진행하도록 하자. 그러면 진행하는 y 값은 항상 동일할테니까(0 -> height) 시작과 끝 x 값을 random으로 뽑으면 된다. 적기의 속도를 다양하게 한다고 한다면 원래 속도를 랜덤하게 구해서 그만큼씩 이동하게 하겠지만, 그렇게 계산해주기 귀찮으니까 등장 시간을 랜덤하게 뽑고(…

  • Java와 Getter/Setter

    October 03, 2011

  • 자바로 만드는 비행기 게임 2

    September 22, 2011

    노란색 타원 대신 비행기 이미지를 제대로 띄워보자. 자바에서 이미지를 읽는 것은 간단하다. AWT에서 제공해주는 Toolkit의 helper function인 getImage 함수를 통해 이미지 객체를 얻을 수 있다. (물론 player.gif 는 프로젝트 안에 들어있어야 한다.) 그럼 이제 그리는 방법을 알아보자. 그림을 그리는 것도 당연하지만, Graphics 객체가 존재하는 paintComponent…

  • 자바로 만드는 비행기 게임 1

    September 21, 2011

    본 글타래에서는 자바를 사용하여 간단한 비행기 게임을 만드는 과정을 서술해볼까 한다. 원활한 자바 프로그래밍을 위해서, JDK와 Eclipse가 설치되어있어야 한다. 이에 대한 자세한 설명은 생략하고, 멋들어진 이름으로 프로젝트를 하나 만들어보자. 예전에 제출했던 이름을 따와서 타티을(Tatieul)이라는 이름으로 class를 하나 만들었다. 간단한 슈팅 게임을 만들어보자. 비행기 같은게 나와서, (Graphics…

  • Java에서 LayoutManager로 인해 width가 뜻대로 안될 때

    May 15, 2011

    Java의 LayoutManager는 유연한 component 배치를 위해 parent component의 width에 딱 맞춰서 자식 control을 배치해주는 작업을 수행한다. 그러다보니 자식의 가로 길이를 고정으로 하고 싶은 경우에도 그 크기가 변경되어서 문제가 생기는 경우가 있다. 여러 개의 출력 Pane이 하나의 Container Pane 안에 들어갈 때, Container Pane은 ScrollPane…

  • java annotation을 사용한 InstanceId 구현

    March 02, 2011

    Java에서 생성하는 Object마다 InstanceId를 부여하는 방법에 대해 고민해보고 코드를 작성해보자. Index 발급 Group 관련해서 파일을 하나 작성하여 IndexGeneratingManager를 구성해서 발급해도 되고, 아니면 발급 받는 시점을 적절히 조절하거나 발급 함수의 인자로 Group할 Class 정보를 넣어줘도 되겠다. 하지만 본 글에서는 Java 1.5부터 추가된 Annotation…

  • JPanel 상속

    February 15, 2011

    Java에서 UI 코드를 작성할 때, 가장 많이 하는 코딩 방식이 UI Pane class를 만들고 이 class가 JPanel을 상속받는 것이다. 하지만 생각해보면 그 class는 전혀 JPanel을 상속받을 필요가 없고 그냥 JPanel 객체를 멤버 변수로 하나 만들어서 contain pane으로 사용해도 된다. 그러면 그 class는 정확히 controller 역할을 수행할 것이고(event handling…

  • Synchronize object via HTTP

    October 31, 2010

    http 기반으로 object를 server와 주고 받아 database와 연동, persistence를 구현한 대충만든 라이브러리이다. 소스 코드는 https://github.com/lacti/hso에 올려두었다. db.php는 코드 파일을 잃어버렸다(…) 아마 mysql 접속 함수와 id/pw 정도가 들어있던 같다. 귀찮아서 정리는 안했음 … serialize / deserialize 되는 debugging message…

  • 자바 네트워크 프로그래밍 1 - 기초

    May 01, 2010

    네트워크라는 것에 대해 깊게 설명할 생각은 없다. 단지 자바 언어에서 어떻게 네트워크 프로그래밍을 할 수 있을까 정도에 대해 간략하게 소개할 생각이다. 이 글을 보고 관심을 조금만 갖고 구글링해보시면 당연한 이야기이지만 훨씬 잘 설명된 좋은 글이 많을테니, 이 글에서 단순히 흥미유도 차원 글을 쓴다. 기초 네트워크 프로그래밍은 두 원격지(HOST…

  • 자바 네트워크 프로그래밍 2 - Socket

    May 01, 2010

    자바 네트워크 프로그래밍을 설명하려면 당연히 IO부터 이야기해야하는 것이 맞겠지만 이왕 저지른거 막장으로 달려보자. Socket 전 글에서 네트워크 통신을 사람 간의 전화로 비유했었다. 네트워크 통신을 한다는 것은 NIC(Network Interface Controller…

  • Java ObjectStream의 Input/Ouput Blocking이야기

    April 29, 2010

    Java의 ObjectInputStream / ObjectOutputStream을 사용하여 데이터 통신을 할 때 Client와 Server 양측에서 ObjectInputStream을 먼저 생성하면 프로그램이 더이상 진행되지 않는 경우가 있는데, 그 이유는 다음과 같다. ObjectInputStream의 ctor 코드를 보면 아래와 같이 readStreamHeader(); 함수를 호출한다. readStreamHeader…

  • HashSet과 ArrayList

    March 20, 2010

    시간이 없으니 일단 짧게. 어떤 equals, hashCode가 구현된 Entity object를 HashSet에 추가한 뒤, 그 object에 대한 reference 변수를 사용하여 저 두 함수의 결과에 영향을 주는 field 값을 변경할 경우, HashSet은 contains가 false를 반환하는 반면, ArrayList는 contains에서 true를 반환함. ArrayList는 전체 대상에 대해 equals…

  • java remotelib 개발

    February 17, 2010

    심심한 상황에서 뭘 코딩할까 고민중에 java rmi app를 만들다가 고생한 기억이 있어서 이걸 좀 쉽게 사용할 수 있는 remote lib를 만들어보자는 생각에 시작하였다. 개발 목표 기존의 java rmi와 유사한 code로 remote method interface call을 구현할 수 있어야하고, 쌍방통신이 쉽게 가능했으면 한다. ※ rmi…

  • 꽤 쓸만한 Java Decompiler

    February 07, 2010

    JD 역시 구글 검색순위 1순위는 다르다!

  • 개발중인 Remote Library 중간보고

    February 04, 2010

    PHP의 __call method는 해당 object의 member를 호출했을 때, 그 member가 not implement 상태이면 __call method로 method name과 arguments를 넘겨주는 그런 신비한 method이다. 예외처리도 아니고 없는 method에 대해 해당 method 호출 정보를 넘겨받을 수 있는 함수라니! 이건 진정한 proxy class를 제작하기 위한 필수 method…

  • Java Graphics와 AffineTransform, 그리고 JScrollPane

    January 04, 2009

    예전에 디비랩 알바를 할 때, 어떤 이미지에 대해 확대, 축소, 이동을 해야할 일이 생겼다. MouseEvent 처리 시 좌표 계산 등, 몇 가지 계산을 해서 Image를 확대, 축소, 이동해서 볼 수 있도록 하였다. Applepie(YPE…

  • Java Swing을 한다면 1

    January 03, 2009

    Java Swing에 대해 어떻게 GUI를 배워나가는 지에 대한 이야기를 해보고 싶었다. 물론 어느 순서가 바른 순서인지는 나도 모르고, 단지 내가 해온 순서는 이렇다는 이야기를 해보고 싶어서 글을 쓴다. Basic GUI Java Basic GUI는 창을 띄우고 Button을 띄우고, Text를 입력받는 등의 간단한 UI 코딩이다. Model, Editor, Renderer의 개념을 몰라도 괜찮고, NetBeans…

  • Java의 equals의 세계

    August 31, 2008

    boxing/unboxing이 지원되는 Java 5 이후부터 숫자형 Wrapper Class 객체에 대해 equals와 == 연산자는 과연 어떻게 동작할 것인가 class 주제에 primitives라고 이야기하는 String class의 equals와 == 연산자는 과연 어떻게 동작할 것인가 그리고, 만약 위의 객체들이 Vector<Object>에 들어가서 Object로 pointing될 때, equals…

  • ConsoleHandler와 System.in/out/error의 closing

    July 28, 2008

    java.util.logging의 Logger 쓰는 맛을 들이고 있는데 어느 순간부터 Exception이 나오지를 않는 것이다. 찾아보니까 알게 된 사실 Exception이 빨간 글씨로 나오는게 싫어서 ConsoleHandler의 OutputStream을 System.out으로 설정하려고 했다. 근데 이상하게도 setOutputStream이 protected이더라. 그래서 당당히 ConsoleHandler…