에너미 앳 더 헬 게이트

아놔.... 너무 적절한 표현으로 웃음이 나긴하는데...
마지막 컷에 보이는 나뒹구는 시체 중 하나인 내 심정은..

내가 웃는게 웃는게 아니야..

사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지

이미지 출처 : DC 주식갤러리

2008/11/26 21:44 2008/11/26 21:44
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

넷빈즈 6.5 출시 (NetBeans 6.5 released)

주말사이 넷빈즈 6.5 버전이 출시되었습니다.
넷빈즈 릴리즈 페이지에서 이야기하고 있는 6.5버전 하이라이트는 아래와 같습니다.
자바 이외의 언어 지원 강화에 역점을 둔 느낌입니다.
아래 소개하고있는 기능들과 더불어 넷빈즈 6.5에서 지원하는 모든 기능 목록은
http://www.netbeans.org/features/all.html 에서 확인하실 수 있습니다.

NetBeans 6.5 download : http://www.netbeans.org/downloads/index.html

Feature Highlights

PHP

  • PHP Editor (Code completion, syntactic and semantic code highlighting)
  • Support for heredoc notation and PHTML
  • Debugging using Xdebug
  • Generators for MySQL database code snippets
PHP Code Completion

JavaScript and Ajax

  • JavaScript Debugging on FireFox & Internet Explorer
  • HTTP transaction monitoring
  • Improved JavaScript and CSS Editor
  • JavaScript Library Manager incl Yahoo UI, Woodstock, jQuery, Dojo, Scriptaculous, Prototype libraries
JavaScript quickfixes popup in the editor

Java EE & Web Development

  • Enhanced support for Spring, Hibernate, JSF, JSF CRUD generator, JPA (Java Persistence API)
  • Create RESTful web services from database tables or from JPA entities
  • Drag and drop SaaS services into PHP files
  • SQL Editor Improvements (code completion, save/recall queries, and more)
  • Improved Eclipse project import and synchronization for Java Web projects
  • Automatic Deploy on Save
web application persistence

JavaFX

  • Create, test, debug, profile, and deploy JavaFX projects
  • JavaFX editor with syntax highlighting, source navigation, code completion, code folding, javadoc pop-ups, and error detection.
  • Live preview of visual elements
  • Code snippet palette for transformations, effects and animations
javafx video cube

Groovy and Grails

  • Develop pure Groovy apps or use Groovy in Java SE projects
  • Groovy editor with code completion, highlighting, and more
  • Grails web application framework
  • Open existing Grails applications without adding metadata
Groovy code editor

Ruby and Rails

  • New Test Runner interface for displaying test results
  • Rake improvements: Rake Runner and a pre-generated Rake file
  • Debugger: Conditional breakpoints and catchpoints
  • Ruby projects accept JVM options from command line
Ruby code editor

GlassFish v3 Prelude for Web Development

  • Modular, OSGi based architecture
  • Small footprint, fast startup and deployment
  • Support for scripting, including JRuby
glassfish app server

C/C++

  • Improved code completion, error highlighting, and semantic highlighting
  • Call graph, Memory window
  • Remote development
  • Packaging of application as tar files, zip files, or SVR4 packages
Call graph

Java ME

  • New project wizard for adding custom components to the Visual Designer Palette
  • New SVG UI components in the enhanced SVG Composer enable rich UI design
  • New Data Binding Custom Components in the Visual Designer Palette
  • Upgraded obfuscation tool to ProGuard 4.2 and test framework to JMUnit 1.1.0
Java ME SVG palette

Java Debugger

  • New multi-threaded debugging with improved UI and work-flow
  • Smart Step Into with method selection right inside expression
  • Deadlock detection with visual indication
swing treemodel view editor

Java SE

  • Automatic Compile on Save
  • Improved Eclipse project import and synchronization
  • Java Call Hierarchy
  • Analyze Javadoc
  • Swing GUI Builder can generate simple or fully qualified class names
swing treemodel view editor

IDE Tools and Usability

  • CamelCase code completion
  • Customize formatting settings per project
  • One IDE-wide QuickSearch shortcut for files/symbols/types, IDE actions, options, and docs
  • Support for Windows UNC paths (shared network folders)
netbeans ide quicksearch



2008/11/23 03:28 2008/11/23 03:28
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다
  1. 2008/11/27 02:46
    드디어 NetBeans 6.5 정식 릴리즈 Tracked from Alchemize Your Self

