• 윈도우 환경 : 경로 ; 사용
  • 유닉스 환경 : 경로 ; 사용

출처: http://aircook.tistory.com/entry/Java-classpath-옵션

 

테스트 프로그램을 구현하다가 웹이 아닌 그냥 자바 클래스를 실행해야 하는 경우가 생겼다.

그런데 -classpath옵션이 windowunix를 틀린것을 발견했다. 웹프로그래밍만 하다 보니 이제껏 이걸 모르고 있었다는게 한심하다.

다른점은 구분자(semi-colon과 그냥 colon)의 차이점이다.

예를 들면 다음과 같다.

window

java -cp .;..\lib\mail.jar;..\lib\activation.jar mail.MailSender


unix

java -cp .:../lib/mail.jar:../lib/activation.jar mail.MailSender


java help를 보니.. 다음과 같이 정확하게 구분자가 나와 있었다.

window

c:\>ver

Microsoft Windows XP [Version 5.1.2600]

c:\>java -h

Usage: java [-options] class [args...]

(to execute a class)

orjava [-options] -jar jarfile [args...]

(to execute a jar file)


where options include:

-clientto select the "client" VM

-serverto select the "server" VM

-hotspotis a synonym for the "client" VM[deprecated]

The default VM is client.


-cp <class search path of directories and zip/jar files>

-classpath <class search path of directories and zip/jar files>

A ; separated list of directories, JAR archives,

and ZIP archives to search for class files.

-D<name>=<value>

set a system property

-verbose[:class|gc|jni]

enable verbose output

-versionprint product version and exit

-version:<value>

require the specified version to run

-showversionprint product version and continue

-jre-restrict-search | -jre-no-restrict-search

include/exclude user private JREs in the version search

-? -helpprint this help message

-Xprint help on non-standard options

-ea[:<packagename>...|:<classname>]

-enableassertions[:<packagename>...|:<classname>]

enable assertions

-da[:<packagename>...|:<classname>]

-disableassertions[:<packagename>...|:<classname>]

disable assertions

-esa | -enablesystemassertions

enable system assertions

-dsa | -disablesystemassertions

disable system assertions

-agentlib:<libname>[=<options>]

load native agent library <libname>, e.g. -agentlib:hprof

see also, -agentlib:jdwp=help and -agentlib:hprof=help

-agentpath:<pathname>[=<options>]

load native agent library by full pathname

-javaagent:<jarpath>[=<options>]

load Java programming language agent, see java.lang.instrument


unix

test|server:/user/test> uname -a

HP-UX server B.11.23 U ia64 3407499753 무제한-사용자 라이선스

test|server:/user/test> java -h

Usage: java [-options] class [args...]

(to execute a class)

orjava [-options] -jar jarfile [args...]

(to execute a jar file)


where options include:

-d32use a 32-bit data model if available

-d64use a 64-bit data model if available

-serverrun the HotSpot VM, tuned for long-lived,

server applications (default)

-hotspotsynonymous to the -server option

-clientrun the HotSpot VM, tuned for short-lived,

GUI applications

If present, the option to select the VM must be first.

The default VM is -server.


-cp <class search path of directories and zip/jar files>

-classpath <class search path of directories and zip/jar files>

A : separated list of directories, JAR archives,

and ZIP archives to search for class files.

-D<name>=<value>

set a system property

-verbose[:class|gc|jni]

enable verbose output

-versionprint product version and exit

-version:<value>

require the specified version to run

-showversionprint product version and continue

-jre-restrict-search | -jre-no-restrict-search

include/exclude user private JREs in the version search

-? -helpprint this help message

-Xprint help on non-standard options

-ea[:<packagename>...|:<classname>]

-enableassertions[:<packagename>...|:<classname>]

enable assertions

-da[:<packagename>...|:<classname>]

-disableassertions[:<packagename>...|:<classname>]

disable assertions

