'자바'에 해당되는 글 7건

  1. 2011/11/01 float와 double 타입..
  2. 2011/10/11 자바 스크립트의 원격 서버 접근 및 onLoad 이벤트 처리
  3. 2011/10/10 자바스크립트에서 form의 데이터를 문자열로 가져오기 (2)
  4. 2011/10/08 정규식을 활용해 Java에서 HTML 태그를 제거하는 소스 구현하기~
  5. 2007/10/11 루씬 인 액션(Lucene In Action) - 오픈소스 자바 검색엔진
  6. 2007/07/20 Effective Java - 자바 유창하게 말하기
  7. 2007/06/29 AIR, Silverlight, 그리고 Java FX Script..

float와 double 타입..

|


Effective Java란 책을 보면..

정확한 계산에 float이나 double 타입을 사용하지 말라고 나와 있습니다. 
java 프로그래밍에서 돈과 같이 중요한 계산에 float이나 double을 사용하면 원하는 값이 나오지 않는다는 것인데요..

예를 들어 1.03 달러에서 42센트를 사용했다면 61센트가 남아야겠죠..
그래서 다음과 같이 자바 프로그래밍으로 실행하면..

System.out.println(1.03 - .42);

---------- Execute ----------
0.6100000000000001

출력 완료 (0초 경과) - 정상 종료

원하지 않는 값이 나오게 된다고 하네요~~

float와 double이 과학과 공학 계산용으로 만들어서 매우 넓은 범위의 수에 대한 정확한 근사값을 빨리 계산하기 때문이라고 합니다.

그럼.. 무얼 사용해야 할까요? 
int, long 또는 BigDecimal을 사용하면 된다고 합니다. 

요 Effective Java란 책을 보면 괜찮은 내용이 많이 있습니다.
다만, 번역이 좀 매끄럽지 못해서 안타까움이 좀 있네요..

 
크리에이티브 커먼즈 라이선스
Creative Commons License


Trackback 0 And Comment 0

자바 스크립트의 원격 서버 접근 및 onLoad 이벤트 처리

|


제레미 키스가 쓴 방탄 Ajax라는 책에서 관련 자료를 가져왔습니다.

원격 서버 접근

보안상의 문제로 자바스크립트에서 다른 도메인의 자바스크립트를 접근하는 것은 기본적으로 안됩니다.
특히 Ajax와 같은 XMLHttpRequest를 통해서 접근하는 것은 불가능하죠..
즉, 다음과 같이 접근할 수는 없다는 겁니다.


XMLHttpRequest를 사용하는 방법으로는 기본적인 웹 API를 이용할 수 없다고 합니다. 
그런데 script를 이용하면 이런 보안상의 제약을 없앨 수 있다고 합니다. 
다음과 같이 다른 도메인에 있는 자바스크립트 파일을 읽어올 수 있기 때문이죠.


이런 형태로 요청할 수 있다면, JSON 파일도 요청할 수 있다고 합니다.
Ajax에서 XML, Text와 함께 리턴 타입으로 많이 사용하는 JSON은 기본적으로 javascript 구문이기 때문에 가능하다고 합니다.
그러나 원격 서버에서 JSON으로 결과를 리턴해 주지 않는다면 소용은 없겠죠.. 

어쨌든 이렇게 자바스크립트로 가져오려면 경우에 따라서 동적으로 새로운 script를 생성해야 할 필요도 있을 겁니다.
다음과 같이 처리하면 가능하다고 하네요



위 소스는 url을 자바스크립트로 head에 추가하는 함수입니다. 
그리 복잡하지는 않죠.. script라는 요소를 만들고, type이나 src와 같은 속성을 넣고, head 하위에 추가하는 겁니다.

하지만, 일반적인 웹서비스는 이런 형태로 구성되어 있지는 않죠... ^^ 
대부분은 자체의 서버에 요청을 하고, 해당 서버에서 원격 서버로 연결하는 프록시 방식을 많이 이용하고 있는 듯 합니다.
어쨌든 위와 같은 방식도 있구나 하고 보시면 될 것 같습니다.

onload 이벤트 처리

웹 프로그래밍을 하면서 이런 경험은 한번 쯤 있을 겁니다.
특정 함수를 head에 있는 자바스크립트에서 실행을 해야 하는데, 
그 함수내에 document.getElementsByTagName("a")과 같은 소스가 들어가 있는 경우, 
아직 페이지가 로드 되지 않아서 제대로 처리가 안되는 때가 있습니다.

