반응형

부동소수점은 우리가 알고 있는 primitive type의 형중에서


산술연산에 있어서 각 언어마다 매번 혼돈을 일으키고 있는 요소이다.


이런 부동소숫점 연산의 문제점이 무엇인지 한번 적어보도록 하자.



(1) Javascript에서의 부동소수점 연산 오류

아래와 같은 코드가 있다고 가정하자, 출력물을 바로보도록 하자. 흠.. 에러의 원인은 나도 잘모르겠다.





위 코드의 결과화며은 아래와 같다.




위와 같이 출력되는 원인은 컴퓨터는 부동소숫점(float, double)에 대해서, 정확한 값을 리턴하지 못하고, 


리턴 하기 때문에 정확한 연산을 할 수 없다.


(2) Java 에서의 부동소수점 연산 오류

Java 에서도 (1)과 같이 부동소수점 오류가 발견된다. 아래 코드를 실행해 보도록 하자.

public class AA {

	public static void main(String argsp[]) {
		System.out.println(2.0 - 1.1);
	}
}

위 코드의 결과는 다음과 같다.



※ 그렇다면, Java 에서는 위 문제점을 해결하기 위해 어떻게 해야하는것인가?

    추후, 별도 Blog posting을 하겠지만, BigDecimal 을 사용하면 깔끔하게 해결이 된다.



위처럼.. 예상했던 결과와는 다른 결과가 출력됨을 확인할 수 있다. 만약에 ~ 통계페이지와 같이 소숫점 하나


하나가 매우 중요한 페이지의 결과물을 처리한다고 가정하였을때에는,, 어떻게 해야할까?


충분히 생각해 볼만한 문제인듯하다.



ps: 추가적으로 시간날때마다 타 언어에서 자료형의 산술연산의 오류를 찾아보도록 하자.



반응형
반응형

JQuery Plug-In (플러그인) 을 만드는 일련의 과정을 소개하면서, 실습을 통해 여러 사람들과 함께

내가 쌓은 지식을 공유해 보도록 하겠다.


우선!!! 알아야할 사항은 Plug-In(한국말: 플러그인) 이란 무엇이냐???


[1] Plug-In(플러그 인) 이란?


: 흔히들 가정에서 사용하는 가전제품을 예로 들어보자, 전기를 통하게 하기 위해서 우리의 어머니들은 

  가정용 콘덴서에 전기 플러그 라고 하는 놈을 꽃게 된다. 그렇게 하면 전기가 통하면서 가전제품이 작동

  하게 된다. 다만, 전기 뿐만 아니라, 다양한 모양의 플러그를 통해 기기장비들끼리 연결또한 가능하다.

  그렇게 연결함으로써 여러 기기 들을 하나의 기계처럼 함께 호환성을 이루는 구성도 가능하다 .

  아래 그림을 한번 볼까???


[출처 : 구글 이미지 검색]

  • 왼쪽의 그림을 보면 이해가 쉬울 것이다. 저렇게 생긴놈이 실생활의 플러그 인이다. 그렇다면,!! 컴퓨터 업계에서 이야기 하는 플러그 인이란 무엇인가?

  • Plug-In이란, "웹 브라우저의 일부로서 쉽게 설치되고 사용될 수 있는 프로그램을 말한다."

  • 즉, 왼쪽의 그림처럼 Web Application을 개발 할때, 플러그를 꽃았다 뻈다 하는 방식으로, 주변의 부수적인 프로그램들을 연동을 하는 방식을 말한다.

  • 이때, 플러그를 꽃는 것을 Plug In(꽃다) , 빼는 것을 Plug out(빼다) 라고 명칭하는 것이 맞는 것 같다.



















                                         [Plug -in의 이해를 돕기 위한 그림]


이제 이정도면 Plug-in이 뭐다~~ 라는 정도는 감을 잡았을 것이다. 다음으로 jQuery에서 Plug-in 

방식을 사용하는 예제를 보면서, 과연 Plug-in은 이렇게 쓰는 구나~ 하고 생각해 보기 바란다.


[2] 기존 Function 과 Plug - in의 차이점


Plug-in을 처음 사용하는 사람들은 Function 과 Plug-in의 차이점에 대해 혼돈을 하는 경향이 있다.

따라서, 이부분에 대해서 한번쯤 정리를 하고 넘어가는 것이 좋을 듯 하다. 우선 Function 과 PlugIn

방식을사용한 예제를 한번 보도록 하자.


(Function 을 사용 한 예제)

<script language="javascript"> $(document).ready(function(e){ alertFunction("This is function test"); }); alertFunction = function(msg){ alert(msg); }; </script>

위 코드는 전형적인 jquery function을 선언한 것이다. alertFunction 이라는 Function을 선언하여

