달력

08

« 2010/08 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  
  •  
  •  
  •  
크리에이티브 커먼즈 라이선스
Creative Commons License
DAO를 풀어보면 Database Access Object로써 DB에 접근하여 무언가를 행하는 클레스입니다.

VO는 Variable Object(Value Object)로 DB 혹은 어떠한 물체 틀(형상화)을 잡고 이 틀을 잡기 위한 변수들을 모아둔 하나의 클레스트 입니다.

회원 DAO와 회원 VO의 구조를 보자면 다음과 같음.

UserDAO.java

더보기


UserVO.java

더보기


VO 부분은 회원 1명을 표현할때 필요한 여러 변수를 가지고 있으며 DAO는 그 회원들의 정보를 저장 불러오기 수정 등을 할수 있는 행위가 기술됨.

DAO에서 중요한 부분은 잘 생각해 보면 이 DAO는 몇번을 실행하더라도 내용이 바뀌지가 않음. DAO가 실행될때 마다 바뀌는건 VO고 이를 봤을 때 싱글톤 패턴을 사용하면 메모리를 조금 더 적게 사용할 수 있으며(매 호출시 인스턴스를 만들지 않기 때문) static영역에 미리 만들어진 인스턴스가 들어가 있기 때문에 그 주소를 참조해서 객체를 불러오기 때문에 객체를 생성하는것에 비해 속도가 빠름.
저작자 표시 비영리 변경 금지
Posted by DefineJAVA
크리에이티브 커먼즈 라이선스
Creative Commons License

정적 변수를 선언하는 방법


static을 이용하여 정적 변수를 선언할 떄 대부분 어떻게 사용하는가?

public class StaticTest
{
 private static int SIZE= 10;
 private static int[] myStatic = new int[SIZE];
}

대부분 이렇게 사용할 것이다.

myStatic이라는 배열을 만들었다. 그렇다면 이 myStatic에 값을 할 당할때 어떻게들 사용하는가?
myStatic은 배열이다. 배열에 값을 할당 할때 과연 어떻게 할 수 있을까?(반복문을 이용하는 방법중)
생성자를 만드는 방법도 있을것이고 메인메소드나 기타메소드에서 값을 할당 받는경우도 있다.
가장 쉽게 생각한 방법이 다음과 같은 두가지 방법일 것이다.

ex1)

more..

ex2)

more..



ex1같은 경우 main 메소드 같은 곳에서 처음 한번만 초기화 값을 넣는 방법과 ex2처럼 생성자를 만들어 객체를 생성하게 하여 사용하는 방법이 있을 것이다.
(필자는 두가지 방법밖에 몰랐었다. 하긴 지금은 몇가지를 더 알고 있으니깐 이글을 쓰는거겠지만...;;)

ex1 같은 경우를 보자! 일반 Application에서는 main메소드를 호출 하기 때문에 단 1번만 호출되면서 값이 활당된다. 그렇다면 웹어플리케이션에서는 어떨까?
당연히 힘들다.(불가능 한것은 아니다. init가 있기 때문에) web.xml을 수정하여하고 이래저래 복잡하다.
ex2 같은경우를 보자! 이와 같은 방법은 객체를 생성하여야 한다. 객체 생성으로 그만큼의 공간을 잡아 먹는 샘이다. 불필요한 공간을 계속 잡고 있을 테니 조금 문제가 될수있다.

두가지의 문제점을 해결 할 수 있는 방법이 필자가 소개할려고 하는 ex3 이다.
아는 사람도 많이 있겠지만 모르는 사람도 많을 것 같다.

바로 static block을 이용하는 방법이다. ex3을 보도록 하자!
ex3)

more..


ex3을 보면 static 블럭에 의해서 값들이 초기화 된다. 즉 객체 생성도 필요없고 특정 메소드에서 호출 할 필요도 없다는것이다.
이해가 잘 안된다면 static의 생성자 개념이라고 생각하면 될것이다. 물론 생성자는 아니다. 그냥 생각만 그렇게 하라는것이다.

오랜만에 강좌를 쓰다보니 앞뒤가 하나도 안 맞게 되었다. 다음에는 더 좋은 내용을 적어보도록해야겠다^ㅡ^


 

Posted by DefineJAVA
크리에이티브 커먼즈 라이선스
Creative Commons License

① 클래스(Class)