-esa | -enablesystemassertions

enable system assertions

-dsa | -disablesystemassertions

disable system assertions

-agentlib:<libname>[=<options>]

load native agent library <libname>, e.g. -agentlib:hprof

see also, -agentlib:jdwp=help and -agentlib:hprof=help

-agentpath:<pathname>[=<options>]

load native agent library by full pathname

-javaagent:<jarpath>[=<options>]

load Java programming language agent, see java.lang.instrument

이 글은 스프링노트에서 작성되었습니다.

'Java > Language' 카테고리의 다른 글

자주 발생하는 에러와 해결방법  (0) 2009.09.08
J2SE와 J2EE의 차이점  (3) 2009.09.06
JRE와 JDK의 차이, JRE  (0) 2009.09.06
Java를 익히기 위한 13가지 학습 항목들  (0) 2009.09.04
기술면접 관련 내용 정리  (2) 2009.09.02

출처 : http://www.mimul.com/pebble/default/2009/08/31/1251715500000.html

중학생이든, 고등학생이든, 대학생이든, 직장인이든지 Java한 언어를 배워보고 싶은 분들에게 필요한 13가지 항목들을 주저리 두서없이 적어보았습니다.
참으로 많지요. 욕심내지 말고 하나씩 하나씩 독파해 간다는 마음으로 임했으면 합니다. 지레 겁먹지는 마시구요. 열정을 가지고 파다보면 어느덧 경지에 오르지 않을까요? 저도 열심히 열공하고 있습니다.

또한, 이런 것도 있었으면 좋겠다하는 것 댓글로 달아주시면 반영해 드리겠습니다.

1. 객체의 개념을 알아야 한다.
 - OOA/OOAD 개념이 들어간 책을 학습하면 됨
 - UML도 다루는 법을 배워 실제 설계도 해보면 객체의 개념을 이해하고 설계하는 데 도움이 됨

2. Java 언어의 기본을 알아야 한다.
 - Class/Object, Interface, Exception, Threads, I/O Package, System Programming, Internationalization/Localization
 - Collections, Reflection, Serialization, Networking(NIO 포함)
 - 기본을 알아야 응용력이 생김

3. Design Pattern을 공부하면 좋다.
 - GOF, Anti-Pattern 등은 효율적인 비지니스 로직을 설계 및 구현하기 위한 방법을 제공한다.
 - 성능 이슈가 발생하지 않는 효율적인 코딩 가이드라인을 숙지한다.

4. Java 언어의 구동 환경을 알아야 한다.
 - JVM, classloaders, Garbage Collection 등의 메커니즘을 알아야 함
 - 컴파일 옵션이며 실행 옵션들도 알아야 함

5. 분산 객체에 대하서도 알아야 한다.
 -  RMI and RMI / IIOP를 이해해야 함
 - JNDI (JavaNamingandDirectoryInterface), JMS (JavaMessageService), JTA / JTS (JavaTransactionAPI / JavaTransactionService), JMX (JavaManagementeXtensions)도 알면 도움이 됨
 - EJB도 알면 도움이 됨(상용 WAS 사용시)

6. Javascript를 알아야 고객을 즐겁게 할 수 있다.
 - Javascript언어가 가장 어렵다는 사람들도 있으니 기본적인 것을 배워야 됨
 - JavaScript library(Prototype, JQuery, Dojo Toolkit, MooTools, Yahoo! UI Library, Rico, Scriptaculous) 사용법도 알면 서비스에 도움이
 - Ajax의 기본적인 내용을 알아야 함(DWR 포함)

7. 웹 프로그램을 할려면 Servlets, JSP, JSTL(StandardTagLibraries), JavaScript, Third-party Framework를 알아야 한다.
 - HTTP1.1, Servlet 2.5, JSP2.0 스펙을 알면 Security 요소 대응이라던가 자원 모니터링(APM)도 가능함
 - MVC web application frameworks(JSF, Struts/Struts2, Tapestry, Cocoon, Velocity, WebWork, Spring MVC Framework)도 알아야 함
 
