-- Export 시
export 계정/암호 owner=계정 direct=y buffer=52428800 compress=n feedback=1000 file=/경로/파일명.dmp log=/경로/파일명.log
-- Import 시
imp 계정/암호 fromuser=exp한 계정 touser=imp할 계정 commit=y ignore=y feedback=1000 buffer=52428800 file=/경로/파일.dmp log=/경로/파일.log
이런 식으로 한다.
만약 리눅스 이면 su - oracle 로 들어가서 해야한다. window이면 cmd 창에서 가능하다.(맞나?)
모든게 다 손에 안잡히고.. 그저 멍하게 보내는 날이 많아졌다.
포스팅을 중간정도 하다가 남겨둬서 비공개로 있는게.. 한 5개정도 되고..
스터디도 별로 열중도 못하고..
뭘해야 할지도 모르겠고..
그냥 불안하기만 한 나날을 지내온거 같다.
왜그럴까... 왜 그럴까? 왜~ 그럴까?
급한마음.. 안일한 생각.. 크게 벌려놓은 일..
강박관념.. 스트레스.. 부정적인 생각..
일의 우선순위...
재촉..
날 앞질러가는 주위사람들..
실천하지 못한것들..
계획의 망각..
긴...휴가...
헤이해진 나의 뇌...
아직도 있는 미래에 대한 나의 불안.
개념없이 마냥 급한 나의 마음.
****************************************************************************************************
차근차근 하나하나... 꾸준히..
해 나가자...
다시 마음잡고...
행동을 보여야지..
나는 아직도 모자라구나...
주식을 해야하나?
아니면 개혁을 해야하나......?
아아아아아~~~~~~~~
DIV 태그 안에
DIV 태그 안에
UL 태그 안에
LI 태그를 쓰면
리스트들이 DIV 태그를 벗어나는 경우가 있다.
IE에서는 괜찮은데 firefox 에서는 확실히 벗어난다.
아래의 코드를 보자..
위와 같이 코딩을 하고 브라우저 창에서 보면 div는 검은색은 1px 의 두께의 선이 생기지만
"안의내용"은 div 바깥에 생성이 된다.
이것을 해결하려면 마지막의 li 태그에 float:left; 속성을 지워주면 된다.
하지만 li 태그에 class로 이름을 줘서 또 나눠주기도 불편하고
프로그래밍으로 리스트를 뽑아줄때 마지막꺼만 속성을 바꿔주기도 뭐하다...
고민고민하다가 해결책을 발견했다.
display:inline; 속성은 레이어에 태그를 붙이는 역활을 한다.
li 태그 속성에 float:left 대신 display:inline; 속성을 써주면 간단하게 해결할 수 있다.
난 천재?
------------------------------------------------------------------------------------------
추가.. display:inline; 속성을 줬을때
이렇게 했을시에 첫번째의 div 태그 밑에 두번째 div 태그가 온다...
그러니까 줄바꿈이 되서 보여진다.
이것을 해결하기 위해
ul 태그에 CSS 속성으로
clear:both; 속성을 넣어주자..
그리고 display:inline; 속성을 float:left; 속성을 다시 바꿔줘야 한다.
이것때문에 5시간 삽질했네 -_-..
쳇..
작년 6월이라하면... 한참 ASP가지고 씨름을 하고 있는... 그야말로 초보의 생초보...
프로그램의 개념도 안가지고 있고 그저 단순히 Copy & Paste 만 죽어라 하고 있을때다..
Javascript 공부는 하고 있었지만 그 실력이라는 것은 그야말로 최하급..
그런그때 이야기가 나온것을 나는 2달전에야 이런 패턴이 있다는것을 알았고
(ExtJs 공부하면서..물론 prototype.js 1.6.0 버전에도 있다 그 전에도 있나?)
이것이 Eric씨가 A JavaScript Module Pattern 이라고 지었다는것을 어제 알았다...
아무튼 내가 얼마나 시대에 뒤떨어져 살아가는지 충분히 깨닳게 해준 글이었던거 같다.
그래서 A JavaScript Module Pattern 을 정리해 보고자 한다.
기존에 클래스를 만드는 방식은
위와 같았다.
위와 같은 표기는 Javascript 에서 클래스를 만드는 대표적인 방법이다.
생성자와 메소드로 나뉘어서 클래스화 하면 보기에도 좋고 소스가 깔끔해진다.
하지만 Javascript 에서 무분별하게 new 연산자를 난발하는 것은 메모리를 많이 잡는다.
new 연산자로 인스턴스를 만들게 되면 prototype 오브젝트를 쓸데없이 전부 가져가게 되는 것이다.
(new 연산자의 낭비에 관해서는 다음 포스팅에)
이로인해 YUI에서는 (ExtJs도) 싱글톤 패턴을 지향한 Javascript Module Pattern 이라는 것을 쓴다.
계속 보자..
1. 네임스페이스 오브젝트를 만들자.
YUI나 ExtJS에서는 namespace 라는 메소드가 있어 YAHOO 오브젝트와 Ext 오브젝트에 원하는 이름의 오브
젝트를 만들어준다.
말이 namespace 이지 그냥 빈 오브젝트이다.
원래는
2. namespace 로 지정해준 오브젝트의 익명함수 return 값을 할당한다.
Ext.myProject.myModule 또는 myProject.myModule 이렇게 위에서 선언한 값으로 해도 된다.
하지만 YAHOO Blog에 포스팅 된것이라 맞춰서 하겠다.
마지막 줄의 괄호()는 끝임을 보강한다. 이 기호는 익명함수 return 안의 오브젝트 myPublicProperty 와 myPublicMethod를 즉시 실행시킨다. 익명함수의 return들과 같이 YAHOO.myProject.myModule의
return 오브젝트와 같다.
3. “private” 메소드 그리고 변수는 익명함수에서 return 문 앞에 쓴다.
위와같이 Private 메소드와 변수를 선언할 수 있다.
코드 블럭안의 함수의 return 문에 2개 멤버의 오브젝트를 가진다.
이 멤버들은 YAHOO.myProject.myModule 에서 this.myPublicProperty 그리고 this.myPublicMethod 로 주소를 갖는다.
외부에서 접근할 수 있는 Public 멤버들의 접근은
YAHOO.myProject.myModule.myPublicProperty and
YAHOO.myProject.myModule.myPublicMethod.이다.
Private 변수는 myPrivateProperty 그리고 myPrivateMethod 로서 오직 익명 함수 그자신 안의 return 오브젝트 멤버에서 접근가능하다.
그것은 강력한 closure를 통하여 익명함수의 결과와 즉시 실행에도 불구하고 함수의 return 후에 로컬 변수의 유지를 제한한다. YAHOO.myProject.myModule이 그것들을 필요로 하는 것처럼 2개의 private변수들을 없애지 않는다.
프로그램을 작성할 때,[기존 파일의 데이터를 읽어들여, 다른파일에 쓴다.][기존 데이터를 읽어들일 때, 데이터의 필터 처리를 실시한다.] [기존 데이터의 기입을, 다른 프로그램의 입력치로 한다.]등 이런 입출력에 관한 처리를 실시한다. Java에서는 이러한 처리를 java.io 패키지에 포함되는 여러가지 클래스에서 대응한다.
예제) 파일(abc.txt)를 읽어들여, 그 내용을 다른 파일(xyz.txt)에 쓰는 처리.
public class ExIO1 {
public static void main(String[] args) {
try { //(1)
//(2) File 오브젝트의 생성
File inFile = new File("abc.txt);
//(3) File 오브젝트의 생성
File outFile = new File("xyz.txt);
//(4) FileReader 클래스의 오브젝트의 생성
FileReader in = new FileReader(inFile);
//(5) FileWriter 클래스의 오브젝트의 생성
FileWriter out = new FileWriter(outFile);
int contents; //(6)
//(7) 읽기 데이터가 없어질 때까지 읽기
While ((contents = in.read()) ! = -1) {
//(8) 쓰는 데이터가 없어질때까지
out.wrtie(contents);
}
in.close(); //(9) 읽기 스트림을 닫는다.
out.close(); // (10) 쓰기 스트림을 닫느다.
} catch(IOException e) {
}
}
}
(1) FileReader 오브젝트, FileWriter 오브젝트의 생성. read 메소드 write메소드의 실행 시에 체크예외가 발생하기 때문에 try절에 기술한다.
(2) 읽어들이는 파일(abc.txt)의 File오브젝트 inFile을 생성.
(3) 쓰는 파일(xyz.txt)의 File오브젝트 outFile을 생성.
(4) FileReader 클래스의 오브젝트 in을 생성해, abc.txt에 대해 읽기 스트림을 연다. constructor의 인수에는
outFile을 지정한다.
(5) FileWrtier 클래스의 오브젝트 out을 생성해 xyz.txt에 대해 기입 스트림을 연다. constructor 의 인수에는
outFile을 지정한다.
(6) 읽힌 데이터가 격납되는 int형 변수 contents를 선언한다.
(7) read메소드를 사용해. abc.txt내의 데이터를 1바이트씩 읽어들인다. abc.txt내에 읽어들여 데이터가 없어지면 -1을 돌려주어 While 루프를 종료한다.
(8) write 메소드를 사용해 xyz.txt내에 1바이트씩 데이터를 쓴다.
(9) while 루프에서 나온후(읽기 데이터가 없어진 후), 읽기 스트림을 닫는다.
(10) while 루프에서 나온후(쓰기 데이터가 없어진 후), 쓰기 스트림을 닫는다.
Java에서 예외가 발생한 메소드 내에서 예외 핸들러를 발견할 수 없는 경우, 예외 핸들러를 요구해 메소드 호출원을 반대로 찾으러 간다.
throws의 선언은 이하의 범위내의 포맷으로 구성된다. throws로 지정되는 예외 클래스중, 체크 예외는 반드시 지정할 필요가 있다. 지정하지 않는 경우는 compile error이 된다. 비체크 예외는 옵션적이다.
throws를 사용해, 호출원 메소드로 예외 핸들러가 캐치 된 예이다.
|
(1) 예외가 발생할 가능성이 있는 메소드 호출을 try절내에 기재한다.
(2) MethodB 내에서 FileReader 오브젝트 exFile의 생성을 실시하고 있다. 예외
FileNotFoundException이 발생했을 경우, throws로 지정된 예외 클래스형에 근거해,
호출원메소드 MethodA에 예외 오브젝트를 던진다.
(3) catch절에서 예외 클래스형 FileNotFoundException을 캐치해, getMessage 메소드를
사용해 예외 오브젝트에 포함되는 메세지를 출력한다.
(4) finally절로 [MethodA was finished]를 표시한다.
|
| 【예 2】throws를 사용했지만 호출원메소드로 예외 핸들러가 캐치 되지 않았던 예입니다. |
|
【해설 2】
(1) 예외가 발생할 가능성이 있는 메소드 호출을 try절에 기재한다.
(2) methodB내에서 정수를 0으로 계산하고 있습니다. 그 때문에, 예외 ArithmeticEcxeption가
발생해, throws로 지정된 예외 클래스형에 근거해, 호출원메소드 MethodA에 예외 오브젝트를 던진다.
(3) catch절이 없기때문에 finally절을 실행한다.
*예외 핸들러가 발견되지 않는 경우, Java실행 시스템은 한층 더 메소드 호출원(이경우는 main 메소드)에,
예외 핸들러를 찾으러 간다. 최종적으로 예외 핸들러가 발견되지 않는 경우 Java의 디폴트의 예외 처리를
실행한다.
D:\JAVA>javac ExException8.java
D:\JAVA>java ExException8
This program was finished
Exception in thread "main" java.lang.ArithmeticException: // by zero
at ExException8.methodB(ExException8.java:18) ←
at ExException8.methodA(ExException8.java:11) ← 디폴트 예외 처리
at ExException8.main(ExException8.java:6) ←
D:\JAVA>
메소드의 오버라이드(override)를 실시할 때, throws로 지정하는 예외 클래스형의 지정 방법으로 몇개 주의할 점이 있다.
1. 슈퍼 클래스의 메소드로 지정되는 예외 클래스형 이외의 체크 예외의 예외 클래스형을 서브 클래스의 메소드로 지정할 수 없다. 비체크 예외의 예외 클래스형은 지정가능하다.
2. 슈퍼 클래스의 메소드로 지정되는 예외 클래스형보다 범위의 넓은 예외 클래스형을 서브 클래스의 메소드로 지정할 수 없습니다. 슈퍼 클래스의 메소드로 예외 클래스형 FileNotFoundException이 지정되어 있을경우. 슈퍼클래스인 예외 클래스형 IOException을 서브 클래스의 메소드로 지정할 수 없다.
throw의 사용 방법
throw를 사용하는 것으로써 임의의 장소에서 예외를 발생시킬 수 있다. 아래와 같이 throw를 사용한다. 예외 오브젝트를 참조하는 식에는 [new 예외 클래스]가 사용된다.
| 【예 3】커멘드 라인 인수로 지정된 값이 10이상의 경우, 예외 IllegalArgumentException를 슬로우 하는 예입니다. |
|
| 【실행 결과 3】 |
|
동일 메소드내의 catch절내에서 캐치 될 수 있다. 모두 하지 않는 경우는 compile error이 된다.
비체크 예외의 경우는, 하지 않아도 괜찮다. 위의 예 IllegalArgumentException도 비체크 예외이기 때문에 main메소드에 throws를 지정하지 않아도 되고, 동일 메소드내의 캐치절로 캐치 할 필요도 없다.
try, catch, finally는 Java의 예외 처리에 있어 기본사항이다. 아래와 같이 구성된다.
예외를 던질 가능성이 있는 처리
} catch (예외 클래스형 인수명) {
예외 처리(예외 핸들러)
} finally {
마지막에 반드시 실행되는 처리
}
try { 예외를 던질 가능성이 있는 코드 }
try 절에서는 예외를 던질 가능성이 있는 코드를 { } 둘러싼다.try절로 둘러싸인 처리 중에서 예외가 발생했을 경우, Java실행시 환경은 해당하는 예외 핸들러가 있는지 체크한다.
catch (예외 클래스형 인수명) {예외 처리(예외 핸들러) }
catch 절에서는 슬로우 된 예외에 대한 처리를 실시하는 예외 핸들러를 기재한다. 슬로우된 예외 오브젝트와 catch절에 기재된 예외 클래스형이 일치했을 경우, Java실행시 환경은 catch절의 예외 핸들러를 실핸한다. catch절에 기재된 인수명을 이용해 해당하는 예외 오브젝트의 정보를 참조 할 수도 있다.
finally {마지막에 반드시 실행되는 코드}
finally 절은 예외가 발생 유무에 상관없이 반드시 실행하고 싶은 처리를 기재한다. finally는 필수 항목이 아니다.
|
【예 1】임의의 예외 처리를 실시한 예입니다. |
class ExException5{
public static void main (String[] args) {
try { //(1) try절
int x = Integer.parseInt(args[0]);
System.out.println("대답은" + (100/x));
} catch(ArithmeticException e) { //(2) catch절
System.err.println("에러" + e.getMessage());
} finally { //(3) finally절
System.out.println("This program was finished.");
}
}
}(1) 예외를 던질 가능성이 있는 처리를 try절내에 기재한다. 100을 계산하는 변수X가 0일 경우,
예외 arithmeticException가 던져진다.
(2) 캐치 하는 예외 오브젝트의 예외 클래스형과 그 예외 오브젝트를 캐치 했을 경우의 예외 처리를 기재한다.
여기에서는 예외 ArithmeticException을 캐치 했을 경우, getMessage메소드로 예외 오브젝트에 포함되는
메세지를 출력하는 처리를 기재한다.
(3) 예외를 던지는 것에 관계없이 finally절을 실행한다. finally절에서는 "This program was finished."
를 표시catch는 복수 지정가능
catch는 예외를 던지는 예외 오브젝트에 맞추어 복수 지정할 수 있다. 위로부터 순서에 실행되어 1개의 catch절이 실행되면 그 이후의 catch절은 실행되지 않는다.
| 【예 2】catch를 복수 지정한 예입니다. |
|
(1) 커맨드 라인으로부터 입력된 값을 int형으로 변환해서, 변수 x 에 대입한다. 커맨드 라인으로부터 입력된 값
이 수치로 변환할 수 없는 경우(문자열 등) 예외 NumberFormatException을 슬로우 합니다.
(2) 100을 변수 x 로 계산한다. x가 0의 경우. 예외 ArithmeticException을 던진다.
(3) 예외가 발생에 상관없이 finally절을 실행한다. This program was finished를 표시한다.
2. catch는 예외 클래스의 상속을 의식한다.
catch절로 지정하는 예외 클래스형에서는 예외 클래스의 상속관계가 적용된다. 예외 클래스 IOException는 입출력 관계의 예외 클래스안에서 슈퍼 클래스이다. 예외 클래스 FileNotFoundException는 입출력 관계의 예외 클래스안에서 파일이 존재하지 않을 때에 발생하는 예외 클래스이다. try절로 FileNotFoundException이 발생했을 경우 catch절의 예외 클래스형으로 IOException을 지정하는 것으로써 그 자식 클래스인 FileNotFoundException을 캐치 할 수 있다.
이것은 예외 클래스의 슈퍼 클래스(Throwable 클래스)의 가까운 장소에 위치하는 Exception클래스를 지정하면 거의 모든 예외를 캐치 할 수 있다고 말할 수 있다. 그러나 이 방법은 예기치 못한 예외까지도 캐치 해서 별로 추천하고 있지는 않다. 디버그 목적 이외에서 예외 클래스형에 Exception 클래스를 지정하는 것은 피해야 한다.
catch절을 복수 지정하는 경우는 예외 클래스의 상속 관계를 의식할 필요가 있다. 보다 구체적인 예외 클래스를 앞에 두고 지정하지 않는 경우. compile error 가 된다. 예외 클래스 FileNowFoundException와 예외 클래스 IOException을 지정하는 경우, FileNotFoundException을 먼저 지정할 필요가 있다.
······················
······················
//보다 구체적인 예외 클래스를 먼저 지정
} catch(FileNotFoundException e) {
System.err.println(e.getMessage());
} catch(IOException e) {
System.err.println(e.getMessage());
}
······················
······················3. 예외가 캐치 되지 않는 경우는 디폴트의 예외 처리를 실시한다.catch절로 지정되어 있는 예외 클래스 이외의 예외가 발생했을 경우. Java는 디폴트의 예외 처리를 실행한다. 디폴트의 예외 처리와는 미리 준비되어 있는 에러 메세지를 표시해, 프로그램을 종료시킨다.

이올린에 북마크하기
이올린에 추천하기
Prev

Rss Feed
TOAD로 연결해서 하면 서버에서 작업하는데 TOAD는 클라이언트에서 접근하는 거라 접근이 안된다고 한다..(-_- 이게 무슨말) 그래서
에러가 발생할때 오라클로 접속해서 exp/imp 를 사용해 백업(DUMP) 복원을 할 수 있다.
Exp/Imp 에는 여러가지 옵션이 있는데, 아래와 같이 간단한 옵션만 줘도 상관없다.
옵션에 관해서는 시간이 나면 추가를 하겠다.
buffer 크기는 많을수록 좋다 기왕이면 메모리 한도까지 잡아도 무방.