'Programming' 카테고리의 다른 글
코딩 스타일 (0) | 2009.08.24 |
---|---|
Adapter 패턴 (0) | 2009.08.18 |
예제 중심의 API문서 생성기가 생겼으면 좋겠다. ^^ (0) | 2009.05.11 |
5월 11일 부터 자바의 세계로 귀환합니다. (0) | 2009.05.09 |
컨텐츠 부족으로 네이버에서 사이트 등록 거부 당하다. (0) | 2009.05.08 |
코딩 스타일 (0) | 2009.08.24 |
---|---|
Adapter 패턴 (0) | 2009.08.18 |
예제 중심의 API문서 생성기가 생겼으면 좋겠다. ^^ (0) | 2009.05.11 |
5월 11일 부터 자바의 세계로 귀환합니다. (0) | 2009.05.09 |
컨텐츠 부족으로 네이버에서 사이트 등록 거부 당하다. (0) | 2009.05.08 |
출처 : http://www.okjsp.pe.kr/seq/307
끔찍한 java 에러입니다.
jdbc연결시 에러입니다.
classes12.zip 이 연결이 안된 경우입니다.
java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:297)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:286)
at java.lang.ClassLoader.loadClass(ClassLoader.java:253)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:313)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:120)
at getEmp.main(getEmp.java:18)
해결1: classes12.zip을 classes12.jar 로 이름을 바꾼 뒤에 <CATALINA_HOME>/common/lib 에 놓고 재시동
host 주소가 맞지 않은 경우입니다.
또는 listener가 떠있지 않은 상태입니다.
java.sql.SQLException: IO 예외 상황: The Network Adapter could not establish the connection
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:114)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:156)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:269)
at oracle.jdbc.driver.OracleConnection.(OracleConnection.java:210)
at oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.java:251)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:224)
at java.sql.DriverManager.getConnection(DriverManager.java:517)
at java.sql.DriverManager.getConnection(DriverManager.java:177)
at getEmp.main(getEmp.java:20)
java.sql.SQLException:IO 예외 상황: Connectionrefused(DESCRIPTION=(TMP=)(VSNNUM=135290880)(ERR=12505)(ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4))))
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:114)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:156)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:269)
at oracle.jdbc.driver.OracleConnection.(OracleConnection.java:210)
at oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.java:251)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:224)
at java.sql.DriverManager.getConnection(DriverManager.java:517)
at java.sql.DriverManager.getConnection(DriverManager.java:177)
at getEmp.main(getEmp.java:20)
java.sql.SQLException: 널 사용자나 암호가 THIN 드라이버에서 지원되지 않습니다
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:114)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:156)
at oracle.jdbc.dbaccess.DBError.check_error(DBError.java:803)
at oracle.jdbc.ttc7.TTC7Protocol.logon(TTC7Protocol.java:179)
at oracle.jdbc.driver.OracleConnection.(OracleConnection.java:198)
at oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.java:251)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:224)
at java.sql.DriverManager.getConnection(DriverManager.java:517)
at java.sql.DriverManager.getConnection(DriverManager.java:177)
at getEmp.main(getEmp.java:20)
상속은 견고한 연결이고 위임은 느슨한 연결이다. (0) | 2009.05.14 |
---|---|
Java에서 인스턴스(객체)를 만드는 다양항 방법 (0) | 2009.05.14 |
JDBC 정의 및 내용 정리 (0) | 2009.05.11 |
제네릭 프로그래밍(Generic Programming) (1) | 2009.05.11 |
JDK 1.6 한글버전 (0) | 2009.05.11 |
<article> 과 <section>의 차이점 (0) | 2011.04.18 |
---|---|
090625_학습내용 : onkeyup 사용 + onkeypress 이벤트 사용하기 (0) | 2009.06.25 |
API 이용하는 방법 링크 (0) | 2009.06.02 |
미투데이 API CheatSheet (0) | 2009.05.20 |
JSON(JavaScript Object Notation) 소개 (1) | 2009.05.07 |
Java Generic Programming 관련 내용 :
WIKI 사이트 : http://en.wikipedia.org/wiki/Generics_in_Java
SUN 사이트 : http://java.sun.com/developer/technicalArticles/J2SE/generics/index.html
J2SE 5.0에서 가장 두드러진 특징 중의 하나는 제네릭(Generic) 프로그래밍을 지원한다는 것이다. 제네릭 프로그래밍이란 효율적인 알로그림의 추상적인 형태로 표현하기 위한 프로그래밍 기법이다(Generic Programming is a programming mehod that is based in finding the most abstract representations of efficient algorithms. - Alexander Stepanov 정의, WIKI 사이트 참조).
자바는 제네릭 프로그래밍을 위해서 제네릭 타입과 메소드를 제공한다. 자바 제네릭 프로그래밍은 기존 C++언어의 템플릿과 유사한 점도 있지만 차이점도 많이 갖고 있다. 이러한 차이점들은 C++ 템플릿에 비해 자바 제네릭 프로그래밍에 여러 가지 장점을 제공한다. 자바 제네릭 프로그래밍은 C++ 의 템플릿에 대해서 다음과 같은 장점을 갖는다.
자바에서 제네릭 클래스, 인터페이스, 메소드는 '<' 과 '>' 문자를 이용해서 표현한다. 예를 들어, GList라는 제네릭 클래스는 다음과 같은 형태로 정의할 수 있다. 이 때 E는 타입을 표현하기 위해서 사용되며, 포멀 파라미터 타입(Formal parameter type)이라고 한다.
제네릭 Glist 클래스 정의
정의된 제네릭 클래스는 생성해서 사용할 수 있다. 이 때 제네릭 클래스를 생성할 때 사용되는 타입( 예 : Integer )을 Actual Type Argument라고 한다. 또한 제네릭 타입 선언을 위해 호출하는 것( 예 : GList<Integer> )을 파라미터화된 타입이라고 한다.
파라미터화된 타입(parameterized type)은 클래스 혹은 인터페이스 이름 C와 파라미터 섹션에 해당되는 <T1, ... , Tn>으로 구성된다. 즉, C<T1, ... , Tn>으로 표현된다. 파라미터화된 타입은 다음과 같은 형태로 선언될 수 있다.
형태 : 파라미터화된 타이(Parameterized type)
Class Or Interface < ReferenceType [, ReferenceType ] >
다음 예는 파라미터화된 타입을 선언하는 것을 보여준다.
파라미터화된 타입
Vector<String>
Seq<Seq<A>>
Seq<String>.Zipper<Integer>
Collection<Integer>
Paint<String, String>
J2SE 5.0 에서 작성된 제네릭 프로그램은 컴파일된 후에 J2SE 1.4의 JVM에서도 실행될 수 있다. 이것은 제네릭 특성을 기존 JVM에서도 호환성 있도록 변환하기 떄문에 가능하다. 이처럼 제네릭 프로그램을 제네릭을 사용하지 않는 형태로 변환하는 것을 타입 제거(Type erasure)라고 한다.
java.util 패키지의 자바 컬렉션(Collection) 클래스들은 기본적으로 제네릭 프로그래밍을 지원하도록 만들어졌다. 예를 들어, java.util 패키지의 Vector 클래스도 제네릭 클래스 형태로 정의되어 있다. 따라서 우리는 Vector 클래스를 제네릭 프로그래밍 방법으로 사용할 수 있다. 다음의 StrinVector.java 예제는 Vector 를 이용해서 제네릭 프로그래밍을 사용하는 방법을 보여준다. 제네릭 프로그래밍을 사용하는 경우에 보다 편리하게 프로그래밍을 작성할 수 있다.
ex) StringVector.java
import java.util.*;
public class StringVector {
public static void main( String args[] ) {
Vector<String> v = new Vector<String>(); // 문자열을 원소로 갖는 백터 객체 v를 생성한다.
v.addElement("Hello");
v.addElement("World!!");
//v.add(5); 컴파일시 에러 발생, 5는 String 타입이 아니다.
for ( String s : v ) { //for 문을 이용해서 백터에 포함된 원소들을 찾아서 출력한다.
System.out.println( s );
}
}
}
ex) NormalVector.java (제네릭 프로그래밍 방법을 사용하지 않았을 경우)
import java.util.*;
public class NormalVector {
public static void main( String args[] ) {
Vector v = new Vector(); // 문자열을 원소로 갖는 백터 객체 v를 생성한다.
v.addElement("Hello");
v.addElement("World!!");
//v.add(5); 컴파일시 에러 발생, 5는 String 타입이 아니다.
int n = v.size();
for ( int i = 0 ; i < n ; i++ ) { //for 문을 이용해서 백터에 포함된 원소들을 찾아서 출력한다.
String s = (String) v.elementAt( i );
System.out.println( s )
}
}
}
ex) ValueWrapper.java ( 타입 파라메터 T를 갖고, T 타입의 멤버 필드 value와 value() 메소드를 갖는다.)
public class ValueWrapper<T> { // ValueWrapper 클래스는 타입 파라메터 T를 갖는 제네릭 클래스이다.
private T value; // value 멤버필드는 T타입이다.
public ValueWrapper(T value) { //ValueWrapper 의 생성자,
this.value = value;
}
public T value() {
return value; // value() 메소드는 T 타입의 값을 리턴한다.
}
public static void main(String[] args) {
ValueWrapper<String> sf = new ValueWrapper<String>("Hello"); //<String>타입의 ValueWrapper의 객체 sf 생성
System.out.println( sf.value() );
ValueWrapper<Integer> si = new ValueWrapper<Integer>(new Integer(10)); // <Integer>타입은 <String>타입이 아니기 떄문에, new로 객체선언 해줘야한다.
System.out.println( si.value() );
}
}
자바의 제네릭 프로그래밍은 JVM은 변경하지 않으면서 새로운 기능을 제공한다. 따라서 J2SE 5.0 이전에 작성된 프로그램들과도 호환성이 유지된다. 예를 들어, Vector 클래스는 제네릭 클래스로 정의되어 있지만, 타입을 갖기 않는 다음과 같은 형태로 사용할 수도 있다.
ex) 타입이 없는 경우
Vector v = new Vector();
이처럼 제네릭 클래스에서 타입 파라미터를 사용하지 않는 것을 로타입(Low Type)이라고 한다. 앞의 예에서 v는 로타입이다. 로타입을 사용하지 않는 경우에는 Object 클래스가 타입 파라메터로 사용된다. 파라미터화된 클래스 타입에서 로타입으로 할당은 가능하지만, 안전하지 않기 때문에 컴파일 시에 경고 메시지를 출력한다.
ex) Cell.java
로 타입을 사용하는 경우에는 컴파일 할 때 경고 메시지가 출력된다.
제네릭 프로그래밍은 타입을 매개 변수로 사용함으로써 프로그램의 일반성을 높이지만, 때로는 타입 파라미터의 범위를 제한해야 하는 경우도 존재한다. 이러한 필요성 때문에 타입 파라미터는 다음과 같은 형태로 범위를 제한할 수 있다.
ex) 타입 파라미터의 범위 제한
C1 클래스를 사용하는 경우에 파라미터로는 Number 클래스의 서브클래스만 가능하다. C2 클래스의 경우에는 Person 클래스로부터 상속 받으며, Comparable 인터페이스를 구현한 클래스만 타입 파라미터로 사용될 수 있다. 타입 파라미터의 상위 타입을 지정하는 경우에는 부모 클래스를 처음에 오도록 하고, 인터페이스들은 & 를 이용해서 여러개 존재할 수 있다.
이 글은 스프링노트에서 작성되었습니다.
JDBC 연결시 에러 발생하는 경우. (0) | 2009.05.12 |
---|---|
JDBC 정의 및 내용 정리 (0) | 2009.05.11 |
JDK 1.6 한글버전 (0) | 2009.05.11 |
자바의 클래스(Class)를 설명해보자. (0) | 2009.05.11 |
자바 SDK API 1.5 한글 번역문서 : 출처 http://www.okjsp.pe.kr (0) | 2009.05.11 |
JDBC 정의 및 내용 정리 (0) | 2009.05.11 |
---|---|
제네릭 프로그래밍(Generic Programming) (1) | 2009.05.11 |
자바의 클래스(Class)를 설명해보자. (0) | 2009.05.11 |
자바 SDK API 1.5 한글 번역문서 : 출처 http://www.okjsp.pe.kr (0) | 2009.05.11 |
JavaFx, 넌 누구냐!? (0) | 2009.05.09 |