8. 비즈니스단의 lightweight application framework 정도는 이해해야 한다.
 - IoC/DI style(setter, constructor, interfaceinjection) - Spring, PicoContainer Avalon 를 학습함
 - Jakarta 프로젝트의 라이브러리들(commons-lang, commons-io, log4j, common-codec, http-client, commons-pool, commons-exec, commons-collections, commons-beanutils)은 사용할 수 있는게 좋음
 - JOB 스케줄링(Quartz), 검색(Lucene), 분산캐싱(JCache, Ehcache), 차트 이미징(Jfreechart) 프레임워크도 알면 좋음
 
9.  Java database 관련 기술들을 익혀라.
 - Oracle, MySQL, SQL server, Cubrid, Tibero를 기본적으로 다룰줄 알아야 함
 - ORM framework(Hibernate, iBatis, JDO, CocoBase, TopLink, InsideLiberator)를 하나 정도는 다룰 줄 알아야 함
 - 성능 형상에 도움을 줄수 있는 케턱션 풀 라이브러리(commons-dbcp, c3p0 - JDBC3 Connection and Statement Pooling)도 사용할 수 있어여 함

10. WAS중에 하나 정도는 구동할 수 있어야 한다.
 -  tomcat, resin, Jrun 중에 하나정도는 환경 설정/튜닝/구동할 수 있어야 함(Apache등 웹서버와 연동 포함)

11. Web Services를 구현할 수 있어야 한다.
 - JAX-RPC (JavaAPIforXML / RPC), SAAJ (SOAPwithAttachmentsAPIforJava), JAXB (JavaArchitectureforXMLBinding), JAXM (JavaAPIforXMLMessaging), JAXR (JavaAPIforXMLRegistries) or JWSDP (JavaWebServicesDeveloperPack)
 - Web Services Framework(AXIS, AXIS2, Apache CXF 등) 중에 하나정도는 사용할 수 있어야 함

12. Network Programming(서버 데몬)도 할 줄 알아야 한다.
 - NIO개념과 Socket의 개념 및 상태에 대해서 이해해야 함
 - Mina, James 등의 오픈 소스도 다룰 줄 알면 좋음

13. 단위 테스트 및 aspect-oriented programming, 테스팅 기법도 알아야 한다.
 - JUnit,  사용법도 알아여 함
 - Deploy 툴(Ant, Maven)도 알면 좋음
 - AspectJ, AspectWerkz 다룰수 있음 좋음