2개 이상의 유사한 객체들을 묶어서 하나의 공통된 특성을 표현하는 요소, 즉 공통된 특성과 행위를 갖는 객체의 집합. 한 클래스를 기준으로 하여 그 기준 클래스의 상위 클래스를 슈퍼 클래스, 하위 클래스를 서브 클래스라고 함.

② 인스턴스(Instance)

하나의 클래스에 속하는 각각의 객체를 의미

③ 속성(Attribute)

한 클래스내에 속한 객체들이 가지고 있는 데이터 값들을 단위별로 정의하는 것으로서 성질, 분류, 식별, 수량 또는 현재 상태 등을 표현.

④ 메소드(Method)

객체의 정의된 연산을 의미 하며, 객체의 상태를 참조하거나 변경하는 수단이 됨.

⑤ 객체(Object)

속성과 이를 처리하기 위한 메소드를 결합시킨 실체로써 객체는 각각의 상태를 가지고 있음. 객체는 다른 객체들과 구별할 수 있는 이름을 가지고 있어야 하며 일정한 기억장소를 가지고 있음.

Posted by DefineJAVA
2007/02/21 09:17

자바 예외처리(간단) Define Java/J2SDK2007/02/21 09:17

크리에이티브 커먼즈 라이선스
Creative Commons License

예외처리

의도한대로 프로그램이 진행되지 않고 다른 상황으로 흐름이 진행되는 상황을 말한다.

이런 예외가 발생했을 때 적절한 조취를 취해줄 수 있는 절차를 구현하도록 문법을 정해놓은 것이 예외처리이다.

에러의 종류

1. 문법에러(Syntax Error)

컴파일시 자바 컴파일러가 체크하기 때문에 쉽게 수정 할 수 있다.

2. 실행에러(Runtime Error)

1) 논리에러

개발자가 프로그램을 작성을 잘못하여 다른 결과가 나오는 것을 말한다.

2) 시스템에러

개발자의 의지와는 상관 없는 에러 수정을 할 수 없다. (Server Down)

3) 예외사항

예외사항은 정상적으로 프로그램이 동작하는 과정에서 만날 수 있는 에러를

말한다. 예를 들어 파일을 찾아서 열어야 하는데 없는 경우 같은 것이

속한다.

자바에서의 예외처리 클래스 (Handle Or Declare)

자바에서 예외 처리의 최상위 클래스는 java.lang.Throwable 클래스이다.

자바에서 예외를 직접 처리 하는 방법(Handle)과 예외 처리를 자신을 호출한 다른 곳으로 던지는 방법(Declare = Call Stack Mechanism) 있다.

직접 처리 방식은 try / catch / finally 구문을 사용하고 호출한 곳으로 던지는 방법은 throw / throws 구문을 사용한다.

throws

throws는 메소드나 생성자를 수행할 때 발생하는 exception을 선언할 때 사용하는 keywrod

throw

throw 는 실제로 exception을 낼 때 할 때 사용하는 keyword

'Define Java > J2SDK' 카테고리의 다른 글

정적 변수를 선언하는 방법들  (0) 2007/05/12
클래스? 인스턴스? 속성? 메소드? 객체?  (0) 2007/02/21
자바 예외처리(간단)  (1) 2007/02/21
자바의 접근제한자(한정자)  (1) 2007/02/14
상속  (0) 2007/02/13
생성자  (0) 2007/02/13
Posted by DefineJAVA
2007/02/14 13:25

자바의 접근제한자(한정자) Define Java/J2SDK2007/02/14 13:25

크리에이티브 커먼즈 라이선스
Creative Commons License

Public

같은 클래스, 하위클래스, 또는 같은 패키지 내에 있는 어떤 클래스에서도 접근할 수 있습니다. 이 접근 권한은 클래스 또는 객체의 외부 인터페이스를 제공해 줄 때 주로 사용합니다.

Private

같은 클래스 내에서만 접근가능 합니다. 다시 말해서, 이 접근 권한으로 지정된 변수 또는 메소드를 다른 객체에서 참조하거나 사용하는 것이 불가능하고, 자신의 클래스 내에 있는 메소드에서만 참조하거나 사용할 수 있습니다. 클래스가 제공하는 기능을 내부적으로 구현할 때 주로 사용하고, 이렇게 함으로써 완벽한 정보은닉이 가능합니다.

Protected