로직 상에는 아무 문제가 없는데, 답답해지죠.. -.-
이런 경우, 보통 body 태그에 onload="함수"와 같이 사용하거나, 
html 소스의 맨 하단에 그와 같은 함수를 두어서 해결하기도 합니다. 

그런데 방탄 Ajax란 책에서 보면 body 태그에 넣는 것과 같이 스크립트 코드와 html 코드가 함께 있는 것은 바람직 하지 않다고 합니다.
prepareLinks라는 함수를 호출할 때 다음과 같은 형식으로 사용할 수 있다고 합니다. 


window.onload에 대해서는 이미 아시는 분들도 많겠지만, body 태그에 onload=""와 같은 것이죠
위 소스는 html 내의 앵커(a) 태그를 찾아서 설정된 href로 이동하지 않고, doSomething 함수를 수행하도록 바꾸는 겁니다.

그런데 이와 같이 사용할 경우, 단 하나의 함수만 지정할 수 있다고 합니다.
여러 개의 함수를 순차적으로 실행할 경우에는 다음과 같이 addLoadEvent 함수를 사용할 수 있다고 하네요..



음.. 꽤나 복잡해 보입니다. 익명함수를 많이 사용하는 듯 해요
테스트는 안해 봤지만, 잘 되겠죠..

오랜만에 책 좀 보다가 생각나서 정리해 봤습니다.
 
크리에이티브 커먼즈 라이선스
Creative Commons License


Trackback 0 And Comment 0

자바스크립트에서 form의 데이터를 문자열로 가져오기

|


자바스크립트에서 form의 데이터를 문자열로 가져오기

간단한 자바스크립트 팁에 대해서 설명하려고 합니다. 
Ajax를 활용하다 보면, Form안에 있는 데이터를 문자열로 모아서 처리해야 하는 종종 경우가 있습니다. 

즉, 폼 필드 내를 반복하면서 이름과 값을 추출해서 다음과 같은 형태로 리턴하는 거죠..

name=mini&title=xml&date=20080613

이런 문자열을 만들기 위한 함수를 먼저 하나 만들어 보겠습니다. 


간단한 형태죠.. 먼저 encodeURIComponent는 폼의 값을 정상적으로 서버에 전송하기 위해서 자바스크립트에서 제공하는 인코딩을 수행합니다. 
전송 중에 발생할 수 있는 데이터 손실을 피하기 위해 사용하는 거라고 생각하면 됩니다. 

그리고 나머지는 큰 무리 없이 이해가 될 겁니다. 
위의 문자열을 만들기 위해 =와 &로 연결해 주는 거니까요.. 


그런데 위 소스는 문제점이 두가지가 있습니다. 
첫번째는 문자열이 다음과 같이 마지막에 &로 끝나게 됩니다.

name=mini&title=xml&date=20080613&

서버에서 처리하는데 큰 문제는 없겠지만 아무래도 좀 꺼림직 하죠.. ^^
하지만 그것보다 더 큰 문제가 하나 더 있습니다.
자바스크립트는 클라이언트 환경에서 실행되는 프로그램입니다. 
즉, 클라이언트의 PC 상황에 따라 처리 속도가 결정되는 것이죠..
그런데 위처럼 문자열을 계속적으로 연결하게 되면 코드 실행 속도를 저하시키는 문제가 발생합니다. 

이런 문제를 해결하기 위해서 자바스크립트의 배열을 활용하면 됩니다.
그럼 최적화된 소스를 한번 살펴보시죠..


이렇게 함으로써 앞에서 이야기 한 두가지 문제를 모두 해결하게 됩니다. 
간단한 자바스크립트 팁이었습니다. 


아.. 위 소스를 테스트 해보시려면 다음 소스가지고 하시면 됩니다. 




크리에이티브 커먼즈 라이선스
Creative Commons License


Trackback 0 And Comment 2

정규식을 활용해 Java에서 HTML 태그를 제거하는 소스 구현하기~

|


HTML 태그를 제거하고 순수하게 텍스트만 가져오는 부분이 필요해서 관련  소스를 정리해봤습니다. 
정규식에 대해서는 개념은 들어보셨을 겁니다. 
 
나중에 기회가 되면 정규식에 대해서도 한번 정리해 보도록 하구요.. 
오늘은 간단하게 원하는 기능을 구현한 소스를 보여드리도록 하겠습니다.
 
정규식을 6개 정도 적용하고 있는 간단한 소스입니다.
각각 HTML의 스크립트 태그와 내용, 스타일 및 내용, 태그들, 엔터티, 공백문자들을 제거하는 정규식 표현입니다.