객체 지향론자를 위한 함수 프로그래밍(Functional programming)


어제 포스팅한 Java 개발자 입장에서 바라본 .Net의 Delegate란 글에 daybreaker님께서 주신 댓글을 통하여
함수형 프로그래밍을 다시 한번 생각해볼 기회를 가질 수 있었습니다.

자바스크립트, php등이 단순 '스크립트 언어'라는 오명을 떨쳐내기위해 OO적 개념을 받아들이고있는 것과는
대조적으로 기존 OO언어들이 옜 언어들이 가지고 있던 함수형 프로그래밍 기법을 수용하고 있는게 재미있네요.

자바 개발자가 함수형 프로그래밍의 맛을 느껴볼 만 한 aticle이 있어 링크 걸어 봅니다.
함수 프로그래밍 기술을 사용하여 고급 JavaScript 작성하기
객체 지향론자를 위한 함수 프로그래밍 (IBM Developer Works)
자바를 이용한 함수 프로그래밍(Functional programming)

덧. .Net Framework의 클래스 인스턴스에 메소드 붙이기 기능도 참 당황스러웠는데,
이건 다음 기회에 이야기해 보도록 하겠습니다.

2008/11/19 17:32 2008/11/19 17:32
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다
  1. 2010/07/28 11:58
    [소프트웨어공학] 객체지향이란? 객체지향 정리 (OO - Object Oriented Summary) Tracked from 월풍도원(月風道院) - Delight on the Simple Life.

Java 개발자 입장에서 바라본 .Net의 Delegate


지난 수년간 JAVA로 개발을 해 오다 작년부터 필요에의해 MS의 .Net Framework와 C#으로 프로젝트를 진행하고 있다.

.Net Framework와 C#이란 언어를 다루면서 처음으로 접한 문화 충격이라면 Property와 Delegate일 거다.
MS진영 개발자라면 당연한것으로 받아들이고 있을 두 개념을 처음 접했을때의 신선함이란!

자바 개발자들을 위해 간략하게 첨언하면
.Net에서 이야기하는 Property란 java 세상에서는 쉽게말해 getter와 setter에 해당하는데 요걸 코드로 표현하는 방법이 재미있다.
(물론 이 property란게 코드의 표현이 재미있다의 수준에서 그치는 건 절대 아니다.)
그리고 .Net에서 이야기하는 Delegate는 메소드 레퍼런스의 OOP적인 Wrapper이다.
이 Delegate란게 Java언어에서도 구현은 할 수 있지만 .Net에서와 같은 우아한 코드로 표현되진 않는다.
( Java는 OOP 개념으로 접근하여 교과서스럽게 코드로 표현하기 때문일거다..
여튼 Java에서는 없는 개념이라고 맘편히 생각해도 되겠다. )

뭐? '메소드 레퍼런스의 OOP적인..'이 어쨌다고? 문자로 표현하니 뭘 이야기하는 건지 금방 못알아듣겠지만 개념이 그렇다.
(C의 표현을 빌자면 '함수의 포인터' 정도로 불릴 수 있겠다.) 나 역시 코드를보고서야 위 말의 의미를 알 수 있었으니까..

풀어 말하자면 클래스 인스턴스의 레퍼런스를 다른 클래스 인스턴스의 메소드에 전달하는것과 마찬가지로
메소드의 레퍼런스를 객체 다루듯이 다른 클래스 인스턴스의 메소드에 전달하는것이 가능하다.
놀랍지 않은가? 메소드를 객체처럼 주고 받을 수 있다니!!

이게 사용하다보면 은근히 편하다. Java 세상에선 Callback을 받기위해 자신의 레퍼런스를 넘겨야 가능할 일을
.Net에서는 Callback 메소드를 싼 클래스를 넘겨 버리면 그만이니...

확실히 최근에 나온 언어일수록 개발의 편의성이 높긴하다. Java에도 조금 유연성을 발휘하여 이런 개념을 도입하면 어떨까?
[상업적으로 가장 성공한 OOP언어가 Java가 아니던가. Java에 Generic 개념이 도입되었을때도 자바스럽지
않다며 유난을 떠는 사람들도 많았으니 .net의 delegate 개념을 언어 차원에서 지원한다면 이건 더이상 java가 아니다며
너스레를 떠는 사람이 넘쳐날지도.. ]

