'Java'에 해당되는 글 8건
- 2008/01/29 struts에서 Foward 사용하기
- 2007/05/22 MyEclipse에서 Xdoclet을 이용하여 sesstion bean 만들기 For weblogic 8 #2 (7)
- 2007/05/15 MyEclipse에서 Xdoclet을 이용하여 sesstion bean 만들기 For weblogic 8 #1 (6)
- 2007/05/15 Jakarta Commons Lang 1. 살펴보기 (7)
- 2007/05/14 JNDI 소개 (5)
- 2007/02/14 자바의 접근제한자(한정자) (1)
- 2007/02/09 PreparedStatement와 Statement (4)
- 2007/02/09 Strategy Pattern #1 (3)
이번에는 Action (Foward)에 대해 배우겠습니다.
이것은 별도의 Class를 걸치지 않고 바로 view 페이지로 이동할 때 쓰입니다.
이번에 우리는 Hello Struts! 문장이 출력되는 JSP 페이지와 연결 하여 요청이 들어오면 Struts를 통해서 해당jsp 파일이 보여지도록 만들것입니다.
별다른 비지니스로직이 처리되는것이 아닌 바로 프리젠테이션로직으로 이동하는 것입니다.
순서는 다음과 같습니다.
1. jsp 파일 생성
2. struts-config.xml에 action 등록
3. 실행
아주 간단합니다. 특별한 비지니스 로직을 통하지 않으므로 Class를 만들 필요도 없구요.
1. Eclipse에서 jsp파일을 한개 만듭니다.
파일명은 helloStruts.jsp로 하겠습니다.
편의를 위해 디렉토리 한개를 만들겠습니다.
디렉토리와 파일명은 /jsp/study01/helloStruts.jsp 이와 같이 하겠습니다.
파일이 만들어 생성 되었으면 내용을 편한대로 입력하시고 저장하시면 됩니다.
2. struts-config.xml파일을 열어서 action을 등록 합니다.
<action-mappings /> 에 다음과 같이 등록 해 줍니다.
<action path="/hello" forward="/helloStruts.jsp" />
<action-mappings>
<action path="/helloStruts" forward="/ helloStruts.jsp" />
</action-mappings>
3. 실행
이걸로 Foward 가능한 action 등록은 끝났습니다. 이제 각자 서버에 맞게 배포 후 실행 하면 다음과 같은 화면을 볼 수 있을 것 입니다.
Struts에서 Foward는 다음과 같은 순서로 이루어 집니다.
1. 요청이 들어오면 우선 URL 패턴을 통해 이것이 Struts를 이용하여 실행이 될것인지 판단합니다.
2. 스트럿츠를 통해 실행이 되어야 하는 패턴일 경우 struts-config의 action-mapping 부분에 등록되어 있는 여러 액션중 path가 맞는 것을 찾아 해당 액션이 가르키는 foward의 내용을 보여 줍니다.
(action의 type이 지정되어 있다면 해당 클레스의 excute 메소드를 실행시킵니다. )
3. foward에 해당되는 응답을 줍니다.
그림에서 파란색으로 칠해 있는 부분이 Struts에 관련된 부분입니다.
url 패턴 검사는 struts 사용을 위해 Servlet으로 등록할 때 *.do로 오는 것을 struts로 처리한다고 정의 했을 것입니다.
그러므로 helloStruts.do로 호출하게 된다면 위의 순서에 따라 helloStruts.jsp의 내용을 뿌려주게 됩니다.
글을 쓰다가 보니 또 뒤죽 박죽 되버렸네요~
다음엔 조금더 생각 있이 써야 겠네요!
내을은 class를 한개 만들어 비지니스 로직을 실행 가능 하도록 만들도록 하겠습니다.
그럼 ' '
'Define Frameworks > Struts' 카테고리의 다른 글
| struts에서 Foward 사용하기 (0) | 2008/01/29 |
|---|---|
| JDK 5.0 + Tomcat 이클립스 개발환경에서 Struts (1.3.8) 설치 하기 (0) | 2008/01/22 |
MyEclipse에서 Xdoclet을 이용하여 sesstion bean 만들기 For weblogic 8 #2