호출한 예제이다. 03번 라인을 보면 호출부가 특정 엘리먼트를 가지고 호출하는 것이 아닌 Function명

을 통해서 바로 호출하도록 되어있다.


(Plug-in 을 사용한 예제)

<!doctype html>
 
<html lang="en">
<head>
  <meta charset="utf-8" />
  <title>jQuery UI Dialog - Default functionality</title>
  <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.0/themes/base/jquery-ui.css" />
  <script src="http://code.jquery.com/jquery-1.8.3.js"></script>
  <script src="http://code.jquery.com/ui/1.10.0/jquery-ui.js"></script>
  <link rel="stylesheet" href="/resources/demos/style.css" />
  <script>
  $(document).ready({
    $( "#dialog" ).dialog();
  });
  </script>
</head>
<body>
 
<div id="dialog" title="Basic dialog">
  <p>This is the default dialog which is useful for displaying information. The dialog window can be moved, resized and closed with the 'x' icon.</p>
</div>
 
 
</body>
</html>

  위 예제를 보도록 하자. 13번 Line의 $( "#dialog" ).dialog(); 부분을 유심히 볼 필요가 있다.

 전자의 Function에 비해서 특정 엘리먼트에서 chain 방식으로 dialog() Function을 호출하고 있다.


   지금쯤이면, 뭔가 차이점을 느꼈을 것이다. 즉!!!

   Plug-in은 외부에 만들어 놓은 Function을 자신이 원래 가지고 있더 내장 함수인 마냥 착각을 일으키기

   때문에, jQuery 내부에 있는 Function을 호출하는 것 처럼 해당 엘리먼트에 chain방식으로 호출이 가능하다.


   즉,!! Dialog 라는 외부 Plug-in 모듈을 가져와 script tag로 모듈을 in(내부에 콘덴서에 연결)한 후, 

   내장 Function인 마냥 사용을 하게 되는 것이다.!!


    Are You Understand???



    휴~ 많이 썼더니 골이 아프네~~~ ㅋㅋ


    오늘은 여기까지 다음시간에는 jQuery 작성시 주의해야할 주의사항에 대해 작성해 보도록 하겠다.

 

    주의 사항에 대해 훑고 나서, 본격적인 플러그인 제작에 들어가도록 하겠당!!!

 

    본 자료는 대학내 연구실 연구원들의 교육용 자료로 활용될 예정이오니 불법 펌을 금합니다.



- 2013.02.05 랑이 씀 -


  






반응형
반응형

CSS 에서 메뉴를 Hide/Show 또는 위 아래 정렬을 위해서 많이 사용하는 Style의 속성에 대해


알아보도록 하겠다.


금일 알아볼 Style은 Div나 Span에서 많이 사용하는 Display 속성이다.


우선 아래 예제를 보면서 설명을 하도록 하자.


(1) 기본예제


<div>하이루1</div>
<div>하이루2</div>
<div>하이루3</div>
<br />
<span>하이루1</span>
<span>하이루2</span>
<span>하이루3</span>


위예제의 결과물은 다음과 같다.


  • 옆의 예제에서 처럼 div Tag를 이용한 경우 Enter값이 먹혀버린 상태에서 동작이 된다.
  • span Tag의 경우 우리가 알고 있듯이 별달리 Enter값이 먹히지 않고 가로로 작성이 된다.







위의 예제와 같이 출력되는 이유는 span과 div Tag들 모두다 Attribute(속성)으로 display라는 속성을 가지고 있는데 이 속성의

Default값이 서로 틀리기 때문이다.


Div의 경우 Default Display 속성값이 Block이며, span Tag의 경우 Default Display 속성값이 Inline이다.


그렇다면, 다음과 같이 CSS를 추가하여 style를 조금 변경하면 어떻게 될까?


<style>

div {

display:inline;

}

span {

display:block;

}

</style>


<div>하이루1</div>
<div>하이루2</div>
<div>하이루3</div>
<br />
<span>하이루1</span>
<span>하이루2</span>
<span>하이루3</span>


위 예제의 결과물은 다음과 같다.


  •  옆의 결과물에서 보듯이 div Tag는 이전의 span과 같이 Enter값이 없어졌으며, span Tag의 경우 첫번째 예제의 div와 같이 출력됨을 확인할 수 있다.







(2) Block VS Inline의 차이점


요정도 했으면, 감이 좋은 사람은 둘의 차이점에 대해서 충분히 인지를 하였을 것이다.


그렇다면, 다만 Enter값의 차이만 있을까? 아니다, 다음과 같은 추가적인 차이점이 있다.


block은 Enter값(줄바꿈) 이 적용되며, Inline의 경우 Enter값(줄바꿈)이 되지 않는다.