2008/11/18 22:42 2008/11/18 22:42
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다
  1. 결국 그 delegate가 Python 언어의 람다 함수나 Javascript의 익명 함수와 같은 역할을 하죠. 원래 Lisp 같은 함수형 프로그래밍 언어 쪽에서 나온 개념인데 이게 은근 편리(?)하다보니 요즘은 원래 함수형 언어가 아닌 언어에서도 많이 지원하는 추세인 것 같습니다.

  2. Blog Icon
    서비

    예 daybreaker님께서 주신 말씀대로입니다.
    본질을 이해하고나면 표현하는 방법이 무슨 대수겠습니까만은..
    이게 시작을 대중적인 OOP언어로 한 저같은 사람은 생소한 코드
    표기방법과 쓰임에 당황+놀라움을 동시에 경험하기도 한답니다.. ^^

  3. Blog Icon

    자바보다 먼저나온 Delphi 에도 있는기능인데요....

  4. Blog Icon
    김코더

    기능은 앞으로도 나올언어들거 개발되어 배포되는것도 수두룩합니다
    적용시점이 관건이지..

에바 초호기와 싱크로 수치?

블로그 돌아다니다 발견한 재미있는 사이트.
이름하야 'Name All' 사이트명은 영문을 소리나는데로 읽은 '나메아루'
http://nameall.cosotto.com/eva/
이름을 입력하고 확인하면 독특하게도 에바와의 싱크로 수치를 보여준다..
수치에 따라 에바의 동작과 그림 하단의 대사가 달라지는데..

사이트엔 에바 말고도 이름으로 즐길 수 있는 악세사리가 꽤나 있다.

재미삼아 본명을 집어넣어봤더니 싱크로율이 무려 215.6% O.O;;;
나 이제 에바에 타기만 하면 되는겨?

오오옷!! 폭주하는구나.

미사토:저게 에바의 진정한 모습.

2008/11/16 04:00 2008/11/16 04:00
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다
  1. 싱크로율이 너무 높으면 녹아서 LCL용액이 되버립니다. -_-

  2. Blog Icon
    서비

    사이트 하단에 간략하게 제작에피소드가 적혀있던데 흥미롭게 읽었습니다.
    애니에서는 싱크로율이 400% 정도 되었을때 녹는걸로 되어있었다고 하는군요.
    제 수치는 저는 아마 의식을 잃은 상태이고 에바가 제멋대로 폭주한 상황이겠네요. ^^;

WebRowSet 을 이용한 JDBC 활용하기 4부

ResultSet 가공하기


WebRowSet 클래스의 deleteRow() 메소드를 이용하여 특정 row의 데이터를 삭제할 수 있습니다.
비슷한 방법으로 특정 row의 값을 업데이트 하거나 이동할 수 있습니다.

코드 조각을 보면서 이야기 해 볼까요.
[code]
... ... ...
ResultSet rs =  stmt.executeQuery("select * from student ");
WebRowSet wrs = new WebRowSetImpl();
wrs.populate(rs);
wrs.absolute(1); //첫번째 row로 커서를 옮깁니다.
wrs.deleteRow(); //커서가 위치한 row를 삭제합니다.
wrs.absolute(2); //두번째 row로 커서를 옮깁니다.
wrs.updateInt(4,20);//커서가 위치한 row의 4번째 컬럼 값을 20으로 변경합니다.
... ... ...
[/code]
코드의 처음 세줄은 ResultSet으로부터 WebRowSet을 만들어내고 있으며, 다음 두줄은 ResultSet의 데이터에서
첫번째 Row를 삭제하고 있습니다. 마지막 두줄은 두번째 Row의 4번째 Column값을 20으로 변경하고 있습니다.

위와같은 처리를 거친 결과의 data eliment는 아래와 같습니다.
[code]
 <data>
   <deleteRow>
     <columnValue>200</columnValue>
     <columnValue>Jack</columnValue>
     <columnValue>Dakota</columnValue>
     <columnValue>21</columnValue>
   </deleteRow>
   <currentRow>
     <columnValue>100</columnValue>
     <columnValue>John</columnValue>
     <columnValue>Doe</columnValue>
     <columnValue>26</columnValue>
     <updateRow>20</updateRow>
   </currentRow>
 </data>
