검색결과 리스트
program/java에 해당되는 글 27건
- 2012.10.05 [java] 문자열(String) 나누기, Split VS SubString
- 2012.10.05 [java] DB에 다량건 데이터 INSERT 시 excuteBatch() 사용
- 2012.10.05 [java] ? 연산, Question Mark 연산
- 2012.10.05 [gwt] 한글 깨짐 현상, css 목록 안불러와질때
- 2012.10.05 [java] 자바 환경변수 설정, java 환경변수 설정
- 2012.10.05 [java] 현재 시스템 시간 가져오기, 오늘 날짜 가져오기
- 2012.10.05 [java] 오라클 DB 연결 예제
- 2012.10.05 [java] Switch Case 사용법
- 2012.10.03 [java] Sun 에서 권고하는 코딩 지침 & 명명 규칙
- 2012.10.03 [java] 클래스 상속 & 메소드 오버라이딩 예제
글
[java] 문자열(String) 나누기, Split VS SubString
Q. "|"로 구분된 문자열(String)을 "|" 단위로 일부 추출하여 List 에 저장한다.
"|" 로 문자열을 자를때 Split과 SubString 의 속도를 비교한다.
ex) 100100|017|1|서울체신청|Y|
소스코드
import java.io.*; import java.util.ArrayList; public class StrSplitVsSubString { public static void main( String[] args ) throws Exception { BufferedReader reader = new BufferedReader( new InputStreamReader( new FileInputStream( "post.txt" ), "euc-kr" ) ); int cnt = 0; int totCnt = 0; String s; ArrayListlist = new ArrayList (); long start = System.nanoTime(); while( ( s = reader.readLine() ) != null ) { cnt++; if( false ) { String[] arr = s.split( "|" ); list.add( arr[3] ); } else { String no = s.substring( 0, 6 ); int index1 = s.indexOf( '|', 11 ); int index2 = s.indexOf( '|', index1 + 1 ); String address = s.substring( index1 + 1, index2 ); list.add( address ); } } if( cnt > 0 ) System.out.println( "\n\nTotal : " + ( totCnt + cnt ) ); long end = System.nanoTime(); System.out.println( ( end - start ) + "(ns)" ); } }
결과
Split | SubString |
1018486826(ns) => 1.01초 1019984754(ns) => 1.01초 1023826810(ns) => 1.02초 1021068796(ns) => 1.02초 1031451956(ns) => 1.03초 | 163028956(ns) => 0.16초 172060749(ns) => 0.17초 163285509(ns) => 0.16초 166215880(ns) => 0.16초 165033753(ns) => 0.16초 |
결론
1. Split
Split은 Pattern.compile 객체를 new 로 생성하여 문자열을 자른다.
결과 값을 String[] 배열을 받아오기 때문에, String 배열 또한 생성해야 함으로 더 느려진다.
2. SubString
SubString 은 Split 보다 1/10 초 정도 줄어든 현상을 볼 수 있다.
SubString은 String의 value[] 라는 배열을 참조하여, offset(순번)과 count(총개수)만을 가지고 있다.
그러므로 객체를 생성하지 않은 SubString 이 보다 빠르다.
※ 성능을 고려하여 되도록 SubString을 쓰자.
'program > java' 카테고리의 다른 글
[java] 우편번호 DB에 가져오기, 우편번호 검색기 넣는 방법 (0) | 2012.10.05 |
---|---|
[java] for 문에서 객체의 size 선언법 (0) | 2012.10.05 |
[java] DB에 다량건 데이터 INSERT 시 excuteBatch() 사용 (0) | 2012.10.05 |
[java] ? 연산, Question Mark 연산 (0) | 2012.10.05 |
[gwt] 한글 깨짐 현상, css 목록 안불러와질때 (0) | 2012.10.05 |
설정
트랙백
댓글
글
[java] DB에 다량건 데이터 INSERT 시 excuteBatch() 사용
Q. 약 15만 라인의 데이터를 txt 파일을 읽어와서
DB에 INSERT 몇개 단위로 배치를 돌릴경우 가장 효율적인가?
Query를 excute 할 때, excuteUpdate()와 excuteBatch()의 성능을 테스트한다.
※ 소스코드
long start = System.nanoTime(); while( ( s = reader.readLine() ) != null ) { totCnt++; String no = s.substring( 0, 6 ); int index1 = s.indexOf( '|', 11 ); int index2 = s.indexOf( '|', index1 + 1 ); String address = s.substring( index1 + 1, index2 ); stmt.setInt( 1, totCnt ); stmt.setString( 2, no ); stmt.setString( 3, address ); // case 1 stmt.executeUpdate(); // case 2 stmt.addBatch(); cnt++; if( cnt == 100 ) { cnt = 0; stmt.executeBatch(); } }
1. 매번 excuteUpdate() 실행
- 4분 이상의 작업에 인내심이 바닥남.... 중지함.
2. addbatch(), excuteBatch() 를 이용 100건당 실행
- 39459776065(ns) => 3.9초
3. addbatch(), excuteBatch() 를 이용 500건당 실행
- 11512822395(ns) => 1.1초
4. addbatch(), excuteBatch() 를 이용 1000건당 실행
- 6683119024(ns) => 0.66초
5. addbatch(), excuteBatch() 를 이용 10000건당 실행 (BEST 乃)
- 1442062299(ns) => 0.144초
- 1423391208(ns) => 0.142초
- 1475451583(ns) => 0.147초
6. addbatch(), excuteBatch() 를 이용 20000건당 실행 (Rank 3)
- 1690612350(ns) => 0.16초
- 1597981482(ns) => 0.15초
7. addbatch(), excuteBatch() 를 이용 30000건당 실행 (Rank 4)
- 1608968179(ns) => 0.16초
- 1619791589(ns) => 0.16초
8. addbatch(), excuteBatch() 를 이용 50000건당 실행 (Rank 2)
- 1488951363(ns) => 0.148초
- 1466872514(ns) => 0.146초
※ 결론.
1. 다량건 처리는 excuteUpdate 보다 excuteBatch 를 이용해야함!
2. batch 처리시 많은량을 batch로 넣는다해서 (무조건) 빨리 되는건 아님.
3. batch 처리할때에도 적당한 양 만큼 batch 로 처리하는것이 올바름.
4. 테스트 횟수와 각 장비들의 상태가 같지 않았기 때문에, 정확한 결론은 아님(참고할순 있지 않나..?)
'program > java' 카테고리의 다른 글
[java] for 문에서 객체의 size 선언법 (0) | 2012.10.05 |
---|---|
[java] 문자열(String) 나누기, Split VS SubString (0) | 2012.10.05 |
[java] ? 연산, Question Mark 연산 (0) | 2012.10.05 |
[gwt] 한글 깨짐 현상, css 목록 안불러와질때 (0) | 2012.10.05 |
[java] 자바 환경변수 설정, java 환경변수 설정 (0) | 2012.10.05 |
설정
트랙백
댓글
글
[java] ? 연산, Question Mark 연산
Q. ? Question Mark 연산에 대해서 알아보자.
프로그램을 하다보면 매우 간단한 if 문장을 만들어야 할때가 있다.
형식을 갖춘 if 문장을 만들자니 귀찮고,
매우 간단히 해결하고 싶은 경우에는,
?, Question Mark 연산을 추천한다.
쉽게 생각하여 if 의 간략화된 조건문이라고 보면 된다.
public class QuestionMarkOperation { public static void main( String[] args ) { int a = 10; int b = 20; System.out.println( a > b ? a : b ); } }
아래는 구문 형식이다.
a > b ? a : b
조건식 ? 참 : 거짓
'program > java' 카테고리의 다른 글
[java] 문자열(String) 나누기, Split VS SubString (0) | 2012.10.05 |
---|---|
[java] DB에 다량건 데이터 INSERT 시 excuteBatch() 사용 (0) | 2012.10.05 |
[gwt] 한글 깨짐 현상, css 목록 안불러와질때 (0) | 2012.10.05 |
[java] 자바 환경변수 설정, java 환경변수 설정 (0) | 2012.10.05 |
[java] 현재 시스템 시간 가져오기, 오늘 날짜 가져오기 (0) | 2012.10.05 |
설정
트랙백
댓글
글
[gwt] 한글 깨짐 현상, css 목록 안불러와질때
Q. 한글 깨짐 현상과 css 목록 안불러와질때
gwt의 Design 화면이랑
Source 화면과의 한글이 다르게 나올때
브라우저의 텍스트가 깨져서 나올때
1. 설정 변경
Window > Preferences > General > Content Types
우측에 Content types:
Text > Java Source File 클릭
하단에 Default encoding: UTF-8
Text > CSS 클릭
하단에 Default encoding: UTF-8
(위 방법으로 안될시 아래 방법을 더 시도해보기 바람.)
(정확한 해결책은 아님.)
2. 이미 생성한 모든 파일의 재저장
기존 저장된 파일은 인코딩이 다를수 있으므로,
기존 파일을 열어 띄어쓰기하고 저장,
방금 입력한 띄어쓰기 삭제하고 저장
'program > java' 카테고리의 다른 글
[java] DB에 다량건 데이터 INSERT 시 excuteBatch() 사용 (0) | 2012.10.05 |
---|---|
[java] ? 연산, Question Mark 연산 (0) | 2012.10.05 |
[java] 자바 환경변수 설정, java 환경변수 설정 (0) | 2012.10.05 |
[java] 현재 시스템 시간 가져오기, 오늘 날짜 가져오기 (0) | 2012.10.05 |
[java] 오라클 DB 연결 예제 (0) | 2012.10.05 |
설정
트랙백
댓글
글
[java] 자바 환경변수 설정, java 환경변수 설정
Q. 자바 환경을 구성하기 위한 환경변수를 설정해보자.
1. 시스템 들어가기
Windows Key + Break > 고급시스템 설정
OR
제어판 > 시스템 > 고급시스템 설정
2. 하단 환경변수 설정
3. 시스템 변수 > 새로 만들기
이름 : JAVA_HOME
값 : C:\Program Files\Java\jdk1.6.0_24
※ 설치된 경로까지만 지정
4. 시스템 변수 > path
이름 : path
값 : C:\Program Files\Java\jdk1.6.0_24\bin;
※ 설치된 경로의 bin 폴더 까지 지정
5. 확인
Windows Key + R
OR
시작 > 보조프로그램 > 실행
cmd 실행
C:\Users\User\>java -version 엔터
java version "1.6.0_24"
Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
Java HotSpot(TM) Client VM (build 19.1-b02, mixed mode, sharing)
※ 버전은 다를수 있으나 출력 된다면, 제대로 설정이 완료된것임.
'program > java' 카테고리의 다른 글
[java] ? 연산, Question Mark 연산 (0) | 2012.10.05 |
---|---|
[gwt] 한글 깨짐 현상, css 목록 안불러와질때 (0) | 2012.10.05 |
[java] 현재 시스템 시간 가져오기, 오늘 날짜 가져오기 (0) | 2012.10.05 |
[java] 오라클 DB 연결 예제 (0) | 2012.10.05 |
[java] Switch Case 사용법 (0) | 2012.10.05 |
설정
트랙백
댓글
글
[java] 현재 시스템 시간 가져오기, 오늘 날짜 가져오기
Q. 오늘 날짜, 시간을 가져온다.
오늘 시간을 가져오기 위해선,
Calendar 클래스를 가져와야 합니다.
전에는 Date 를 사용해서 날짜와 시간을 처리하였으나,
JDK1.1 부터 보다 기능이 향상된 Calendar 가 추가 되었습니다.
Date 는 이전에 사용되어 왔기 때문에, 호환여부를 위해서 아직 남아있는 소스지만,
언젠가는 없어질것으로 공지하고 있습니다.
import java.text.SimpleDateFormat; import java.util.*; public class TodayTime { public static void main( String[] args ) { Calendar cal = Calendar.getInstance(); cal.setTime( new Date( System.currentTimeMillis() ) ); String date = new SimpleDateFormat( "yyyy-MM-dd hh:mm:ss" ).format( cal.getTime() ); System.out.println( date ); } }
'program > java' 카테고리의 다른 글
[gwt] 한글 깨짐 현상, css 목록 안불러와질때 (0) | 2012.10.05 |
---|---|
[java] 자바 환경변수 설정, java 환경변수 설정 (0) | 2012.10.05 |
[java] 오라클 DB 연결 예제 (0) | 2012.10.05 |
[java] Switch Case 사용법 (0) | 2012.10.05 |
[java] Sun 에서 권고하는 코딩 지침 & 명명 규칙 (0) | 2012.10.03 |
설정
트랙백
댓글
글
[java] 오라클 DB 연결 예제
Q. 자바 프로그램으로 오라클 DB 를 접근해보자.
우선 ojdbc6.jar (2012.10.05 기준 최신버전) 을 다운 받는다.
http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html
또는
파일을 클릭하여 다운 받는다.
위 사이트를 방문하면 목록에서 가장 최신 버전의 ojdbc6.jar 파일을 받는다.
ojdbc6.jar 클래스를 사용하기 위해선, 사용할 프로젝트의 빌드 패스에 추가하여야 하는데,
프로젝트 우클릭 -> Properties -> Java Build Path -> Libraries -> Add JARs -> 파일 선택을
하면 ojdbc6.jar 파일을 자신의 프로젝트의 빌드 패스에 추가할수 있다.
OracleDBConnect.java
import java.sql.*; public class OracleDBConnect { public static void main( String[] args ) throws Exception { Statement stmt = null; Connection conn = null; String url = "jdbc:oracle:thin:@localhost:1521:ORCL"; String id = "id"; String pw = "pw"; try { Class.forName( "oracle.jdbc.driver.OracleDriver" ); conn = DriverManager.getConnection( url, id, pw ); stmt = conn.createStatement(); String sql = "SELECT * FROM TEST"; ResultSet rs = stmt.executeQuery( sql ); while( rs.next() ) { String name = rs.getString( 1 ); String value = rs.getString( 2 ); System.out.println( name + "\t" + value ); } rs.close(); } catch( SQLException e ) { throw new SQLException( e.getMessage(), e.getCause() ); } catch( ClassNotFoundException e ) { throw new ClassNotFoundException( e.getMessage(), e.getCause() ); } finally { if( stmt != null ) try { stmt.close(); conn.close(); } catch( SQLException e ) { } } } }
실행하게 되면 해당 DB에서 값을 가져 올수 있다.
'program > java' 카테고리의 다른 글
[java] 자바 환경변수 설정, java 환경변수 설정 (0) | 2012.10.05 |
---|---|
[java] 현재 시스템 시간 가져오기, 오늘 날짜 가져오기 (0) | 2012.10.05 |
[java] Switch Case 사용법 (0) | 2012.10.05 |
[java] Sun 에서 권고하는 코딩 지침 & 명명 규칙 (0) | 2012.10.03 |
[java] 클래스 상속 & 메소드 오버라이딩 예제 (0) | 2012.10.03 |
설정
트랙백
댓글
글
[java] Switch Case 사용법
Q. Switch Case 를 사용해 보자.
if 문과 더불어 조건문중에서 가장 많이 쓰는 Switch Case 문 입니다.
사용에 있어 크게 어려움은 없으나,
break 와 default 를 사용하기 때문에 간단하게만 알고 계시면 됩니다.
기본적으로는 아래와 같이 사용하시면 됩니다.
class SwitchCase { public static void main( String[] args ) { int div = 2; switch( div ) { case 1: System.out.println( "1 입니다." ); break; case 2: System.out.println( "2 입니다." ); break; case 3: System.out.println( "3 입니다." ); break; default: System.out.println( "default 입니다." ); break; } } }
switch 에서 입력된 값에 따라,
case 구문으로 이동하여 실행하고, break 를 만나게 되면 switch 문을 빠져나오게 됩니다.
만약 div 의 값이 1, 2, 3 이외의 값이 입력된다면,
case 문 어디에도 해당하지 않기 때문에,
default 구문을 실행하고 빠져나오게 됩니다.
그럼 break 문이 없을때는 어떻게 될까요.
간단한 예제를 보여드리겠습니다.
class SwitchCase { public static void main( String[] args ) { int grant = 4; switch( grant ) { case 4: grantDelete(); case 3: grantCreate(); case 2: grantUpdate(); case 1: grantRead(); break; default: System.out.println( "권한 밖입니다." ); } } private static void grantRead() { System.out.println( "읽기 권한이 부여 되었습니다." ); } private static void grantUpdate() { System.out.println( "수정 권한이 부여 되었습니다." ); } private static void grantCreate() { System.out.println( "생성 권한이 부여 되었습니다." ); } private static void grantDelete() { System.out.println( "삭제 권한이 부여 되었습니다." ); } }
break 문이 없게되면 해당 구문 실행후 아래 case 문으로 이동하여 실행합니다.
grant 의 값이 4 라면 4, 3, 2, 1 을 순서대로 실행하여 모든 권한을 갖게 됩니다.
'program > java' 카테고리의 다른 글
[java] 현재 시스템 시간 가져오기, 오늘 날짜 가져오기 (0) | 2012.10.05 |
---|---|
[java] 오라클 DB 연결 예제 (0) | 2012.10.05 |
[java] Sun 에서 권고하는 코딩 지침 & 명명 규칙 (0) | 2012.10.03 |
[java] 클래스 상속 & 메소드 오버라이딩 예제 (0) | 2012.10.03 |
[java] 클래스 예제, class 이해를 돕기 위한 예제 (0) | 2012.10.02 |
설정
트랙백
댓글
글
[java] Sun 에서 권고하는 코딩 지침 & 명명 규칙
1. 패키지명은 모두 소문자로 작성한다.
- mypackage
2. 클래스명은 대문자로 시작한다.
- MyClass
3. 변수의 이름은 소문자로 시작한다.
- account, eventHandler
4. 상수는 모두 대문자로 작성하고 '_' 를 사용하여 단어를 구분한다.
- MAX_ITERATIONS = 25
5. 메소드의 이름은 동사를 사용하며 소문자로 시작한다.
- getName()
- setName()
6. private 접근 제한자를 갖는 클래스 변수에 '_' 접미사를 사용한다.
- private int depth_;
7. 일반적인 변수의 이름은 타입의 이름과 동일하게 지정한다.
- void setTopic(Topic topic)
8. 모든 이름은 영어로 작성한다.
'program > java' 카테고리의 다른 글
[java] 오라클 DB 연결 예제 (0) | 2012.10.05 |
---|---|
[java] Switch Case 사용법 (0) | 2012.10.05 |
[java] 클래스 상속 & 메소드 오버라이딩 예제 (0) | 2012.10.03 |
[java] 클래스 예제, class 이해를 돕기 위한 예제 (0) | 2012.10.02 |
[java] 빙고 만들기, 빙고판 만들기 (0) | 2012.09.30 |
설정
트랙백
댓글
글
[java] 클래스 상속 & 메소드 오버라이딩 예제
클래스를 응용해서 작성할일이 생기게 됩니다.
그렇다면 기존에 만들어진 클래스를 다시 또 만들어서 수정해야하는데,
이를 좀더 편하게 할수 있는 방법이 있습니다.
그게 바로 상속과 오버라이드 입니다.
상속은 기존의 클래스를 그대로 가져와서 사용하는 것입니다.
그리고 기존의 클래스에서 수정하고 싶은 부분을 고쳐서 사용하는 것이
바로 메소드 오버라이딩 입니다.
간단히 예제를 보시면 됩니다.
Animal.java
class Animal { private String name; private int age; public void bark() { System.out.println( "동물소리" ); } public void eat() { System.out.println( "동물먹기" ); } public String getName() { return name; } public void setName( String name ) { this.name = name; } public int getAge() { return age; } public void setAge( int age ) { this.age = age; } }
Dog.java
class Dog extends Animal { // 메소드 오버라이딩 public void bark() { System.out.println( "멍멍" ); } public void eat() { System.out.println( "개사료" ); } }
Cat.java
class Cat extends Animal { // 메소드 오버라이딩 public void bark() { System.out.println( "야옹" ); } public void eat() { System.out.println( "우유" ); } }
Test.java
class Test { public static void main( String[] args ) { Animal animal = new Animal(); animal.setName( "동물" ); animal.setAge( 10 ); animal.bark(); animal.eat(); System.out.println(); Dog dog = new Dog(); dog.setName( "멍멍이" ); dog.setAge( 5 ); dog.bark(); dog.eat(); System.out.println(); Cat cat = new Cat(); cat.setName( "고양이" ); cat.setAge( 6 ); cat.bark(); cat.eat(); } }
위의 예제를 보게되면,
Dog 와 Cat 모두 Animal 을 상속 받았고,
Animal 안에 있는 짖는 소리(bark)와 먹는 음식(eat) 이 다르기 때문에,
2가지를 오버라이딩 하여 값을 수정하였습니다.
예제를 실행해보면서 확인해보면 쉽습니다.
'program > java' 카테고리의 다른 글
[java] Switch Case 사용법 (0) | 2012.10.05 |
---|---|
[java] Sun 에서 권고하는 코딩 지침 & 명명 규칙 (0) | 2012.10.03 |
[java] 클래스 예제, class 이해를 돕기 위한 예제 (0) | 2012.10.02 |
[java] 빙고 만들기, 빙고판 만들기 (0) | 2012.09.30 |
[java] 자바 야구게임 (0) | 2012.09.30 |