자바에서 정의된 클래스들은 기본적으로 하나의 그룹 단위 또는 묶음단위로써 유지되는데, 이를 패키지라 합니다. 다시 말해서 패키지는 클래스들의 그룹이라 볼 수 있습니다. protected 접근지정자를 이용하면 같은 클래스, 하위클래스, 또는 같은 패키지 내의 모든 클래스에서 접근가능 합니다.

생략(Default)

같은 클래스 또는 같은 패키지 내에 있는 모든 클래스 내에서 접근가능 합니다. protected 접근지정자와는 달리 하위클래스에서는 접근할 수 없습니다.

Static

객체를 new 연산자를 이용하여 생성했을 때 비로소 메서드니 멤버 변수들이 메모리를 확보하게 됩니다. 따라서 new 연산자로 객체를 생성하지 않고서는 객체의 메서드니 멤버 변수들을 사용할 수 없지만 이러한 절차를 거치지 않고 멤버변수나 메서드를 사용할 수 있게 해줍니다.

Final

final는 상수의 의미를 가지고 있는 키워드로서 클래스와 메서드, 변수에 사용될 수 있으나 각각 의미는 다릅니다.

사용범위

의미

형식

클래스에 사용될 경우

상속 불가

final class 클래스이름 { }

메서드에 사용될 경우

오버라이딩 불가

접근제한자 final 반환형 메소드명() { }

변수에 사용되는 경우

상수

final 데이터형 변수명;

'Define Java > J2SDK' 카테고리의 다른 글

클래스? 인스턴스? 속성? 메소드? 객체?  (0) 2007/02/21
자바 예외처리(간단)  (1) 2007/02/21
자바의 접근제한자(한정자)  (1) 2007/02/14
상속  (0) 2007/02/13
생성자  (0) 2007/02/13
java.lang.Object  (0) 2007/02/13
Posted by DefineJAVA
2007/02/13 16:56

상속 Define Java/J2SDK2007/02/13 16:56

크리에이티브 커먼즈 라이선스
Creative Commons License

상속

객체지향 개념은 클래스를 이용하여 새로운 클래스를 생성 또는 정의할 수 있도록 하고 있습니다. 예를 들어, 자동차가 갖는 일반적인 상태와 행동들을 자동차 클래스로 정의해 놓고, 이 자동차 클래스를 확장하여 버스만이 갖는 상태와 행동을 추가하여 버스 클래스를 정의하고, 트럭이 갖는 상태와 행동을 추가하여 트럭 클래스를 정의하고, 그리고 자가용이 갖는 상태와 행동들을 추가하여 자가용 클래스를 정의 할 수 있겠지요. 이 때, 자동차 클래스를 상위클래스(superclass)라 하고 버스 클래스, 트럭 클래스, 자가용 클래스 등을 하위클래스(subclass)라 하며, 이들 간의 관계에 대해 얘기할 때 “하위클래스는 상위클래스를 상속한다(inherit)”라고 합니다. 다시 말해서, 하위클래스는 상위클래스가 갖고 있는 모든 특성들을 상속하여 사용할 수 있다는 것입니다. 이러한 상속 관계를 트리로 나타낼 수 있고, 이 상속관계 트리를 클래스 계층도(class hierarchy)라 합니다.

자바에서의 모든 클래스들은 반드시 어떤 클래스로부터 파생되어야 하는데, 클래스 계층 구조의 최상위 클래스는 바로 java.lang이라는 패키지에 있는 Object라는 클래스입니다. 따라서, 자바에서 정의된 모든 클래스는 기본적으로 Object클래스로부터 파생된 클래스가 되며, 자바 개발자가 만든 클래스가 그 어떤 클래스도 상속하지 않도록 정의하였다면, 자바는 내부적으로 이 사용자 클래스가 Object 클래스를 상속하도록 코드를 추가하여 줍니다. 그러므로, 자바에서 생성된 모든 클래스는 Object 클래스가 가지고 있는 변수와 메소드를 상속하여 그대로 사용할 수 있습니다.

상위클래스와 하위클래스