관심있는 분들은 한번씩 테스트 해보시기 바랍니다. ^^ 
예전에 URL을 지정하면 해당 텍스트를 분석해서 자동으로 태깅 정보를 제공하는 것을 개발할 때 사용한 부분입니다. ~


크리에이티브 커먼즈 라이선스
Creative Commons License


Trackback 0 And Comment 0

루씬 인 액션(Lucene In Action) - 오픈소스 자바 검색엔진

|


루씬 인 액션 - 10점
에릭 해쳐.오티스 고스포드네티츠 지음, 이문호 외 옮김/에이콘출판

프로젝트를 수행할 때마다 항상 고민이 되는 것이 바로 검색엔진이었던 것 같습니다.
상업용 검색엔진을 이용하면 비용이 발생하고, 그렇다고 DB 검색으로만 붙여놓기에는 늘어나는 정보의 양이 부담이 되었죠.. 아마 그때 루씬이라는 오픈소스를 알고 있었다면 한번쯤 적용해 보자고 했었을 수도 있었을 것 같네요. ^^

물론 이 책에도 잘 나와 있지만 한글에 대한 분석기가 완벽한 것이 없어서 실제 적용에는 많은 한계가 있을 겁니다. 하지만 많은 개발자들이 관심을 가진다면 이것도 머지 않아 해결되지 않을까 하네요~

책 자체로 보면 번역서라고 믿기지 않을 정도로 매끄럽게 되어 있습니다.
검색엔진에 대한 "색인", "쿼리(질의어)", "분석"등에 대한 설명이 잘 되어 있어, 저처럼 검색엔진에 대해 어렴풋이 알고있던 초보들에게도 매우 도움이 될 거예요.

1장에서 6장까지는 루씬의 기본적인 내용을 다루고 있습니다.
기본적으로 검색을 하기 위한 원문의 색인과
검색을 위한 쿼리(질의어) 파싱..
색인과 쿼리 파싱에 적용할 분석기들..
고급기능으로서 검색결과 정렬이나 필터들에 대한 설명이 나와 있으니 참고하시기 바랍니다.

소스와 함께 설명이 되어 있으니 자바 언어에 대한 기본적인 지식만 있다면 충분히 이해할 수 있을 겁니다.

7장은 재미있는 내용입니다. 루씬은 기본적으로 텍스트 문서만 색인하고 검색할 수 있는데요.
실제 검색에서는 PDF, HTML, MS-Word등 다양한 문서를 다룰 수 있어야 합니다.
7장에서 이런 문서들을 색인할 수 있는 방법에 대해 설명하고 있습니다.

꼭 검색엔진이 아니더라도 이런 부분은 다른 데서 유용하게 활용할 수 있을 것 같네요~

이어서 루씬의 확장기능이나 다른 언어로 포팅한 것들을 설명하고,
루씬의 적용 사례에 대해 이야기 하고 있습니다.

이 번역서에는 부록으로 루씬 한글 분석기에 대한 예제가 들어있습니다.
물론 한글 형태소분석 방식이 아니어서 약간 부족한 면이 있지만
이걸 확장해서 사용하려는 개발자 분도 있을 것이구..
기존의 한글 형태소분석기를 루씬에 적용하려는 개발자도 있을 겁니다.
(혹, 좋은 거 알고 계시면 추천좀.. ^^)

어쨌든 인터넷에서 성공한 기업들은 모두 검색엔진을 가지고 있습니다.
초기의 야후가 그랬고.. 네이버, 다음, 구글이 그랬죠..
인터넷 솔루션을 생각한다면 이런 검색엔진과 친해져야 하지 않을까 하네요~
루씬 인 액션을 통해서 이런 검색엔진을 조금 더 이해할 수 있는 계기가 될 것이라고 생각하네요^^
크리에이티브 커먼즈 라이선스
Creative Commons License


Trackback 0 And Comment 0

Effective Java - 자바 유창하게 말하기

|


Effective Java Programming Language Guide
조슈아 블로치 지음, 이해일 옮김/대웅미디어

 VC++ 위주의 프로그래밍을 하다가 자바를 시작한지는 몇년 되지 않았기 때문에..
기본적인 문법을 다루고, 시스템을 구축하기는 어렵지 않았지만
자바 언어 자체에 대한 이해는 부족했던 것이 사실입니다.

Effective Java란 책을 읽어 보면서 자바 언어에 대해 좀 더 이해하게 됐다는 느낌이 들었습니다.
솔직히 equals나 hashCode의 재정의 같은 부분은 클래스를 수없이 만들면서도 한번도 생각하지 못한 것이었거든요 -.-