MyEclipse에서 Xdoclet을 이용하여 sesstion bean 만들기
For weblogic 8 #2
http://www.definejava.net/ @ ALT
MyEclipse에서 Xdoclet을 이용하여 sesstion bean 만들기 For weblogic 8 #1에서 Xdoclet을 이용하여 배포에 필요한 xml과 class 파일을 생성하였습니다.
이제 실제로 Weblogic Server에 Application을 배포하여 이것이 잘 돌아가는지 확인 해 보겠습니다.
우선 MyEclipse에 Weblogic 서버 설정이 되어있어야 합니다.
설정 하는 방법은 우선 따로 정리하지 않고 나중에 다시 강좌를 한개 더 쓰겠습니다.
설정이 되어있다는 가장하에 진행하도록 하겠습니다.
- Server정보에 WebLogic 8 이 있는지 확인하고 마우스 오른쪽 버튼을 누르고 Manage Deployment를 선택합니다.
Server Deployments 폼이 나타나면 add를 클릭한 뒤 Project에서 HelloEJB를 선택 한 뒤 Finish를 누릅니다.
- Deploy가 완료 되면 OK 버튼을 누르고 Weblogic 8 왼쪽에 + 버튼을 눌러 helloEJB Application이 등록되었는지 확인합니다.
- Deploy된 helloEJB 밑에 helloEJBEJB 프로젝트와 helloEJBWEB 프로젝트가 있음을 알 수 있습니다.
- Weblogic 관리자 화면에도 배포가 잘 되었는지 확인 해 봅니다.
이제 JSP 또는 JAVA 파일을 만들어서 방금 만든 EJB를 사용 해 보겠습니다.
Web Project를 미리 만들었기 떄문에 JSP에서 EJB를 확인 해 보겠습니다.
helloEJBWeb 프로젝트에서 helloEJB01.jsp 파일과 helloEJB02.jsp 파일을 만듭니다.
01파일은 로컬에서 EJB를 사용할 때 그리고 02는 원격지에서 EJB를 사용할 때의 예제 입니다.
helloEJB01.jsp와 helloEJB02.jsp에 다음과 같이 입력합니다.
helloEJB01.jsp
helloEJB01.jsp 시작
helloEJB02.jsp
helloEJB02.jsp 시작
이제 브라우져를 확인 하겠습니다. debug 모드로 서버를 시작하셨다면 따로 deploy를 다시 안해 주셔도 자동으로 jsp파일을 deploy 할 것입니다.
브라우져 주소창에 http://localhost:7001/helloEJBWeb/helloEJB01.jsp 과 http://localhost:7001/helloEJBWeb/helloEJB02.jsp 입력 하시고 Hello World가 뜨면 성공한 것 입니다.
'Define Java > J2EE/EJB' 카테고리의 다른 글
| MyEclipse에서 Xdoclet을 이용하여 sesstion bean 만들기 For weblogic 8 #2 (7) | 2007/05/22 |
|---|---|
| MyEclipse에서 Xdoclet을 이용하여 sesstion bean 만들기 For weblogic 8 #1 (6) | 2007/05/15 |
| JNDI 소개 (5) | 2007/05/14 |
MyEclipse에서 Xdoclet을 이용하여 sesstion bean 만들기 For weblogic 8 #1