1. 두 함수(show(), show2()를 비교하라.

  1. public class ShowTest {
        public void show(String cmd){
            if ( cmd.equals("Test")){
                System.out.println("cmd is Test");
            }
        }
       
        public void show2(String cmd){
            if( "Test".equals(cmd)) {
                System.out.println("cmd is Test");
            }
        }
    }

  1. // 1번 문제는 equals(String cmd)에 null 값이 들어갔을 경우에 대한 질문... ㅡㅅ-)> 그런 경우는 생각을 안해봤어!!
    //그런 경험은 있지만... equals() 안에 들어가는 파라메터가 null 일 때 생기는 경우는 종종 있지.... ㅡㅅ-)>
    public class Main {
        public static void main(String[] args) {
            //String cmd = null;  //이 경우에는 show()에서 NullPointerException을 발생한다. 요게 질문의 핵심인듯.
            //String cmd = "Test"; //이 경우에는 show(), show2() 모두 정상적으로 실행
            String cmd = "test"; // 이건 당연히 둘다 반응 없음.
           
            ShowTest test = new ShowTest();
            test.show(cmd);
            test.show2(cmd);
        }
    }

 

2.고쳐야 할 부분은 어디!?

  1. public class ShowTest2 {
        public void show(String cmd){
            if ( cmd.equals("Test") && cmd != null ){ // 넘겨받은 cmd가 null일 경우에는 NullPointerException이 발생.
                System.out.println("cmd is Test");
            }
        }
    } //cmd.equals("Test") 이 부분을 "Test".equals(cmd) 수정해주면 정상적인 처리가 되겠지요.... ㅡㅅ-)> 잇힝!!!

  1. public class Main2 {
        public static void main(String[] args) {
            //String cmd = "Test";
            String cmd = null;
            ShowTest2 test = new ShowTest2();
            test.show(cmd);
        }
    }

 

3.이 경우에는 어떻게 나올까?

  1. public class ShowTest3 {
        public static void main(String[] args) {
            boolean a;
            boolean c;
            a = c = true;
           
            if ( ( a = true ) || ( c = false )){ // true or false ==> true 이니까....
                System.out.println("1:" + a + "   " + c); // 요 녀석이 출력된다. 조건문 안에서 대입하는건 안좋아요...ㅡㅅ-)!!
            }
           
            if ( ( a = true ) && ( c = false)){ //true && false ==> false 이니까.... 다시 물으니까... 당황해서 답을 제대로 못했다. ㅠㅅ-)
                System.out.println("2:" + a + "   " + c);
            }
        }
    }

4.String, StringBuffer, StringBuilder의 차이점(셋다 문자열 객체)

참고 : http://hongsgo.egloos.com/2033998 요 글을 보면, String < StringBuffer < StringBuilder 속도 차이가 있다. 흠... String은 적게 쓰는게 좋군요. ㅡㅅ-);;

참고 : http://cacky.tistory.com/36

  • String : 변경되지 않는 Character 문자열 객체
    문자열이 변경되지 않을 경우에는 String 사용
  • StringBuffer : 값이 변경 가능 // 동기화 가능 : 다중 스레드 일 경우에 사용
    문자열이 변경되고 다중 스레드에서 사용될 경우 사용
  • StringBuilder : 값이 변경 가능 // 동기화 되지 않음 : 단일 스레드일 경우에 사용
    문자열이 변경되고, 단일 스레드에서 사용될 경우 사용

 

5.가비지 컬렉션을 줄이기 위한 프로그래밍

Java에서는 기본적으로 가비지 컬렉션에 대해서는 JVM에서 처리를 해주기 때문에 크게 신경을 쓰지 않아도 된다고 배웠다. ㅡㅅ-)>

굳이 줄이는 방법을 떠올려보자면,

이 글은 스프링노트에서 작성되었습니다.

java.sql.Statement
public interface Statement
extends Wrapper

정적 SQL 문을 실행해, 작성된 결과를 돌려주기 위해서(때문에) 사용되는 객체입니다.  

디폴트에서는,Statement 객체 마다 1 개의 ResultSet 객체만이 동시에 오픈할 수 있습니다. 따라서, 1 개의 ResultSet 객체의 read가, 다른 read에 의해 끼어들어지면(자), 각각은 다른 Statement 객체에 의해 생성된 것이 됩니다. Statement 인터페이스의 모든 execution 메소드는, 문장의 현재의 ResultSet 객체로 오픈되고 있는 것이 존재하면, 그것을 암묵에 클로즈 합니다.

관련 항목:
Connection.createStatement() , ResultSet

java.sql.PreparedStatement
public interface PreparedStatement
extends Statement

프리컴파일 된 SQL 문을 나타내는 객체입니다.  

SQL 문은, 프리컴파일 되어PreparedStatement 객체에 포함됩니다. 거기서, 이 객체는, 이 문장을 여러 차례 효율적으로 실행하는 목적으로 사용할 수 있습니다.

주: IN 파라미터치를 설정하는 설정 기능 메소드 (setShort,setString 등)는, 입력 파라미터의 정의된 SQL 형과 호환이 있는 형태를 지정하지 않으면 안됩니다. 예를 들어, IN 파라미터에 INTEGER 라고 하는 SQL 형이 있는 경우,setInt 메소드를 사용하지 않으면 안됩니다.