다만, 아쉬웠던 점은 번역서들이 대부분 그렇듯이.. 난해한 번역투의 문장이 많은 것이죠 ^^
아마도 원서의 내용은 매우 좋았을 것 같은데~~ 영어가 부족하니.. 감안하고 보는 수 밖에요.

그럼 책 내용을 간략하게 정리해보도록 하겠습니다.

1. 객체를 생성하고 파괴하기

Static Factory MethodSingleton과 같은 것은 디자인 패턴에 대한 책을 잠시 볼 때도 나왔었기에 이해하기가 쉬웠고요..

쓸데없는 객체를 중복 생성하지 않는 문제.. 다음과 같이 하지 말라는 거죠~
String s = new String("바보");
경우에 따라 간과하기 쉬운 것 같았슴다~~

그리고 finalize()를 사용하지 말라는 것..
가비지 컬렉터가 객체를 파괴하기 전에 호출하지만, 문제는 언제 객체를 파괴할 지 모르기 때문에 호출되는 시점을 알 수 없다는 것이죠..
음... C++에서는 소멸자를 매우 유용하게 썼었는데.. 자바에서는 실제로 거의 못봤던 것이죠..

2. 모든 객체의 공통 메소드 구현하기

여기에서 equals()와 hasCode()의 재정의에 대해서 봤습니다.
toString()의 재정의는 실제로 많이 사용하기는 했지만,

equals()나 hasCode()를 직접 재정의해 본 적은 없었네요..
표준 구현계약을 지켜서 재정의 하면 된다고 나와 있구요~~

clone() 메소드는 신중하게 재정의하라고 되어 있네요..
재정의 자체보다는 각 공통 메소드가 하는 일들을 다시 한번 정리한 점이 괜찮았던 것 같네요~~

3. 클래스와 인터페이스

OOP를 하면 나오는 것이고.. 자바 프로그래밍을 하려면 필수적인 것이라.. 색다른 내용은 없구요.
다만, final을 이용한 불변 클래스 (immutable class)를 많이 쓰라고 하는 점이 기억에 남네요..


4. C 구문 바꾸기

C언어에서 사용하는 구조체, union, enum 구문을 자바로 어떻게 변경해야 하는지 나타내고 있습니다.

구조체는 클래스로..
union은 클래스인데.. 계층구조로 즉, 추상클래스와 extends를 이용해서 바꾸라고 되어 있네요..
열거형(enum)은 클래스로 바꾸는데.. 타입안전 열거(typesafe enum) 패턴을 사용하라고 하네요..

타입안전 열거 패턴은 처음 들어봤는데요.. 나름 유용한 것 같네요. 왜 필요한지는 설명이 잘 되어 있슴다.

5. 메소드

코딩 규칙.. 즉, 메소드의 시그니처나 문서화를 위한 주석 (javadoc 같은 거겠죠..)을 하라는 이야기가 있구요.

중요한 부분으로는 방어복사(defensive copy)라는 것이 나오는데요..
메소드 내에서 인자(argument)를 처리할 때..
1. 메소드 내 인자 확인
2. 메소드 내 인자를 가지고 처리 후 결과 리턴

위 과정 사이에.. 즉 1.5 정도에 사용자가 인자의 내용을 바꾸면.. 원하는 결과가 나오지 않을 수 있다는 것이죠~
매우 간발의 차로 이루어지는 경우겠지만, 프로그래밍에서는 고려해야 하는 부분이겠죠..
그러므로 1번을 하기 전에 인자를 내부적으로 복사하라는 것이 바로 방어복사라고 합니다.

또하나.. 메소드에서 배열을 결과로 리턴할 때, 값이 없을 경우 null을 리턴하는 경우가 있는데..
null보다는 길이가 0인 배열을 리턴하는 것이 호출한 곳에서 받아서 처리할 때 좋다고 되어 있네요.
(음.. 이부분은 이렇게 사용해 왔던 것 같은데.. 다시 염두해 두어야 겠네요)

6. 프로그래밍 일반

일반적으로 고려해야 하는 사항들이 잘 정리되어 있습니다.
라이브러리를 잘 활용해야 한다는 이야기도 있구요..
정확한 계산에 float이나 double을 사용하면 안된다는 이야기
객체에 대한 참조는 인터페이스로 해야 확장성이 좋다는 점도..
신중하게 최적화하라는 이야기도 있네요.. (요건 프로젝트 관리 부분에서 한번 다루려고 합니다. ㅋㅋ)

7. 예외처리, 쓰레드, 직렬화