[/code]
xml의 결과를 보면 첫번째 row에 대해 <deleteRow> 태그를 이용하여 삭제된 row임을 표시하고
두번째 row에서 <updateRow> 태그를 이용하여 4번째 column이 26에서 20으로 업데이트 되었음을
나타내고 있습니다.



변경사항 Commit 하기


위에 살펴본 과정은 단지 ResultSet의 데이타를 가공했을 뿐으로 commit을 수행하기 전까지는
database에 변경된 값들이 반영되지 않습니다.
변경된 데이터를 database에 적용하기 위해 acceptChanges() 메소드를 이용할 수 있습니다.
[code]
... ... ...
wrs.acceptChanges();
... ... ...
[/code]


다음편에 계속..
2008/11/16 02:22 2008/11/16 02:22
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

SCJP 5.0 인증 시험 시뮬레이터


내가 SCJP (Sun Certified Java Programmer) 시험을 치른 게 2003년이었고 그때는 JDK 1.3을 기준으로 시험을 치렀다..
지금은 JDK 5.0 기준으로 시험을 치를 텐데 SCJP시험 시뮬레이터도 있네?
하긴 뭐  시험관련된 별별 에뮬레이터나 시뮬레이터가 존재하는데.. SCJP라고 별수 있겠어?
워낙 덤프가 판을 치는 나라이고 보니 외국 인증시험을(그것도 낮은 급의) 패스한다고 해서 본인에게
큰 이득이 있는 것도 아니다만...

심심풀이로 라도 자신의 자바 기본기를 확인해 보고 싶은 사람에게라면 도움이 되지 않을까?
시뮬레이터를 배포하는 사이트에서는, 완전 무료에 실제 시험 환경이랑 완전히 똑같은, 이 시뮬레이터를
pass 한다면 실제 시험의 pass를 100% 보증한다고 하니  관심 있는 분들은 한번 들러보자.  

배포 사이트 : http://www.examlab.tk/
SCExamLab.exe

SCJP 5.0 시험 시뮬레이터

2008/11/12 10:50 2008/11/12 10:50
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

Mercury5 리더와 Texas Instruments 칩의 태그 궁합?!

Mercury5 리더기와 TI 社 제조의 rfid 태그간의 궁합문제가 있단다.

0,1의 전기 신호로 움직이는 하드웨어 세상에는 전기의 위상차이나 타이밍 등 다양한 이유로 부품간, 혹은 컴포넌트 간에 미묘한 궁합이 있다는건 익히 알고 있었지만, 이런 식으로 생각지도 못한 곳에서 이 '궁합'이란 문제와 마딱트리릴 줄이야!

요 며칠간 일전에 회사에서 제작한 RFID미들웨어와 ALE의 코드 개선 작업을 진행했다.
Mercury5 리더기와 TI 제조의 태그를 테스트 장비로 이용하였는데.. Smoothing Filter의 Window Size를 4000 msec까지 올려도 tag out 이벤트가 발생하는게 아닌가.. (이 때는 솔직히 리더 성능을 탓했다... ) 도대체 윈도우 사이즈를 몇 초나 올려줘야 데이터가 안 튄단 말인가!!

미들웨어 제작을 발주했던 회사의 담당 과장을 옆에 모시고 시연을 해 보이며 이런 현상이 발생하는 상황을 인지시켜드린 다음 날, 담당 과장이 머큐리5 리더 개발자 메뉴얼에서 조차 보지 못한 (없었다고 확신은 할 수 없다.. 내가 놓친 부분일수도 있으니까..) 희한한 명령어 두 줄을 건네시며 이 명령어를 리더에 적용한 후 다시 한번 테스트를 부탁하시는거다. TI칩과 궁합에 문제가 있으니 요 명령어 먹이면 좀 나아질거란 말씀과 함께..

다시 한 번 테스트... 결과는?
속된말로 '후덜덜'할 정도로 데이터가 양호하게 올라온다..
대체 하드웨어 제조가 아니면 모를 이런 tweak 정보는 어디서 얻는 거냔 말이다. 메뉴얼을 다시 보면 보일까?
여튼 담당 과장 덕분에 개선한 코드가 너무나 잘~ 움직여주고 있다는거 확인거 정도로 긍지를 가져도 괜찮겠지.

2008/11/12 00:41 2008/11/12 00:41
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

WebRowSet 을 이용한 JDBC 활용하기 3부

ResultSet 출력하기


