티스토리 툴바


달력

01

« 2012/01 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  
  •  
  •  
  •  
출처 : http://gubok.tistory.com/124


날짜를 나타낼때 변수로 받은 타입이 스트링일 경우가 많다. 이경우 DateFormat을 이용하여 Date 타입으로 컨버팅 하는데 자주 사용하다 보니 유틸리티로 만들어서 사용하곤 한다. 
그러다 보니 그 포맷 형태를 까먹을 때가 많다. 굳이 다 기억하고 싶지는 않지만 그래도 정리하고자 한다.

가장 일반적으로 사용하는 클래스는 java.text.SimpleDateFormat 클래스를 사용하는데, 성능면에서 많이 떨어진다고 한다.(얼마나 떨어지는지는 비교수치를 찾을 수가 없다. 시간 되면 테스트 한번 해보자). 그래서 사용하는 것이 apache.commons 에 있는 FastDateFormat 클래스이다. 
SimpleDateFormat이든 FastDateFormat이든 변수로 사용되는 format 형식은 동일하다.

Letter Date / Time Component Examples
G Era designator AD
y Year 1996; 96
M Month in year July; Jul; 07
w Week in year 27
W Week in month 2
D Day in year 189
d Day in month 10
F Day of week in month 2
E Day in week Tuesday; Tue
a Am/pm marker PM
H Hour in day (0-23) 0
k Hour in day (1-24) 24
K Hour in am/pm (0-11) 0
h Hour in am/pm (1-12) 12
m Minute in hour 30
s Second in minute 55
S Millisecond 978
z Time zone Pacific Standard Time; PST; GMT-08:00
Z Time zone -0800

1. String을 Date 타입으로 변환시 예제
String stringDate = "2009/02/19";
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
Date newDate = dateFormat.parse(stringDate);

apache.commons의 FastDateFormat 클래스는 다음처럼 사용한다.
FastDateFormat fastdateformat = FastDateFormat.getInstance(format, locale);
locale은 request로 부터 받아도 되고 또는 Default로 new Locale("ko_KR")처럼 지정할수도 있다.

2. 역으로 Date타입을 String타입으로 변환시 예제
String newStringDate = dateFormat.format(newDate)

상황에 따라서 newDate.toString()을 쓰기도 하지만 엉뚱한 값이 나올수도 있으니 유의.

다음엔 Locale에 들어가는 값에 대해 알아보고 정리해 보기로 해야겠다.
저작자 표시
Posted by 라면스프
출처 : http://wiki.javajigi.net/pages/viewpage.action?pageId=7188


왜 필요한가?

우리들이 일반적으로 개발하고 있는 대부분의 자바 웹 애플리케이션의 디렉토리 구조를 보면 프로젝트마다 제각기 다르다는 것을 알 수 있다. 물론 프로젝트의 성격에 따라 다르게 구성하는 것이 맞겠지만 기본적인 디렉토리 구조에 대한 가이드안을 만든다면 프로젝트에 참여하는 개발자들이 좀 더 빠르게 친숙해 질 수 있을 것으로 생각한다.

여러분들이 지금까지 참여한 프로젝트들의 디렉토리 구조는 어떠한가? 우선 지금까지 자바지기가 진행한 프로젝트의 디렉토리 구조를 예로 들고 각각의 구조에 대한 좀 더 좋은 방안을 찾아보고자 한다.

이 문제를 토론 주제를 빠르게 선정한 이유는?

현재 자바지기에 대한 사이트 개편 작업을 진행할 예정이다. 사이트 개편 작업을 하면서 프로젝트의 디렉토리 구조를 정의할 때 다른 개발자들이 생각하거나 일반적으로 사용하는 디렉토리 구조를 공유하여 사용하기 위함이다. 프로그램에 정답이 없듯이 이 문제 또한 정답은 있을 수 없다. 단지 각각의 구조에 따른 장,단점이 있을 따름이다. 프로젝트의 성격에 따라서 디렉토리 구조를 결정하면 될 것으로 생각한다.

무엇을 얻을 수 있나?

Java 웹 애플리케이션의 프로젝트에 대한 디렉토리 구조를 정의함으로서 신규 프로젝트를 진행할 때 추가적인 고민없이 프로젝트를 진행하는 것이 가능하다.

다양한 디렉토리 구조

디렉토리 구조 공유

여러분들이 지금 사용하고 있는 디렉토리 구조를 공유해주시면 더 좋겠네요. 만약 여러분이 그와 같은 구조를 만들었다면 왜 그와 같은 구조를 만들게 되었는지..지금과 같은 구조로 프로젝트를 진행했을 때의 장,단점은 무엇인지 등에 대해서 공유해주시면 좋겠네요.

해결 방법

  • 최근 대부분의 자바 웹 애플리케이션 개발에서 공통적으로 보이는 경향은 자바 소스 디렉토리와 Web 소스(js, css, jsp, html)를 분리한다.
  • 자바 소스 디렉토리는 실제 구현 소스와 테스트 소스를 분리한다. 또한 실제 구현 소스와 같은 패키지내에 테스트 소스를 구현하는 것을 원칙으로 하고 있다.
  • 빌드 환경까지 제공해줄 수 있어야 한다.