MyEclipse에서 Xdoclet을 이용하여 sesstion bean 만들기
For weblogic 8 #1
- 우선 프로젝트를 생성하겠습니다. 새 프로젝트 중 Enterprise Application Project를 선택합니다.
EJB 프로젝트를 따로만들거나 WEB 프로젝트를 따로 만들어서 상관 없습니다.
- Project Name에 알맞은 이름을 주시고 J2EE 버젼을 1.3으로 체크합니다. 웹로직 8에서는 1.3을 지원하는거 같더군요. 1.4 버젼으로 컴파일 했을 경우 오류가 떳었습니다
- 밑에 Creation tasks는 WEB 프로젝트와 EJB 프로젝트를 사용할지 물어보는 탭 입니다. 두개다 체크를 하시고 next를 누릅니다.
- 다음화면에서 WEB 프로젝트 생성을 선택하고 알맞은 WEB 프로젝트 이름을 주시고 next를 누릅니다.
- 다음화면에서 EJB 프로젝트 생성을 선택하고 알맞은 EJB 프로젝트 이름을 주시고 finish를 누릅니다.
- Package Exploer를 보시면 세개의 프로젝트가 생성이 되었습니다. helloEJB는 Application으로 이 밑에 여러 가지 EJB모듈과 WEB Application을 둘수 있습니다.
helloEJBEJB 프로젝트에서는 실제적인 EJB 모듈을 생성할 것이며 helloEJBWeb에서는 이 모듈을 JNDI에 Look Up 하여 실제로 사용하여 보겠습니다.
- helloEJBEJB의 src에서 마우스 오른쪽 버튼을 누르셔서 new에 Session Bean을 선택하여 세션빈 하나 생성해 줍니다.
- 생성 후 열린 파일의 마지막 부분의 replaceWithRealBusinessMethod()를 getHelloWorld로 변경하고 위에 문서화 주석 부분을 변경합니다.
- 이것으로 세션빈이 만들어 졌습니다. 이제 Project에서 Xdoclet 설정을 하고 해야합니다. helloEJBEJB 프로젝트의 속성을 들어가서 MyEclipse의 Xdoclet을 선택합니다.
- Xdoclet에서 Add Standard 버튼을 눌러 Standard EJB를 선택합니다.
ejbdoclet에서 오른쪽 버튼을 눌러 Add를 눌러 weblogic을 추가해줍니다.
- 추가가 완료되면 weblogic을 선택하고 오른쪽에서 destDir 속성을 src/META-INF로 넣어 둡니다. 다음으로 OK 버튼을 누릅니다.
- Xdoclet 설정이 완료되면 프로젝트에서 오른쪽 버튼을 누르고 MyEclipse 메뉴에서 Run Xdoclet을 클릭 합니다.
- 다음과 같이 홈, 원격 인터페이스와 배포시 필요한 xml 파일들이 자동으로 생성됩니다.
다음에 MyEclipse에서 Xdoclet을 이용하여 sesstion bean 만들기 For weblogic 8 #2로 실제로 웹로직에 Application을 배포를 하고 테스트를 해보겠습니다.
'Define Java > J2EE/EJB' 카테고리의 다른 글
| MyEclipse에서 Xdoclet을 이용하여 sesstion bean 만들기 For weblogic 8 #2 (7) | 2007/05/22 |
|---|---|
| MyEclipse에서 Xdoclet을 이용하여 sesstion bean 만들기 For weblogic 8 #1 (6) | 2007/05/15 |
| JNDI 소개 (5) | 2007/05/14 |
Jakarta Commons Lang 1. 살펴보기
1. Jakarta Commons Lang Package
Commons Lang 라이브러리는 자바 표준 JDK의 java.lang 패키지에 있는 기능들을 확장 또는 사용이 편하게 만들어 놓은 패키지입니다.
즉java.lang 패키지의 기능을 보다 편리하게 사용하기 위한 패키지입니다.
최상위 패키지에는 여러가지 유틸 클레스를 포함하고 있으며 서브클레스에는 여러 종류의 클레스와 예외 클레스 등을 포함하고 있습니다.
2. Download
http://jakarta.apache.org/site/downloads/downloads_commons-lang.cgi
(현재 2.3 최신버젼)
3. 패키지 구조
org.apache.commons.lang
사용하기 편한 정적 메소드와, java.lang을 비롯한 핵심 클레스들을 추가로 제공합니다.
org.apache.comm1ons.lang.builder
equals(Object), toString(), hashCode(), and compareTo(Object) 메소드를 만드는 것을 지원합니다.
org.apache.commons.lang.enum
org.apache.commons.lang.enums로 변경되어 3.0 버젼부터는 없어 질것입니다.
org.apache.commons.lang.enums
c언어 스타일을 자바에서 사용 가능하도록 지원합니다.
org.apache.commons.lang.exception
예외처리 클레스를 제공합니다.
org.apache.commons.lang.math
java.math를 확장한 여러가지 수학통계학 메소드들을 지원합니다.
org.apache.commons.lang.mutable
변수에 대한 포장클레스를 지원합니다.
org.apache.commons.lang.text
java.text 패키지를 확장하여 text 능숙히 다룰수 있도록 지원합니다.
org.apache.commons.lang.time
시간과 날짜에 관련된 클레스들을 제공합니다.
'Define Java > JAVA/LIB' 카테고리의 다른 글
| Jakarta Commons Lang 1. 살펴보기 (7) | 2007/05/15 |
|---|---|
| PreparedStatement와 Statement (4) | 2007/02/09 |
많은 J2EE개발자들이 환경 변수(environment entries), DataSource 객체, JMS 메시지 수신지(JMS message destinations) 그리고 엔터프라이즈 빈 홈 인터페이스(enterprise bean home interfaces)를 찾고자 Java Naming and Directory Interface (JNDI)를 이용한다. 하지만 많은 사람들은 JNDI에 대한 진정한 이해 없이 이러한 기능을 하는 코드를 단순히 복사해서 붙이고 고칠 뿐이다. 이 팁은 사용자의 엔터프라이즈 시스템에 배포된 리소스를 액세스하기 위해 JNDI를 사용하는 방법을 소개한다.
엔터프라이즈 애플리케이션들은 그것들의 특성상, 비즈니스 오퍼레이션을 지원하기 위해 여러곳에 배포된 리소스들을 한데 모아야 한다. 새로운 시스템이 생성되었다거나, 기존의 시스템이 업그레이드 되었다거나, 오래된 시스템이 더 이상 작동하지 않을 때 서비스들이 오가게 된다. 애플리케이션 서비스를 서로 분리하는 것은 시스템을 쉽게 유지/확장할 수 있게 한다. 하지만 서비스가 분리되었을 때, 각자의 역할을 제대로 수행하기 위해서는 서로를 찾아낼 수 있어야만 한다. 이 때가 바로 명명 서비스(naming services)와 디렉토리가 유용한 시점이다.
명명 서비스는 이름을 이용해서 객체나 객체에 대한 레퍼런스를 검색하는 방법을 제공한다. 그러한 객체로의 예는 메시지 큐(message queues), 데이터베이스 커넥션 팩토리(database connection factories), 환경 파라미터(environment parameters), 그리고 엔터프라이즈 빈과 같은 분산 컴포넌트(distributed components)등이 있다. 애플리케이션 개발자들은 명명 서비스내의 이름에 객체들을 바인딩해서 객체에 이름을 붙인다. 애플리케이션 코드는 이렇게 바인딩된 이름으로 객체들을 검색하기 위해 명명 서비스를 사용할 수가 있다. 이러한 분리(decoupling)는 네트워크 객체들을 사용하는 시스템 컴포넌트에 대한 어떠한 변경없이 유지 보수를 위해 올리거나 내릴 수 있고, 요청들을 리다이렉트(redirect)시킬 수 있으며, 서비스가 다이나믹하게 재조정될 수 있음을 의미한다.
이미 기존의 명명 서비스에 대해 잘 이해하고 있으리라고 생각된다.
- DNS (Domain Name Service)는
java.sun.com과 같은 호스트네임을%nslookup java.sun.com%과 같은 IP주로소 매핑한다. - CORBA (Common Object Request Broker Architecture)를 위해 쓰이는 COS (Common Object Services) 명명 서비스 는 CORBA 인터페이스 이름(interface names)을 객체 인터페이스로 매핑한다.
사용자는 컴퓨터의 파일시스템을 파일의 경로(pathname)에 파일의 컨텐츠를 매핑하는 일종의 명명 서비스로 생각할 수 있다.
밑의 그림은 명명 서비스가 서비스 네임을 데이터나 서비스 인터페이스로 매핑하는 방법을 보여주고 있다.
![]() |
이름(name)을 객체로 매핑하는 것을 바인딩이라 부른다. 바인딩은 명명 서비스를 형성하는 사람에 의해 생성된다. 대부분의 명명 서비스는 프로그램이 런타임시에 이름을 객체로 바인딩하거나 해제하는 방법도 제공한다.
컨텍스트는 이름을 객체로 바인딩한 집합이다. 예를 들면, 파일시스템에서 경로 /home 는 흔히 시스템의 유저 디렉토리를 포함하는 컨텍스트이다. 컨텍스트는 다른 컨텍스트를 포함할 수도 있다. /home 컨텍스트의 유저 디렉토리는 그 자체가 유저 파일을 포함하는 컨텍스트이다.
컨텍스트는 최소한 명명 규칙(naming convention)과 검색기능(lookup function)을 갖는다. 예를 들면, DNS는 가장 구체적인 스트링은 왼쪽, 도메인은 오른쪽에 나타내면서 스트링을 점으로 분리하는 명명 규칙을 갖는다. DNS의 검색기능은 nslookup 프로그램을 이용해서 커맨드라인으로부터 액세스가 가능하다.(물론, DNS 명명 서비스에 대한 API도 존재한다.) 컨텍스트는 대게 객체들을 바인딩하고 해제하는 방법과 그것들을 열거하는 방법을 제공한다.
때때로 명명 서비스 의 객체들은 다른 프로그램이 필요로 하는 데이터를 포함한다. 가령, J2EE애플리케이션에서 환경 변수를 나타내는 객체들은 대게 명명 서비스 에 저장된다. 하지만 이외에 명명 서비스의 객체는 객체에 대한 레퍼런스를 나타낸다. 예를 들면, 서버에 레퍼런스를 제공하는 객체는 통상적으로 오픈 서버 커넥션이 아닌 서버에 대한 레퍼런스로서 명명 서비스 에 의해 저장된다.명명 서비스 에 의해 리턴된 레퍼런스 객체는 필요시에 서버 커넥션을 생성하기 위해 사용될 수 있다.
다음 그림은 컨텍스트의 개념도이다. top 컨텍스트는 /top로 불리며 객체, 레퍼런스, 그리고 다른 컨텍스트들을 포함한다. 컨텍스트 /top은 subcontexts b 와 g를 갖는다. 컨텍스트 /top/g 는 subcontext "b"를 갖는다. A라고 불리는 객체가 하나 이상 일지라도, 특정 개체 /top/g/b/a는 그 위치가 컨텍스트 /top/g/b 임이 분명하기 때문에 찾을 수가 있다.
![]() |
바인딩된 객체들에 대한 데이터를 제공하는 명명 서비스를 디렉토리라고 부른다. 가령, 파일시스템 디렉토리는 일반적으로 크기, 타입, 접근 허용 그리고 파일을 생성하고 수정한 날짜에 관한 정보를 제공한다. 몇몇 디렉토리는 이름으로 검색, 애트리뷰트의 조합으로 검색 모두를 허용한다.
각각의 명명 서비스들은 각자의 태스크(task)에 잘 맞도록 되어있지만, 그들이 작동하는 방식은 서로 다르다. 각 명명 서비스는 고유의 명명규칙, 검색기능, 바인딩과 디렉토리 프로토콜(directory protocols)과 객체 서비스 인터페이스(object service interfaces)를 갖는다. JNDI 는 네트워크 서비스를 이름짓고 찾기 위해 일관된 방법을 제공한다.
Java Naming and Directory Interface
JDBC 데이터베이스 커넥션(database connections), JMS 큐(JMS queues) 혹은 엔터프라이즈 빈 홈 인터페이스(enterprise bean home interfaces)와 같은 네트워크 객체에 액세스하기 위해 JNDI 를 사용하는 방법을 이미 알고 있을 것이다. 사실 JNDI 는 이름들을 객체로 매핑하지만, JNDI 는 명명 서비스가 아니다. 그보다도 JNDI는 명명 서비스를 표준적인 방법으로 액세스가능하게 하면서 기존의 명명 서비스를 감추는(wrap) 인터페이스들의 집합이다.
다음 그림에서 보는 것과 같이, 자바 애플리케이션은 JNDI인터페이스를 이용해서 감춰진(underlying) 명명 서비스에 액세스한다.
![]() |
애플리케이션내의 코드는 JNDI 인터페이스 메소드를 호출한다. 이러한 메소드를 구현하는 객체들은 JNDI 인터페이스 호출을 감춰진 명명 서비스에 대한 호출로 매핑한다. 또한 JNDI는 통합된 명명 규칙도 정의한다. JNDI 이름들은 JNDI의 명명 관리자(naming manager)에 의해 감춰진 명명 서비스의 명명 규칙을 따르는 이름으로 매핑된다.
javax.naming 패키지는 다음과 같은 명명과 디렉토리에 관련된 인터페이스들을 포함한다.
javax.naming.Context는 컨텍스트를 나타내는데, 이것은 바인딩과 서브컨텍스트를 찾고 관리하는 데에 쓰인다.javax.naming.Name는 명명 서비스의 이름을 추상적으로 표현(abstract representation)하게 해준다.javax.naming.Binding은 명명 서비스 이름과 그 이름에 바인딩된 객체의 표현이다.javax.naming.Reference는 객체의 복사본을 얻어낼 수 있게 해준다.
컨텍스트 찾기
이 팁에 포함된 샘플코드는 JNDI컨텍스트의 컨텐츠를 열거하는 방법을 보여준다. 샘플 서블릿 Oct2003Servlet는 사용자가 입력한 이름에 해당하는 JNDI namespace내의 컨텐츠를 찾고 디스플레이한다.
컨텍스트를 얻는 가장 쉬운 방법은 javax.naming.InitialContext 클래스의 인스턴스를 생성하는 것이다. 샘플 서블릿 메소드 jndiList 는 최초의 컨텍스트를 생성하고 명명된 객체를 찾을 때 그것을 사용한다.
InitialContext ic = new InitialContext(); Object objFound = ic.lookup(name);
여기에서 name은 사용자가 HTML페이지에서 입력한 HTTP GET 혹은 POST 변수명(vriable name)이다. 만약 리턴된 객체가 Context 라면 jndiList 는 listContext 메소드를 호출하고, ListContext메소드는 주어진 이름에 해당하는 컨텍스트의 컨텐츠를 열거한다. 객체가 DataSource이면, jndiList 는 명명된 데이터 소스에 관한 정보를 출력한다.
listContext 메소드는 주어진 JNDI 컨텍스트의 컨텐츠를 하나의 테이블로 출력한다. 이를 위해서는 Context 메소드 listBindings 를 이용하는데, 이는 NamingEnumeration 를 리턴한다.
NamingEnumeration ne = context.listBindings("");
NamingEnumeration 는 java.util.Enumeration를 구현한 것이다. NamingEnumeration.next 메소드는 javax.naming.Binding 타입의 객체를 리턴하고, 이는 객체의 이름과 객체의 클래스 이름 그리고 저장된 객체 자체를 포함한다.
while (ne.hasMore()) {
Binding ncp = (Binding)ne.next();
String objName = ncp.getName();
String objClass = ncp.getClassName();
Object objObj = ncp.getObject();
...
}
단순히 Context내의 이름들과 클래스이름을 보고자 한다면 Context.list 메소드를 이용할 수 있다. Context.list도 NamingEnumeration를 리턴하지만, 그것이 담고있는 컬랙션은 Binding이 아닌 NameClassPair 타입이다. NameClassPair는 이름과 객체 클래스 이름만을 포함한다.
샘플애플리케이션을 배포하고 실행하는 방법은 샘플코드 실행하기 를 참고한다.
애플리케이션을 실행하면, 다음과 같은 시작페이지를 보게 된다.
![]() |
컨텍스트를 입력하거나, 텍스트 필드를 빈 상태로 놔두고 명명된 컨텍스트의 컨텐츠를 보기 위해 List버튼을 클릭한다. 예를 들면 jdbc 의 엔트리는 다음과 같은 화면을 디스플레이한다.
![]() |
JNDI 에 관한 더 자세한 정보는 JNDI 튜토리얼를 참고한다.
'Define Java > J2EE/EJB' 카테고리의 다른 글
| MyEclipse에서 Xdoclet을 이용하여 sesstion bean 만들기 For weblogic 8 #2 (7) | 2007/05/22 |
|---|---|
| MyEclipse에서 Xdoclet을 이용하여 sesstion bean 만들기 For weblogic 8 #1 (6) | 2007/05/15 |
| JNDI 소개 (5) | 2007/05/14 |
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 |
| 상속 (4) | 2007/02/13 |
| 생성자 (3) | 2007/02/13 |
| java.lang.Object (3) | 2007/02/13 |
PreparedStatement와 Statement
JDBC를 사용한다면 PreparedStatement(이하 pstmt)와 Statement(stmt)를 사용하게 될것이다.
과연 이둘의 차이점은 무엇일까?
필자도 JDBC쪽을 처음 공부할 때 도대체 "째 둘은 이름은 비슷하고 하는일도 비슷한데 왜 나누어져 있을까?" 이런 의문이 들었었다.
우선 두 객체를 사용하여 Result를 가져오는 방법이다.
소스보기
위의 두 코드는 userId가 admin 정보를 가져오는 것이다.
위 코드(코드1)와 아래 코드(코드2) 가장 큰 차이점을 본다면 userId값을 대입할때에 있다.
만약 코드1과 코드2에서 조회해야될 사용자가 100명이라고 한다면 어떻게 될까?
소스 보기
이렇게 소스를 본다면 과연 어느쪽이 더 자원 낭비가 심하게 될까? 당연히 코드2번이 더 심하게 된다.
그 이유는 1번 코드는 미리 쿼리를 준비해 두고 userId값만 교환하여 쿼리를 재활용 하고 있는 반면에 코드2는 그렇지 않기 때문이다.
이렇게 본다면 PreparedStatement Class가 참 좋은 것 같다. 그리고 PreparedStatement는 인젝션을 어느정도 막을 수 있는 코드가 삽입되어 있다.
이렇게만 본다면 PreparedStatement 만 사용해야 겠다고 생각하는 사람들이 많을 것이다.
하지만 PreparedStatement는 분명 Statement 인터페이스를 구현하고 있으면서 또 다른 기능을 포함하고 있다.
이것은 Statement보단 조금더 무겁다는 것을 의미한다.
그렇다면 Statement와 PreparedStatement 속도는 어느정도 차이가 날까?
Java Programming With Oracle JDBC라는 책을 보면 도날드는 오라클 드라이버를 사용하여 데이터를 삽입 할 때 PreparedStatement가 65번 이상 시행 시켰을 때 누적시간 차가
PreparedStatement가 더 작아 진다고 설명되어 있다.
어떤 클래스를 사용하는것은 개발자의 몫이다. 하지만 그 차이점을 알고 사용한다면 조금이나마 더 나은 결과를 나을것이다.
'Define Java > JAVA/LIB' 카테고리의 다른 글
| Jakarta Commons Lang 1. 살펴보기 (7) | 2007/05/15 |
|---|---|
| PreparedStatement와 Statement (4) | 2007/02/09 |
Strategy Pattern
스트래티지 패턴이란 각각의 기능을 하는 클래스를 캡슐화하여 이것을 교환하여 사용할 수 있도록 만드는 역활을 한다.
즉 현재 사용하고 있는 기능(클래스)를 동적으로 변경하여 적용 시킬 수 있다.
간단하게 예를 들자면 로봇 게임이 있다고 하자. (갑자기 http://www.defineyou.net/ 에서 본 로롯코드가 생각나서....)
이 로봇게임에는 여러가지 종류의 로봇이 나온다. 이 여러 종류의 로봇을 제작하기 위해서는 Robot 이라는 클래스를 상속 받아서 제작한다.
turn(); 돌고 도는 메소드
move(); 이동을 하는 메소드
attack(); 공격을 하는 메소드
각 로봇에는 display(); 라는 모양을 뿌려주는 메소드가 존재한다.
로봇게임 개발자는 로봇게임을 더 재밋게 발전 시키기 위해서 모든 로봇에 특수기술인 "날아다니는 기능"을 넣을려고 한다.
이 기능은 로봇이 하늘에서도 싸울 수 있는 기능을 하게 제작하여야한다.
당신이라면 이 문제를 어떻게 해결하겠는가?
쉽게 생각해 본다면 Robot이라는 상위클래스(슈퍼클래스)에 ability(); 라는 메소드를 만들어 날아다니는 기능을 구현하면 될것이다.
모든 로봇들은 Robot Class를 확장(상속)하여 사용하기 때문에 이렇게 한다면 아주 쉽게 해결 할 수가 있다.
로봇게임 개발자는 또 다시 생각을 해 보았다.
"태권V 로봇은 너무 강하니깐 하늘을 날아다니는 기능을 없애야 겠어"
자 모든 로봇들이 상속을 받은 Robot클레스에서는 ability();라는 메소드가 구현되어 있다.
어떤가? 이제 머리 아프게 생각을 해볼때가 됐다. Robot이라는 클래스를 상속 받기 때문에 Robot의 기능을 모두 가지고 있다.
당신이라면 이 문제를 어떻게 해결하겠는가?
ability(); 라는 메소드를 Overloading 하면 된다고 생각하는 사람도 많이 있을 것이다.
Overloading으로 이 문제 해결될 수 있지만 만약 이 프로그램이 발전되어 로봇의 종류가 100가지가 넘고 특수기능의 종류가 많아 졌다고 생각해보자!
개발자는 정말 안구에 습기차도록 노가다를 해야 될 것이다.
어떻게 하면 이 문제를 해결 할 수 있을까? 조금은 생각해 보는것이 좋을 꺼 같다.
다음차 블로그에 이 문제에 대한 해결책을 올리도록 하겠다.
그 안에 열심히 생각을 해 바란다.^ㅡ^
'Define Designing > Design Patterns' 카테고리의 다른 글
| Strategy Pattern #2 (4) | 2007/02/13 |
|---|---|
| Strategy Pattern #1 (3) | 2007/02/09 |
이올린에 북마크하기
이올린에 추천하기





Prev