block으로 설정하면 top/bottom 의 margin과 padding 속성을 사용할 수 있지만, inline으로 설정하면 top/bottom의 margin과padding속성을 이용할 수 없다.

block으로 설정하면 width/height 속성을 사용할 수 있지만, inline은 사용할 수 없다.


(3) 추가적인 display 속성에 대한 공부


(1)단락과 (2)단락을 통해 block과 inline에 대해서 살펴보았다. 이제는 display의 기타 다른 속성에 대해서도 알아보도록 하자.


 속성

설명 

none 

해당 Element의 영역을 보이지 않게 숨김. 

block

해당 Element의 영역을 Block Box으로 만들며, 줄바꿈을 하게 된다. 

inline

해당 Element의 영역을 inline Box으로 만들며 줄바꿈을 하지 않는다.

inline-block

해당 Element의 영역을 Block Box으로 만들지만, line라인 처럼 배치한다.


이상으로 div와 span tag에서 자주 사용되는 block, inline Tag에 대해서 알아보았다.


                            - 2013.01.23 랑이씀 -




반응형
반응형

오늘은 Shell script를 이용해서 jar파일을 생성하는 글을 써 보려 한다.

 

eclipse에서도 export 도구를 통해서 jar파일을 생성할 수 있다. 하지만, 만약 eclipse와 같은 tool을 사용할 수 없다면, 어떻게 해야하나?

 

그렇다면 아래 방법대로 jar파일을 묶어서 관리할 수 있도록 하자. 순서는 다음과 같이 하도록 한다.

 

[1] jar파일 생성 순서

(1) classe path 디렉토리 이하 모든 class파일들을 삭제한다.

 

(2) ant build를 이용해서 다시금 classs 파일의 내용을 빌드한다.

 

(3) svn 을 사용중이라면 svn 관련파일을 모두 삭제한다.

 

(4) 컴파일된 class 파일만을 이용하여 jar파일을 묶는 작업을 실시한다.

 

[2] 실제 아래 소스를 보도록 하자.

 ** makejar.sh **

#! /bin/sh

 

rm -rf ../bin/*
echo "(1) Previous class file delete"

 

./dant
echo "(2) Recompile Success"

 

find ../bin -name *.svn -exec rm -rf {} \;
echo "<3> SVN FILE DELETE"

 

cd ../bin/

jar -cf ../shell/${1} ./com/
echo "<4> Make Jar File"

 

cd ../shell/

 

[3] 실행결과

$ ./makejar.sh aaaa.jar
(1) Previous class file delete
java version "1.6.0_30"
Java(TM) SE Runtime Environment (build 1.6.0_30-b12)
Java HotSpot(TM) Client VM (build 20.5-b03, mixed mode)
Buildfile: D:\SVN\rndtech\KPU\Source\RUNA_API\shell\build.xml

RUNA_API:
    [javac] Compiling 9 source files to D:\SVN\rndtech\KPU\Source\RUNA_API\bin
    [javac] D:\SVN\rndtech\KPU\Source\RUNA_API\src\com\runa\common\collection\RBox.java
    [javac] D:\SVN\rndtech\KPU\Source\RUNA_API\src\com\runa\common\collection\RBoxList.java
    [javac] D:\SVN\rndtech\KPU\Source\RUNA_API\src\com\runa\common\collection\RLog.java
    [javac] D:\SVN\rndtech\KPU\Source\RUNA_API\src\com\runa\common\crypto\Base64.java
    [javac] D:\SVN\rndtech\KPU\Source\RUNA_API\src\com\runa\common\crypto\Crypto.java
    [javac] D:\SVN\rndtech\KPU\Source\RUNA_API\src\com\runa\common\exception\BizException.java
    [javac] D:\SVN\rndtech\KPU\Source\RUNA_API\src\com\runa\common\util\CommonMenu.java
    [javac] D:\SVN\rndtech\KPU\Source\RUNA_API\src\com\runa\common\util\CommonThumbnail.java
    [javac] D:\SVN\rndtech\KPU\Source\RUNA_API\src\com\runa\common\util\CommonUtil.java

BUILD SUCCESSFUL
Total time: 2 seconds
(2) Recompile Success
<3> SVN FILE DELETE
<4> Make Jar File 

 

위 예제를 보게 되면 [1] 의 순서와 맵핑이 되는 것을 알 수 있을 것이다. 저렇게 shell script를 작성해 두면

 

API 묶음을 만들때 아주 유용하게 써먹을 수 있다. ANT Build하는 방법에 대해서는 알아서 체크해보기 바란다.

 

 

                                                                              - 2012.08.27 랑이씀 -

반응형

+ Recent posts