자바지기 개편안을 위한 디렉토리 구조

자바지기 개편안을 위한 디렉토리 구조는 Equinox의 디렉토리 구조를 따르는 것으로 했다. Equinox의 경우 디렉토리 구조 뿐만 아니라 각 프레임워크별로 기본 템플릿 프로젝트를 제공하기 때문에 세팅하기 쉽다.

또 한가지 Equinox를 선택하게 된 이유는 단순한 디렉토리 구조 뿐만아니라 Build 환경까지 제공한다는 것이다. Build 환경이 단순하게 Ant만을 지원했다면 선택하지 않았겠지만 Ant와 Maven의 강점 두가지를 모두 가지고 있는 구조가 마음에 들었다. 이와 같은 구조로 웹 애플리케이션을 개발할 경우 CVS나 SVN을 통하여 라이브러리를 공유하지 않은 상태로 개발하는 것이 가능하다. 또한 경우에 따라서는 Maven을 이용하여 빌드하는 것 또한 가능하기 때문이다.

Ant과 AntLib의 조합, build.xml과 pom.xml의 조합은 그 동안 해결하려고 했던 많은 문제점을 해결해 줄 수 있을 것이라 생각한다. 또한 pom.xml을 가지고 있기 때문에 Eclipse Maven IDE를 이용하여 개발하는 것이 가능하게 된다.

build.xml의 다음 코드를 통하여 Ant와 Maven이 통합되었을 때 라이브러리 관리가 얼마나 편하게 될 수 있는지 확인할 수 있을 것이다.

build.xml
    <artifact:pom file="pom.xml" id="maven.project"/>

    <artifact:dependencies pathId="compile.classpath" filesetId="compile.fileset" useScope="compile">
        <pom refid="maven.project"/>
    </artifact:dependencies>
    
    <artifact:dependencies pathId="test.classpath" filesetId="test.fileset" useScope="test">
        <pom refid="maven.project"/>
    </artifact:dependencies>
    
    <artifact:dependencies pathId="runtime.classpath" filesetId="runtime.fileset" useScope="runtime">
        <pom refid="maven.project"/>
    </artifact:dependencies>

    <target name="compile" description="Compile main source tree java files">
        <mkdir dir="${build.dir}/classes"/>
        <javac destdir="${build.dir}/classes" debug="true" optimize="false"
            deprecation="false" failonerror="true">
            <src path="${src.dir}"/>
            <classpath>
                <path refid="compile.classpath"/>
                <fileset dir="${web.dir}/WEB-INF/lib" includes="*.jar"/>
            </classpath>
        </javac>
        <!-- compile tests -->
        <mkdir dir="${test.dir}/classes"/>
        <javac destdir="${test.dir}/classes" debug="true" optimize="false"
            deprecation="false" failonerror="true">
            <src path="${test.src}"/>
            <classpath>
                <path refid="test.classpath"/>
                <path location="${build.dir}/classes"/>
                <fileset dir="${web.dir}/WEB-INF/lib" includes="*.jar"/>
            </classpath>
        </javac>
        <!-- Copy XML files to ${build.dir}/classes -->
        <copy todir="${build.dir}/classes">
            <fileset dir="${src.dir}" includes="**/*.xml"/>
        </copy>
    </target>

이와 같이 두가지를 통합하여 사용할 경우 라이브러리를 개발자간에 공유할 필요없이 pom.xml만 공유하면 된다.

저작자 표시
Posted by 라면스프
2012/01/23 13:08

[JAVA] Vector와 ArrayList의 차이점 Enjoy/JAVA2012/01/23 13:08

출처 : http://www.todayis.net/vSix/index.php?ct1=3&ct2=32


Vector와 ArrayList는 extends, implements가 동일하니 쌍둥이라고도 할 수 있을 만큼 동일합니다. 하지만 차이가 있는데, 

인용:

Vector는 synchronized이고, ArrayList는 아닙니다.
Vector는 1.0 부터 있어왔고, ArrayList는 1.2에서부터 생겼습니다.
Vector는 크기 조절이 알아서 되는 Array 오브젝트를 구현하려고 생겼다가 1.2가 나올 때 동일한 목적을 가진 List를 구현한 것으로 바뀌어 Collection framework에 포함이 되었습니다.
따라서 1.2부터는 다음처럼 써서 필요할 때 바꿔치는 것이 됩니다.

List list = new ArrayList()
List list = new Vector()


그럼 둘 중에 무엇을 쓰느냐가 다음 질문인데, ArrayList를 씁니다. 만약 concurrent 프로그래밍을 위해 Vector처럼 synchronized가 필요하면 Collections.synchronizedList()라는 Collections의 wrapper method를 다음처럼 쓰면 됩니다.
List list = Collections.synchronizedList(new ArrayList(...));

그럼 Vector는 언제 쓰느냐 라는 질문이면, 저는 1.1 호환의 예전 소스나 책에 매인 것이 아니라면 Vector는 쓰지말라고 하겠습니다.
저작자 표시
Posted by 라면스프