자바에서 “B 클래스가 A 클래스를 상속한다”고 할 때, 상속관계에 있는 두 클래스의 관계를 정의해 보면, A 클래스를 상위클래스(superclass)라 하고, B 클래스를 하위클래스(subclass)라 합니다. 이 때, 하위클래스는 다른 클래스로부터 파생된 클래스를 나타내며, 상위클래스의 모든 상태(변수)와 행동(메소드)을 상속하게 됩니다. 상위클래스란 클래스 계층구조에서 바로 한 단계 위 클래스를 나타냅니다. 하위클래스는 상위클래스의 외부 인터페이스 및 그 구현에 대해 재사용하므로, 상위클래스의 모든 변수와 메소드에 대해 하위클래스에서 접근 가능한 변수와 메소드는 하위클래스의 것으로 생각할 수 있는데, 하위클래스가 상속할 수 있거나 그렇지 못한 상위클래스의 멤버는 다음과 같습니다.

요것 역시 대학 레포트로 했던~

'Define Java > J2SDK' 카테고리의 다른 글

자바 예외처리(간단)  (1) 2007/02/21
자바의 접근제한자(한정자)  (1) 2007/02/14
상속  (0) 2007/02/13
생성자  (0) 2007/02/13
java.lang.Object  (0) 2007/02/13
for문에 날개를 달아 더 빠르게 만들기  (0) 2007/02/09
TAG 상속, 자바
Posted by DefineJAVA
2007/02/13 16:55

생성자 Define Java/J2SDK2007/02/13 16:55

크리에이티브 커먼즈 라이선스
Creative Commons License

생성자는 인스턴스가 생성될 때 호출되는 '인스턴스 초기화 메서드'이다. 따라서 인스턴스변수의 초기화 작업에 주로 사용되며, 인스턴스 생성 시에 실행되어야 할 작업을 위해서도 사용된다.

생성자 역시 매서드처럼 클래스 내에 선언되며, 구조도 메서드와 유사하지만 리턴값이 없다는 점이 다르다. 그렇다고 해서 생성자 앞에 리턴값이 없음을 뜻하는 키워드 void를 사용하지는 않고, 단지 아무 것도 적지 않는다.

1. 생성자의 이름은 클래스의 이름과 같아야 한다.

2. 생성자는 리턴 값이 없다.

클래스이름(타입 변수명, 타입 변수명, ... ) {

인스턴스 생성 시 수행될 코드, 주로 인스턴스멤버의 초기화 코드를 적는다.

}

Ex

class Card {

Card() { // 매개변수가 없는 생성자

//...

}

Card(String k, int num) { // 매개변수가 있는 생성자

//...

}

}

기본 생성자

생성자가 없는 클래스를 위해서 컴파일러는 매개변수를 가지지 않는 생성자를 자동으로 만들어 준다.

이것도 대학교 레포트로

'Define Java > J2SDK' 카테고리의 다른 글

자바의 접근제한자(한정자)  (1) 2007/02/14
상속  (0) 2007/02/13
생성자  (0) 2007/02/13
java.lang.Object  (0) 2007/02/13
for문에 날개를 달아 더 빠르게 만들기  (0) 2007/02/09
자바 소스파일 분석  (0) 2007/02/09
Posted by DefineJAVA
2007/02/13 16:55

java.lang.Object Define Java/J2SDK2007/02/13 16:55

크리에이티브 커먼즈 라이선스
Creative Commons License

Object 클래스

java.lang

클래스 Object

java.lang.Object

public class Object

Object 클래스는 클래스 계층 루트입니다. 모든 클래스는 슈퍼 클래스로서 Object 를 가집니다. 배열을 포함한 모든 오브젝트는 이 클래스의 메소드를 구현합니다.

도입된 버젼:

JDK1. 0

생성자의 개요

Object ()

아무것도 하지 않음.

메소드의 개요

protected Object

clone ()

이 오브젝트의 카피를 작성해 돌려줍니다.

boolean

equals (Object obj)

이 오브젝트와 다른 오브젝트가 동일한지 어떤지를 나타냅니다.

protected Object

finalize ()

이 오브젝트에의 참조는 이제 없으면 가베지 콜렉션에 의해 판단되었을 때에, 가베지 수집가에 의해 불려 갑니다.

Class

getClass ()

오브젝트의 실행시 클래스를 돌려줍니다.

int

hashCode ()

오브젝트의 해시 코드치를 돌려줍니다.

void

notify ()

이 오브젝트의 모니터로 대기중의 thread를 1 개 재개합니다.

void

notifyAll ()

이 오브젝트의 모니터로 대기중의 모든 thread를 재개합니다.

String

toString ()

오브젝트의 캐릭터 라인 표현을 돌려줍니다.

void

wait ()