자. 이제 위의 예제코드의 ResultSet을 XML데이터로 변형 해 봅시다.
이를 위해 com.sun.rowset.WebRowSetImple 클래스를 이용할 수 있습니다.
위 예제 코드에 몇 라인의 코드를 추가함으로써 result set을 XML 파일로 출력 할 수 있습니다.

[code]
... ... ...
ResultSet rs =  stmt.executeQuery("select * from student");
WebRowSet wrs = new WebRowSetImpl();
wrs.populate(rs);
try {
  wrs.writeXml(
  new FileOutputStream("student.xml"));
} catch (FileNotFoundException e) {
  e.printStackTrace();
} catch (IOException e) {
  e.printStackTrace();
}
... ... ...
[/code]

wrs.writeXML()의 출력형태는 WebRowSet scheme definition. 의 형태를 따르며
출력은 properties, metadata, data의 세 부분으로 구분 되어집니다.
일반적인 출력 레이아웃은 다음과 같습니다.

[code]
<?xml version="1.0"?>
<webRowSet xmlns= "http://java.sun.com/xml/ns/jdbc"
           xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation= "http://java.sun.com/xml/ns/jdbc 
           http://java.sun.com/xml/ns/jdbc/webrowset.xsd">
 <properties>
       ... ... ...
 </properties>
 <metadata>
       ... ... ...
 </metadata>
 <data>
       ... ... ...
</data>
</webRowSet>
[/code]

<properties> 태그는 provider( isolation leve, RowSet type 등)를 의미 합니다. <metadata> 태그는 해당 데이타베이스의 테이블의 갯수, 이름, 컬럼타입 등을 나타내며, 마지막으로 <data> 태그는 해당 테이블의 실제 정보를 기술합니다.

[code]
 <data>
   <currentRow>
     <columnValue>200 < /columnValue>
     <columnValue>Jack</columnValue>
     <columnValue>Dakota</columnValue>
     <columnValue>21</columnValue>
   </currentRow>
   <currentRow>
     <columnValue>100</columnValue>
     <columnValue>John</columnValue>
     <columnValue>Doe</columnValue>
     <columnValue>26</columnValue>
   </currentRow>
 </data>
[/code]

위의 예에서 보이는 <currentRow> 태그는 WebRowSet의 각 Row에 저장되어있는 데이터를 나타냅니다. insert, update, delete같은 데이터 조작은 다음편에서 계속하겠습니다.

2008/11/11 13:03 2008/11/11 13:03
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

WebRowSet 을 이용한 JDBC 활용하기 2부

ResultSet 이용하기


아래에 이어질 예제는 JDK5.0과 Oracle 데이터베이스 10.2를 이용하여 진행하고 있음을 밝혀둡니다.

자.. 'student'라는 테이블에 아래와 같은 데이터를 갖는 간단한 데이터베이스가 있다고 합시다.

SQL> select * from student;

사용자 삽입 이미지






시작에 앞서, 위의 student 테이블을 가지고있는 데이터베이스에서 각 레코드를 조회하여 result set을 얻어오는
간단한 java 어플리케이션을 짜 보도록 합시다.