임의의 파라미터형 변환이 필요한 경우는,setObject 메소드는, 목적의 SQL 형으로 사용하지 않으면 안됩니다.  

파라미터 설정의 예를 다음에 나타냅니다. con 는 액티브한 접속을 나타냅니다.

PreparedStatement pstmt = con.prepareStatement("UPDATE EMPLOYEES
SET SALARY = ? WHERE ID = ? ");
pstmt.setBigDecimal(1, 153833.00)
pstmt.setInt(2, 110592)
 

관련 항목:
Connection.prepareStatement(java.lang.String) , ResultSet

PreparedStatement 에 대한 설명 : http://pcguy7.springnote.com/pages/1052420
Summary 그래서 우리는 prepared statements를 파라메터와 함께 사용해야한다. 이것은 미리 만들어진 접근 계획을 재 사용하므로서 데이터 베이스에 대한 로드를 줄여 준다. 이 cache는 데이터 베이스가 확장된 것이어서 여러분의 모든 애플리케이션이 유사한 파라메터화된 sql을 사용하면 하나의 애플리케이션이 다른 애플리케이션에 의해 사용된 prepared statements를 이용하므로 캐시 스키마의 효율성을 증대 시킬 수 있다. 이것은 application server 사용의 이점이다. 왜냐하면 데이터 베이스에 접근하는 로직은 데이터 접근 계층에 집중화 되어야하기 때문이다. 두번째로 prepared statements의 올바른 사용은 또한 여러분이 애플리 케이션 내부의 prepared statements cache를 잘 이용할 수 있게 한다. 이것은 애플리케이션이 이전에 사용했던 prepared statements 호출을 재사용해서 JDBC driver에 대한 호출의 수를 감소시켜 성능의 향상을 시킨다. 이것은 현명한 fat clients 사용을 효율적으로 그리고 경쟁력있게 만들고 독점적인 connection을 유지할 수 없는 불이익을 제거한다. 만약 파라메타화된 prepared statements를 사용한다면 여러분은 데이터 베이스와 코드를 가지고 있는 application server의 효율을 높일 수 있다. 이들 개선된 점은 여러분의 애플리케이션의 성능을 향상 시킬수 있게 할것이다.


내 나름의 중요한 결론을 말해보자면, 'PreparedStatement를 잘 활용하면 CPU 사용량을 줄이고 DB에 접근하는 소프트웨어의 속도를 향상시키는 효과가 있다'는 것이다.

ㅡㅅ-)> 내가 쓰기 불편하다고 Statement 형식으로 많이 썼었는데, 이제 PreparedStatement를 사용해야겠다. 나란 녀석도 참 고집이 쎄다. 그렇게 쓰는 장점이 있는데도, 내가 쓰기 편하다고 그 방식을 외면하고 있으니 말이다. 

Eclipse Galileo 에 Spring IDE 설치를 기준으로 한다.

1. Help -> Install New Software 를 클릭한다.

2. Install 팝업창에서 오른편에 있는 Add를 클릭한다.

3. Name 에 적당한 이름(나는 Spring IDE)을 입력하고, Location 에는
를 입력한다.


4. OK를 클릭한다.

5. 잠시 후 지정된 경로에서 인스톨 정보를 불러와 화면에 보여준다.
보여지는 정보에서 Core 와 Extensions 두 가지만 체크를 하고 Next를 누르고, 과정을 진행하면 설치가 완료된다.


6. 설치가 진행된 후에 이클립스를 다시한번 실행시키고 나면 된다.


7. 정상적으로 설치가 이루어지면, 프로젝트 창 부분에서 새로운 프로젝트를 생성하려고 하면 위 그림과 같은 내용을 확인하여 볼 수 있다.


+ Recent posts