'Java > Tools' 카테고리의 다른 글
Eclipse Galileo의 eclipse.ini 수정 (0) | 2009.08.20 |
---|---|
이클립스에서 JSP 파일 손쉽게 찾는법 (0) | 2009.06.02 |
Eclipse 문장 끝에 자동으로 세미콜론 찍기 (0) | 2009.06.02 |
JDBC 드라이버 설치요령 (0) | 2009.05.30 |
이클립스 설정하기 (0) | 2009.05.29 |
Eclipse Galileo의 eclipse.ini 수정 (0) | 2009.08.20 |
---|---|
이클립스에서 JSP 파일 손쉽게 찾는법 (0) | 2009.06.02 |
Eclipse 문장 끝에 자동으로 세미콜론 찍기 (0) | 2009.06.02 |
JDBC 드라이버 설치요령 (0) | 2009.05.30 |
이클립스 설정하기 (0) | 2009.05.29 |
'상속'은 클래스를 확장하기 위해 편리한 방법이지만 클래스간의 연결을 강하게 고정시킨다. 소스코드 상에서
라고 쓰면 SomethingGood 클래스는 Something 클래스의 하위 클래스가 됩니다. 그리고 이 관계는 소스 코드를 고쳐 쓰지 않는 한 바꿀 수 없는 매우 견고한 연결이 된다. 프로그램의 필요에 따라서 클래스 간의 관계를 척척 바꾸고 싶을 때에 상속을 사용하는 것은 부적절하다. 교체할 때마다 소스 코드를 변경할 수 없기 때문이다. 이와 같은 경우에는 '상속'이 아니라 '위임'을 사용한다.
예제 프로그램 Display.java
예제 프로그램(추상 클래스) DisplayImpl.java
예제 프로그램에서는 Display 클래스 내에서 위임이 사용되고 있다. Display 클래스의 impl 필드에는 구현되는 인스턴스가 저정되어 있어서
... open을 실행할 때에는 impl.rawOpen()을 호출한다.
... print를 실행할 때에는 impl.rawPrint()을 호출한다.
... close를 실행할 때에는 impl.rawClose()를 호출한다.
라는 식으로 '떠넘기기:위임'을 하고 있다. 이것이 위임이다. 상속은 견고한 연결이고 위임은 느슨한 연결이다. DIsplay 클래스의 인스턴스를 만드는 단계에서 인수로 전달되어온 것과 연결되기 때문이다. 상속과 위임의 관계에 대해서는 Template Method 패턴에서 등장하므로 참고하기 바란다.
이 글은 스프링노트에서 작성되었습니다.
java - Java 어플리케이션 인터프리터(Interpreter) (0) | 2009.05.18 |
---|---|
자바의 새로운 기술, JAVAFX의 등장. 우리나라에는 아직? (0) | 2009.05.17 |
Java에서 인스턴스(객체)를 만드는 다양항 방법 (0) | 2009.05.14 |
JDBC 연결시 에러 발생하는 경우. (0) | 2009.05.12 |
JDBC 정의 및 내용 정리 (0) | 2009.05.11 |
Java에서는 다음과 같이 인스턴스(객체)를 만드는 방법이 있다.
new
일반적으로 인스턴스는 Java의 예약어 new를 사용해서 만든다. 다음과 같이 하면 Something 클래스의 인스턴스를 만들고 변수 obj에 대입할 수 있다.
--> obj라는 이름을 가지는 Something 클래스 타입의 객체를 가진다 라고 말할 수 있겠다.
Something obj = new Something();
이 경우 클래스 이름(여기에서는 Something)을 소스 안에 기술할 필요가 있다.
clone() |
Prototype 패턴에서 등장했던 clone 메소드를 사용하면 이미 존재하는 인스턴스를 기초로 새로운 인스턴스를 만들 수 있다. 다음과 같이 하면 자신(this)을 기초로 새로운 인스턴스(객체)를 만들 수 있다(단, 생성자는 호출되지 않는다).
java.lang |
class Something {
...
public Something createClone() {
Something obj = null;
try {
obj = (Something)clone();
} catch ( CloneNotSupportedException e ) {
e.printStackTrace();
}
return obj;
}
}
newInstance() |
java.lang.Class 클래스의 newInstance 메소드를 사용하면 Class의 인스턴스(객체)를 기초로 그 Class가 표시하고 있는 클래스의 인스턴스(객체)를 만들 수 있다(인수 없는 생성자가 호출된다).
newInstancepublic T newInstance()
|
다음은 newInstance의 예입니다. Something 클래스의 인스턴스 someobj가 있다면 다음 식에서 Something 클래스의 인스턴스를 새롭게 만들 수 있다.
someobj.getClass().newInstance();
실제로 newInstance 메소드는 InstantiationException이나 IllegalAccessException을 예외로 제공하기 때문에 try{ } catch() {}로 묶든지 메소드에 throws을 선언해야 한다.
이 글은 스프링노트에서 작성되었습니다.
자바의 새로운 기술, JAVAFX의 등장. 우리나라에는 아직? (0) | 2009.05.17 |
---|---|
상속은 견고한 연결이고 위임은 느슨한 연결이다. (0) | 2009.05.14 |
JDBC 연결시 에러 발생하는 경우. (0) | 2009.05.12 |
JDBC 정의 및 내용 정리 (0) | 2009.05.11 |
제네릭 프로그래밍(Generic Programming) (1) | 2009.05.11 |
코딩 스타일 (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 |