[code]
public class DatasourceConnector {
    public static void main(String[] args) {

        Connection con = null;
        OracleDataSource ds = null;

        try {

            ds = new OracleDataSource();
            ds.setUser("<dbuser>");
            ds.setPassword("<password>");
            ds.setURL("jdbc:oracle:thin:@localhost:1521:<sid>");

        } catch (SQLException e) {
            e.printStackTrace();
        }

        try {

            con = ds.getConnection();
            Statement stmt = con.createStatement();
            ResultSet rs = stmt.executeQuery("select * from student ");

            for (int j = 0; j < rs.getMetaData().getColumnCount(); j++) {
                System.out.print(
                    rs.getMetaData().
                    getColumnName(j + 1) + "\t");
            }

            while (rs.next()) {
                System.out.print("\n");
                for (int i = 0; i < rs.getMetaData().getColumnCount(); i++) {
                    System.out.print(rs.getString(i + 1) + "\t");
                }
            }

            rs.close();
            stmt.close();
            con.close();

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
[/code]

예제의 자바 클래스는 connection 인스턴스를 최기화 하고, 수행할 SQL문자열을 포함하는 statement 를 생성한 후
result set을 조회하는 아주 일반적인 JDBC 코딩 양식을 보여주고 있습니다. 위 코드를 DatasourceConnector.java란
이름으로 저장하고 컴파일, 실행을 하면

>javac DatasourceConnector.java
>java DatasourceConnector

아래와 같은 결과를 출력하게 됩니다.

ID    FNAME  LNAME   AGE
200  Jack      Dakota    21
100  John      Doe        26

다음편으로 ..

2008/11/09 14:30 2008/11/09 14:30
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

WebRowSet 을 이용한 JDBC 활용하기 1부

RDBMS는 Data 질의와 갱신에을 위해 가장 광범위하게 이용되는 영구 저장 메카니즘(persistance storage mechanism) 입니다. Java Database Connectivity (JDBC) 는 Java 프로그램이 RDBMS 상의 데이터를 SQL을 이용하여  조작할 수 있게끔 해주는 프레임워크의 API 모임입니다.

Java 프로그램에서 데이터베이스의 데이터를 조회하거나 갱신하는데는 일련의 순서가 있습니다.
첫째로, 프로그램은 접속하고자하는 DataBase에 커넥션이 맺어져야 합니다.
이 커넥션을 맺는데는 몇 가지 다른 방법이 있습니다.. 관습적인 방법으로는 벤더에서 제공하는 JDBC드라이버를 로딩한 후 java.sql.DriverManger 클래스의 getConnection() 메소드를 호출하는 방법이 있을수 있습니다.
또 다른 한가지 방법은 접속하고자하는 데이터베이스를 개발한 회사에서 제공해 주는 java.sql.Connection 인터페이스를 구현한 클래스를 이용하는 방법이 있을수 있고,  Java EE 컨테이너에서처럼 JNDI (Java Naming Direvtory Interface) lookup을 통해 커넥션을 맺는 방법도 있겠네요.
어느 방법을 이용하든 Java 프로그램은 java.sql.Connection 인터페이스를 이용하여 데이터베이스와 커넥션을 맺게됩니다.
둘째로, 위에서 얻어온 Connection 객체로부터 Query를 DataBase로 전송하기위한 java.sql.Statement 인터페이스를 생성합니다.
마지막으로 Statement의 실행 결과를 java.sql.ResultSet 인스턴스로 돌려 받습니다.

본 포스팅에서는 JDBC version 3.0을 지원하는 JDK version 5.0에서 새로이 등장한 WebRowSet을 이용하는 방법을 알아보겠습니다.  
JDBC 3.0은 데이터의 생성과 변형을 손쉽게 해 낼 수 있는 몇 가지 기능을 제공합니다.


WebRowSet 계층구조


본격적인 WebRowSet의 이야기에 앞서 WebRowSet 인터페이스의 상속 계층 구조를 먼저 살펴 보도록 하겠습니다.
WebRowSet Hierarchy

WebRowSet inheritance Hierarchy(출처:OnJava)


상속관계에서 Root는 java.aql.ResultSet 인터페이스 입니다. 이 인터페이스의 인스턴스는 데이터베이스가 해석할수 있는 query를 포함하는 java.sql.Statement 인스턴스를 실행함으로써 얻어지는 표 형식의 데이터입니다. 기본적으로 result set은 앞으로만 탐색할 수 있고 업데이트를 할 수 없습니다. default result set을 가지고는 임의의 위치에 있는 데이터를 다룰 수 없다는 말이 됩니다.

자. result set에 담아진 임의의 위치에 있는 테이터를 제어하려면 어떤 방법이 있을까요? result set으로 무엇을 하길 원하는지에 따라 달라집니다. 예를들어 JavaBeans component model을 지원하기위해서는 java.sql.ResultSet의 서브인터페이스인 javax.sql.RowSet 인터페이스를 이용할 필요가 있겠죠.

자바프로그램에서 데이타베이스를 액세스하는것은 꽤나 무거운 오퍼레이션이기 때문에 이런 경우 메모리에 올라와있는 데이타 캐시는 성능의 주요한 key factor가 되는데요. 메모리에 적재된 데이타를 이용하기위해서 javax.sql.RowSet의 서브인터페이스인 javax.sql.rowset.CachedRowSet을 이용할 수 있습니다.CachedRowSet인터페이스의 인스턴스는 원하는 데이터를 가져오기위해 항상 데이터 베이스에 접속하지 않고 이미 메모리 상에 올라온 데이터를 통하여 원하는 결과를 가져올 수있능 능력이 있습니다. 이에 더해  CachedRowSet은 스크롤, 데이터 변경이 가능하고, serializable 합니다. 또한 스프레드시트와 같은 표형식의 데이터 소스에도 잘 작동 합니다.

위에 기술한 모든 기능들과, 거기에 더해 result set의 출력을 XML로 한다든지 하는 기능이 필요하다면 javax.sql.rowset.WebRowSet이 적절한 해답일 수 있습니다. WebRowSet인터페이스에 대해 썬에서는 JDK 5.0에 이미 reference implementation클래스로 com.sun.rowset.WebRowSetImpl 클래스를 제공하고 있습니다.

javax.sql.rowset 패키지의 마지막 서브인터페이스인 javax.sql.rowset.JoinRowSet은 result set 내의 object를 대상으로 SQL JOIN문과 같은 조작을 수행 할 수 있는 기능을 제공합니다.

다음편으로 계속..

2008/11/09 13:59 2008/11/09 13:59
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

자아실현



"우린 아직 제대로 이룬 게 없잖아요. 무언가를 이루고 싶어 열심히 노력하지만
바라는 결과가 나올지 어떨지는 모르죠. 결과가 나오는 사람과 나오지 않는 사람의 차이가
어디에 있는 건지도 알 수가 없고."

식사가 나왔다.

"처음부터 '나는 뭔가가 되어야만 한다'는 생각을 하지 않고 살 수 있으면 편하겠어요.
하지만 이미 그렇게 될 수는 없겠죠. 우린 모두 뭔가가 되기 위해 노력해야 한다는 사실을
알고 있으니까, 눈을 떠 버렸으니까."

2008/11/08 20:59 2008/11/08 20:59
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

어렵네.. 어려워...


GUI 애플리케이션 개발.. 어렵네 어려워...
GUI 애플리케이션을 개발해 본 건 Swing 애플리케이션을, 그것도 NetBeans Platform 위에 구현해 본게
(Default Component로만..) 전부인 이력으로 WPF로 본격적인 GUI 애플리케이션을 개발하려니
여간 어려운 게 아니다. [아주 피똥을 싸고 있음.. >.< ]

누가 좀 Dependency Object랑 Dependency Property의 개념 좀 알려주셈..
OOP의 관점에서 접근하려니 이게 도대체 무슨 말을 하고 있는 건지... 쩝..

아래 링크를 통해 Dependency Property의 개념을 좀 장착할 수 있었음.
http://iamgsiwpf.tistory.com/21
http://www.hoons.kr/Board.aspx?Name=QAnet3&Mode=2&BoardIdx=9800


2008/11/07 18:53 2008/11/07 18:53
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

finalize 메소드의 오버라이딩을 자제해야 하는 이유.

모든 자바 클래스의 최상위 부모클래스인 java.lang.Object 클래스에는 finalize() 메소드가 존재하며, Java API 에는 이 메소드는 '가비지 컬렉터가 레퍼런스를 잃은 클래스의 인스턴스를 가비지 컬렉션할 때 호출된다' 라고 기술하고 있습니다.

이 메소드는 객체인스턴스가 가비지 콜렉션에 의해 소멸되는 시점에 특정한 동작을 수행해야 할때도 요긴하게 사용할 수 있는 메소드입니다만 일반적인 경우 불필요하게 이 finalize() 메소드를 오버라이딩하는 것은 자제해야합니다.

이유는 'finalize 메소드에 의한 Collection 지연과 OOME(Out of Memory Exception)발생 가능성'때문입니다.
특정 Class에 finalize 메소드가 정의되어 있는 경우, 이 Class Type의 Object는 Garbage Collection 발생시 즉각적으로 Collection 되지 않습니다. 대신 Finalization Queue에 들어간 후 Finalizer에 의해 정리가 되는데요. Finalizer는 Object의 finalize 메소드를 실행한 후 메모리 정리 작업을 수행하게됩니다.
만일 finalize 메소드를 수행하는데 오랜 시간이 걸린다면 그 만큼 객체가 오랫동안 메모리를 점유하게 되고 이로 인해 OOME가 발생할 확률이 높아집니다.
이런 이유로 finalize 메소드는 되도록 사용하지 말아야 합니다.

2008/11/06 11:08 2008/11/06 11:08
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다