다른 thread가 이 오브젝트의 notify() 메소드 또는 notifyAll() 메소드를 호출할 때까지 현재의 thread를 대기시킵니다.

void

wait (long timeout)

다른 thread가 이 오브젝트의 notify() 메소드 또는 notifyAll() 메소드를 호출하는지 지정된 시간이 경과할 때까지 현재의 thread를 대기시킵니다.

void

wait (long timeout, int nanos)

다른 thread가 이 오브젝트의 notify() 메소드 또는 notifyAll() 메소드를 호출하는지 다른 thread가 현재의 thread에 세치기를 걸거나 지정된 양의 실시간이 경과할 때까지 현재의 thread를 대기시킵니다.

대학교 레포트로 정리했던 것 같다.

'Define Java > J2SDK' 카테고리의 다른 글

상속  (0) 2007/02/13
생성자  (0) 2007/02/13
java.lang.Object  (0) 2007/02/13
for문에 날개를 달아 더 빠르게 만들기  (0) 2007/02/09
자바 소스파일 분석  (0) 2007/02/09
자바코드의 구성  (3) 2007/02/09
Posted by DefineJAVA
크리에이티브 커먼즈 라이선스
Creative Commons License

For문을 더욱더 빠르게~



1. 임시로 데이터를 저장한다.
for(int i=0; i<10; i++)
{
 countArr[0] += 10;
}

위와 같은 경우 반복문이 돌때마다 배열에 접근하게 된다.
이 경우 JVM이 배열 요소에 접근이 가능 Index인지 검사를 하므로 그 만큼 속도가 느려지게 된다.
int temp = countArr[0];
for(int i=0; i<10; i++)
{
 temp  += 10;
}
countArr[0] = temp;

2. 비교값에 메소드를 사용하지 말라.
for(int i=0; i<list.size(); i++)
위의 예제에서 보면 종료 조건이 i<list.size() 즉 리스트의 size를 가져오는 메소드를 호출 시킨다.
이 경우 반복 될때마다 size() 메소드를 호출 시키므로 그 만큼 속도가 느려질 수 있다.
int cnt = list.size();
for(int i=0; i < cnt; i++)

3. 반복문 내에 객체와 객체를 비교 할 때는 캐논화 하여 사용한다.
반복문 안에서 If문을 쓰는 경우가 많다. 그 중 객체와 객체를 비교 할 때는 일반적으로 캐논화하여 사용하는것이 더 빠르다.
if(object.getClass().getName().equals(java.lang.String"))

Application을 제작 하다 보면 위와 같이 비교를 많이 해야 될수도 있다. 그럴경우 static과 final을 이용하여 미리 한 객체에 선언해 두고 이것을 가져다 쓰는것이 훨씬 효율적이다.

public static final Class STRING_CLASSNAME = java.lang.String.class;
if(object.getClass() == STRING_CLASSNAME)

사실 필자도 캐논화를 잘 하지는 않는다-.-;;

4. 반복문에서 배열에 접근할 때.
for(int i=0; i<10; i++)
{
System.out.println(strArray[i]);
}
가장 일반적인 예이다. 이것은 어떠한가?
for(int i=0; i<10;)
{
System.out.println(strArray[i++]);
}
사실 이 코드는 위에 것과 별 차이가 없다. 혹시나마 이걸 보고 "아 이러면 빠르겠구나~" 하고 생각한 사람이 있다면 다시 잘 생각해 보길 바란다.-_-

'Define Java > J2SDK' 카테고리의 다른 글

상속  (0) 2007/02/13
생성자  (0) 2007/02/13
java.lang.Object  (0) 2007/02/13
for문에 날개를 달아 더 빠르게 만들기  (0) 2007/02/09
자바 소스파일 분석  (0) 2007/02/09
자바코드의 구성  (3) 2007/02/09
Posted by DefineJAVA
2007/02/09 14:05

자바 소스파일 분석 Define Java/J2SDK2007/02/09 14:05

크리에이티브 커먼즈 라이선스
Creative Commons License

자바 소스파일 분석



사용자 삽입 이미지

'Define Java > J2SDK' 카테고리의 다른 글

상속  (0) 2007/02/13
생성자  (0) 2007/02/13
java.lang.Object  (0) 2007/02/13
for문에 날개를 달아 더 빠르게 만들기  (0) 2007/02/09
자바 소스파일 분석  (0) 2007/02/09
자바코드의 구성  (3) 2007/02/09
Posted by DefineJAVA