예외를 어떻게 처리해야 하는지.. 잘 설명되어 있구요..
쓰레드에 대해서는 조심해야 하는 부분들에 대해 간단히 설명되어 있습니다.
마지막으로 자바에서 많이 사용하는 직렬화(serialize)에서 주의사항들도 정리되어 있네요..

휴.. 내용을 간단히 정리해 봤습니다.
다음에 책 내용이 뭐더라~~ 하지 않으려고 한번 써보네요.. ㅋㅋ

그럼.. 좋은 하루 되세요!!



크리에이티브 커먼즈 라이선스
Creative Commons License


Trackback 0 And Comment 0

AIR, Silverlight, 그리고 Java FX Script..

|


작년에 FLEX라는 것을 처음 접하고..
테스트 겸 이것 저것 만들어 봤었는데~ 벌써 늦은 기술이라니~
기술의 변화와 발전이 참 빠르다는 생각이 들었습니다.

그만큼 화려하고 빠르면서도 편리한 User Interface에 대한 사용자의 요구가 크기 때문에 Adobe, MS, Sun의 대기업들이 달려드는 것이겠죠.
프로그래머 입장에서 강건너 불구경만 할 수도 없고..
쩝~~ 시간 나는 대로 테스트 해봐야겠네요~~

1. AIR(Adobe Integrated Runtime)
음.. 거꾸로 하면 FLEX 때 한참 써먹었던 RIA가 되네요~
웹 어플리케이션을 웹브라우저가 아니라 데스크톱에서 직접 실행하겠다는 점이 큰 차이인 것 같습니다.
그렇게 함으로써 OS에 대한 독립성을 유지하겠다는 것인데요..

아쉬운 점은 FLEX 2가 나온지 얼마 안되는 시점에서 너무 빠른 업그레이드가 아닌가 하는 생각도 듭니다.

일단 제품발표에 대한 설명은 디지털타임즈의 기사를 참고하시면 될 것 같습니다.
어도비 'AIR 베타버전' 발표

AIR에 대한 데모를 볼 수 있는 어도비의 사이트는 다음과 같습니다.
데모 사이트
기본적으로 Adobe Air Runtime이란 것을 설치해야 합니다.

2. Silverlight
이번에 SEK 2007 MS 부스에도 나와있더군요..
솔직히 처음 봤을 때는 Flash와 차이가 별로 없어서.. 경쟁력에 좀 의심이 가기는 했습니다.
이번 전시에서 보면 동영상과 같은 미디어 부분에 대해서 경쟁력을 보여주려는 것 같았습니다~

하지만 독창성보다는 다른데서 만든걸 따라하면서도 고수익을 올리는 MS의 기존 모습을
그대로 보는 것 같다는 느낌은 지울 수가 없네요~~

이 실버라이트의 가능성에 대해서 나름대로 작성한 글이 있네요.. 참고하세요..
Silverlight의 가능성에 대한 생각

MS 관련 프로그래밍에 대한 부분은 역시 태오님이 아닐까 합니다.
태오님 사이트에도 실버라이트에 대한 글이 있는데요.. 그 시작 부분입니다.
Microsoft Silverlight (코드명 WPF/E)

3. Java FX Script
이번 글을 쓰면서 처음 들은 이야기라.. 솔직히 전혀 몰랐습니다.
(처음에는 나모 웹에디터 FX인줄 알았다는~~)
스크립팅 언어로서 클라이언트에서 돌아가는 GUI를 다루는 것 같습니다.

자바 FX 스크립트에 대한 기본적인 개념은 zdnet 뉴스를 참고하시면 될 것 같습니다.
자바, PC로의 귀환

그리고 자바 챔피언이라는 것이 있더군요.. 어쨌든 한국인 자바 챔피언의 자바 FX에 대한 설명 동영상입니다.



마지막으로 이 세가지에 대해 알게 된 것은 바로 떡이떡이님의 다음 글 때문이었네요..
포스트플래시 시대, 웹 개발 플랫폼 신 삼국지

떡이떡이님의 이 글도 참고하세요..
자바 FX 모바일 스마트폰 OS 맹주 노린다

휴~~ 이상입니다.
참.. 제가 FLEX로 최근에 만든 것은 RSS Reader입니다.
java와 연동해서 처리했는데요~ 혼자 쓰고 있는데. 나름 쓸만 하더라구요..
관심있는 분은 한번 써보세요..

http://rss.acronym.co.kr

테스트만 해보실 분은 test / 1234 로 들어와 보면 됩니다.

그럼.. 좋은 하루 되세요~~ From 미니





크리에이티브 커먼즈 라이선스
Creative Commons License


Trackback 1 And Comment 0
prev | 1 | next