본문 바로가기

Programming/JAVA

JAR 파일로 프로그램 실행 JAR 파일로 프로그램 실행 자바 Application을 개발 후 JAR 파일로 묶어 실행하는 방법에 대해 알아보겠습니다. 예제에서는 간단히 파일 하나만 테스트 하겠지만 실제는 여러 개의 파일들이 있는 경우에 유용하게 쓰일 수 있습니다. 1. 우선 간단한 Java Application을 만듭니다. public class Test { public static void main(String[] args) { System.out.println(“Hello World!!”); } } 2. 컴파일 후 JAR로 묶습니다. C:\test>jar cvf test.jar ./Test.class 3. JAR를 실행 하려면 클래스패스를 주어야 하죠… Java –classpath .;test.jar Test 4. 참고로 ma.. 더보기
윤년 구하는 메소드 /* * 윤년을 구하려면 먼저 4의 배수를 구하고 100의 배수는 윤년에서 제외하며 * 100의 배수에서 제외된 년중 400의 배수를 윤년으로 하면 됩니다. * * 참고 하세요~ */ public class IfLeapYears { public static void chkYun(int year) { boolean isYun=false; if( (0 == (year % 4) && 0 != (year %100)) || 0 == year%400 ){ isYun = true; }else{ isYun = false; } if(isYun){ System.out.println(year+"는 윤년. "); }else{ System.out.println(year+"는 윤년이 아님."); } } } 더보기
상속관계가 있는 클래스의 배열도 상속? 상속관계가 있는 클래스의 배열도 상속? 자바에서 두 개의 클래스(A, B)가 상속관계에 있을 때 클래스 배열 A[], B[]도 상속관계 를 가지게 되는데, Point클래스를 Circle이 상속한다면 Circle Type의 배열에 Point배열을 대입하는 것이 가능 해진다는 이야기 입니다. Circle[] c = new Circle[10]; …… Point[] p = c; 위에서 만든 배열 p를 메소드의 인자로 줄 수 있는데… drawCircle(Point p) { //다음과 같이 캐스팅도 가능 합니다. Circle[] c = (Point[])p; } 더보기
생성자에서 오버라이드된 메소드를 호출 생성자에서 오버라이드된 메소드를 호출 아래의 클래스가 있다고 했을 때 Class 하위클래스 { int i=0; //생성자 하위클래스() { i = 10; } void display() { System.out.println(“i = “ + i); } } class 슈퍼클래스 { //생성자 슈퍼클래스() { display(); } Void display() { System.out.println(“여긴 상위 클래스…”); } } 하위클래스의 인스컨스를 NEW 하는 시점에 어떤 결과가 나오는 지를 추측해 보면… 위 클래스에서 상위클래스에서 display()란 메소드를 호출하는데 이 메소드는 하위 클래스에서 재정의(override)한 메소드 인 것을 확인 할 수 있는데 자바에서는 오버라이드된 하위클래스의 disp.. 더보기
C함수 포인터와 자바의 Class&Interface 아래 내용은 effective java라는 책의 내용을 정리한 것 입니다. C언어에서는 함수 포인터란 것을 제공하여 C프로그램에서 특정 함수를 호출할 수 있게 하며 또한 전달도 가능하게 하고 있습니다. (C#에서는 대리자인 delegate를 제공하죠^^) 함수 포인터는 일반적으로 함수 호출자가 이차적인 함수에 포인터를 전달함으로써 해당 함수를 처리할 수 있도록 하는데 이 작업을 종종 콜백(Callback) 이라고 부르기도 합니다. 예를 들어 C 표준라이브러리의 qsort 함수는 comparator 함수에 함수 포인터를 전달하며 포인터로 넘어오는 함수에서 정렬을 원하는 요소(Element)를 비교하여 소트를 하게 되는 것 입니다. 이러한 함수 포인터를 자바에서는 객체 참조를 통해 구현이 가능하므로 Java.. 더보기
Java에서의 Job 스케쥴링 어떤 프로젝트에서 정확히 정해진 시간이나 일정한 시간 간격으로 실행되는 작업이 필요할 수 있다. 이 글에서 우리는 자바 개발자가 표준 Java Timer API를 사용하여 어떻게 이러한 요구사항을 구현할 수 있는지 살펴볼 것이다. 그리고, Java Timer API가 제공하는 기본적인 스케쥴링 시스템 외에 추가적인 기능을 필요로 하는 사람을 위해 오픈 소스 라이브러리인 Quartz에 대해 살펴볼 것이다. 먼저 스케쥴링 작업을 필요로 할 때, 이러한 상황을 인식하는데 도움을 줄 수 있는 일반적인 유스케이스에 대해서 몇 가지 살펴보자. 그리고 나서 우리는 여러분의 기능적 요구에 가장 알맞는 최선의 해결책을 찾아 볼 것이다. 대부분의 비지니스 애플리케이션은 유저들이 필요로 하는 보고서와 통계를 가지고 있다. .. 더보기
임시파일을 만들고 종료 시 삭제 방법 임시파일을 만들고 종료 시 삭제 방법 java.io.File 클래스의 createTempFile()과 deleteOnExit() 메소드를 이용하시면 됩니다. createTempFile인 경우 여러명이 같은 프로그램을 사용하는 경우 유일한 이름을 만들어 내며 deleteOnExit() 메소드는 종료 시 이 임시파일을 삭제하는 역할을 합니다. ============================================ /** * @Desc : 임시 파일을 만들고 종료시 삭제하는 예제 * * @File Name : TemporaryFiles.java * * @Date : 2005.03.26 */ import java.io.*; public class TemporaryFiles { public static .. 더보기
문자열 뒤집기 StringBuffer의 reverse() 메소드를 이용하여 문자열을 뒤집을 수도 있으며 Stack을 이용하는 방법도 있습니다. 아래의 예를 참고 바랍니다. ------------------------------------------------------------- StringBuffer를 이용하는 경우는 다음과 같은 형태로 하면 됩니다. ------------------------------------------------------------- //문자열 뒤집기 String s = “abc”; String reverseStr = new StringBuffer(s).reverse(); System.out.println(“뒤집어진 문자열  “ + reverseStr); -----------------.. 더보기
파일 이름 변경 이름을 바꾸고자 하는 파일을 File 객체로 만든 후 renameTo(new File(“새파일명”)) 메소드를 사용합니다. 아래 예제를 확인 하세요~ import java.io.*; public class RenameFile { public static void main(Stirng[] args) throws IOException { //이름을 바꿀 파일 File f1 = new File(“old.file”); //파일의 이름을 new.file로 변경 f1.renameTo(new File(“new.file”)); } } 더보기
유니코드와 문자열의 변환 유니코드와 문자열의 변환 자바의 char와 유니코드 문자의 길이가 모두 16비트 이므로 각각 하나씩 대응한다고 보면 되는데 String 클래스의 charAt()은 유니코드 문자를 반환하고 StringBuffer의 append() 메소드는 char 형태를 append 할 수 있습니다. C에서 처럼 자부 필요하지는 않지만 char가 정수형이므로 산술 연산도 가능한데 C와 같은 언어에서는 Character 클래스가 이러한 연산을 위한 메소드도 제공 합니다. 아래 예제는 루프를 제어하기 위한 char에 산술 연산을 이용하고 StringBuffer에 그 문자를 추가하는 예제 입니다. -------------------------------------------------- [UnicodeChar.java] pub.. 더보기