프로그램/web server2015. 1. 8. 17:20

TechNet 홈 >  SharePoint Team Services 관리자 안내서 >  부록

wwwroot 디렉터리 및 저장소 위치

이 부록에서는 SharePoint™ 팀 웹 사이트나 Microsoft® FrontPage 확장 웹 사이트를 만들 때 각 루트 웹이나 하위 웹에 추가되는 폴더와 파일에 대해 설명합니다.

SharePoint 팀 웹 사이트의 파일 및 폴더

폴더 파일 용도
Default.htm SharePoint 팀 웹 사이트 홈 페이지
  Postinfo.html 사용자가 팀 웹 사이트에 파일을 게시할 수 있도록 함
  _vti_inf.html 클라이언트 응용 프로그램과 SharePoint Team Services를 실행하는 서버 간의 통신에 대한 정보 포함
_layouts *.htm 팀 웹 사이트의 페이지 레이아웃
_layouts Search.htx, search.idq, query.iqy 팀 웹 사이트에서 검색을 지원하기 위한 쿼리 파일
_layouts\_vti_cnf *.htm 상위 폴더의 *.htm 파일에 대한 메타데이터
_layouts\_vti_cnf Search.htx, search.idq, query.iqy 상위 폴더의 쿼리 파일에 대한 메타데이터
_layouts\images *.gif 페이지 레이아웃에 사용되는 이미지
_layouts\images\_vti_cnf *.gif 상위 폴더의 이미지에 대한 메타데이터
_layouts\styles *css 팀 웹 사이트의 스타일시트
_layouts\styles\_vti_cnf *css 상위 폴더의 스타일시트에 대한 메타데이터
_vti_cnf Default.htm 팀 웹 사이트 홈 페이지에 대한 메타데이터
_vti_pvt *.btr

웹 사이트의  데이터베이스

_vti_pvt *.cnf 팀 웹 사이트 구조에 대한 메타데이터를 저장하는 파일
_vti_pvt *.lck 동시에 웹 리소스를 액세스할 수 없도록 파일을 잠금
_vti_script Search.idq 팀 웹 사이트에 검색을 지원하기 위한 쿼리 파일
Lists\Announcements   공지 사항 목록을 만드는 데 사용되는 페이지와 양식
Lists\Announcements\_vti_cnf   상위 폴더의 *.htm 파일에 대한 메타데이터
Lists\Contacts   연락처 목록을 만드는 데 사용되는 페이지와 양식
Lists\Contacts \_vti_cnf   상위 폴더의 *.htm 파일에 대한 메타데이터
Lists\Events   이벤트 목록을 만드는 데 사용되는 페이지와 양식
Lists\Events\_vti_cnf   상위 폴더의 *.htm 파일에 대한 메타데이터
Lists\General Discussion   일반 토론 목록을 만드는 데 사용되는 페이지와 양식
Lists\General Discussion\_vti_cnf   상위 폴더의 *.htm 파일에 대한 메타데이터
Lists\Links   링크 목록을 만드는 데 사용되는 페이지와 양식
Lists\Links\_vti_cnf   상위 폴더의 *.htm 파일에 대한 메타데이터
Lists\Tasks *.htm 작업 목록을 만드는 데 사용되는 페이지와 양식
Lists\Tasks Task.ics SharePoint 팀 웹 사이트에서 SharePoint Team Services와 호환되는 Microsoft Outlook® 2002 일정이나 주소록으로 작업을 내보내는 데 사용되는 템플릿
Lists\Tasks\_vti_cnf   상위 폴더의 *.htm 파일에 대한 메타데이터
Lists\Tasks\_vti_cnf Task.ics 상위 폴더의 Task.ics 파일에 대한 메타데이터
Shared Documents\_vti_cnf Fp_folder_info 공유 문서 폴더에 대한 메타데이터. 폴더에 목록이 들어 있는지 여부나 익명 사용자가 문서를 업로드할 수 있는지 여부 등에 대한 정보를 포함합니다.
Shared Documents\Forms *.htm 공유 문서 목록을 만드는 데 사용되는 페이지와 양식
Shared Documents\Forms\_vti_cnf *.htm 상위 폴더의 *.htm 파일에 대한 메타데이터


FrontPage 확장 웹 사이트의 파일 및 폴더

폴더 파일 용도
Postinfo.html 사용자가 팀 웹 사이트에 파일을 게시할 수 있도록 함
_vti_inf.html 클라이언트 응용 프로그램과 SharePoint Team Services를 실행하는 서버 간의 통신에 대한 정보 포함
_borders Top.htm, Left.htm, Right.htm, Bottom.htm 공유 테두리를 사용하는 페이지에 포함된 공유 테두리 정의 파일
_derived *.htx, *.gif FrontPage에서 동적으로 생성하고 언제든지 다시 생성할 수 있는 파일(예: 검색 구성 요소와 GIF 이미지의 복합 텍스트가 만드는 *.htx 파일)
_fpclass *.class 몇 가지 FrontPage 기반 기능을 구현하는 컴파일된 Java 클래스 파일
_overlay *.gif GIF의 텍스트와 탐색 단추용 오버레이 파일. 이러한 파일은 단추나 배너 이미지의 맨 위에 오버레이되어 GIF나 탐색 단추의 복합 이미지에 완전한 텍스트를 만드는 투명 GIF입니다.
_private   이 폴더는 각 FrontPage 확장 웹 사이트에 만들어집니다. 이 폴더는 사이트 방문자가 볼 수 없는 사용자 파일을 저장하기 위한 것입니다.
_themes 각 테마의 *.gif, *.inf, *.css, *.utf8, *.jpg 파일 테마 저장소. 웹 사이트에 적용되는 각 테마는 _themes 디렉터리의 고유한 이름이 지정된 하위 디렉터리에 업로드됩니다.
_vti_bot   FrontPage SDK를 사용하여 만든 사용자 지정 FrontPage 기반 구성 요소(WebBot)에 사용됩니다. 이 디렉터리에 설치된 사용자 지정 구성 요소는 제작자가 구성 요소를 삽입할 때 제작자의 시스템에 선택적으로 다운로드됩니다.
_vti_cnf   FrontPage 확장 웹 사이트의 각 HTML 페이지와 그래픽 파일에는 같은 이름의 구성 파일이 사용됩니다.

각 구성 페이지에는 페이지를 편집한 마지막 제작자와 파일과 관련된 편집자와 같은 요소를 식별하는 이름-값 쌍이 있습니다.

_vti_log   FrontPage 확장 웹 사이트에 대한 정보가 있는 로그 파일 포함
_vti_map   이미지 맵 파일 포함
_vti_pvt   FrontPage 확장 웹 사이트에 대한 설정 포함
  _x_todo.htm 할 일 모음의 현재 설정 포함
  _x_todoh.htm 할 일 모음의 변경 내용 포함
  Access.cnf HTTP 서버별 액세스 제어 정보 포함
  Bots.cnf FrontPage SDK를 사용하여 만든 FrontPage 기반 구성 요소(WebBot)에 사용됨
  Botinfs.cnf 사용자 지정 FrontPage 기반 구성 요소(WebBot) 정보 목록
  Deptodoc.btr 웹의 종속성 데이터베이스
  Doctodep.btr 웹의 종속성 데이터베이스
  Frontpg.lck 루트 웹 전용. 파일을 잠가 동시에 웹 서버 리소스를 액세스할 수 없도록 합니다. 유휴 시간에는 0바이트 파일이어야 합니다. IIS 서버에서는 이 파일이 웹 사이트 컨텐트 영역의 _vti_pvt 디렉터리가 아닌
C:\Program Files\Microsoft FrontPage\50\Temp에 있습니다.
  Linkinfo.cnf 현재 웹에 없는 URL에 대한 백 링크
  Service.cnf 웹에 대한 메타 정보 포함
  Service.pwd 암호화된 암호 파일 포함(Apache에만 해당)
  Services.cnf 하위 웹 목록 포함
  Services.org Server Extensions를 다시 설치할 때 Services.cnf에 대한 기본으로 사용되어 하위 웹이 루트 웹의 하위 디렉터리로 만들어지지 않도록 하며, Server Extensions를 제거했을 때만 있는 파일입니다.
  Structure.cnf FrontPage 확장 웹 탐색 정보 저장소 포함
  Svcacl.cnf 하위 웹에 고유한 사용 권한 설정과 IP 제한이 있는지 여부를 저장하여 Server Extensions를 다시 설치할 때 하위 웹에 올바른 사용 권한 설정을 다시 적용하는 데 사용되는 파일
  Uniqueperm.cnf 이 파일이 있으면 하위 웹에 루트 웹에서 상속하는 사용 권한과 다른 고유한 사용 권한이 있음을 나타냅니다. 하위 웹에만 있으며 IIS에서만 사용됩니다.
  Writeto.cnf 웹 사용자가 데이터를 쓸 수 있는 파일(예: 결과 저장 양식 처리기 결과 파일)에 대한 백 링크. 웹 사용자가 데이터를 쓸 수 있는 파일은 일반 웹 컨텐트보다 보안 설정이 취약합니다.
_vti_script *.idq IIS의 인덱스 서버를 사용할 때 FrontPage 검색 구성 요소가 만든 쿼리 파일
_vti_txt   이 폴더에는 WAIS 검색 엔진에 대한 텍스트 인덱스만 포함되며, IIS의 인덱스 서버에서는 사용하지 않습니다.
fpdb   FrontPage에서 데이터베이스에 저장 양식 처리기의 일부로 Microsoft Access 데이터베이스를 만들면 데이터베이스가 이 폴더에 저장됩니다. FrontPage에 포함된 예제 데이터베이스도 이 폴더에 저장됩니다.
images   FrontPage 확장 웹 사이트에 사용되는 이미지 파일 포함


Posted by wrnly
프로그램/Mysql2014. 10. 23. 23:59
MySQL원격접속

얼마전 MySQL원격 접속 하는데 있어서 경험을 많이 했습니다. ㅡㅜ

역시 모르는게 죄일까요?

그럼, 경험해서 얻은 내용을 적어 보도록 하겠습니다.

저희 환경은 이렇습니다.

데스크탑:192.168.25.4

노트북:192.168.25.5

둘다 MySQL5.1버전이 깔려 있습니다.

먼저....전 그냥 접속하면 다되는줄 알았습니다.

이렇게....

capture.png

그런데 위와 같이 영어는 잘모르지만 어쨌든 접속이 안되는.....

그래서 검색을 해봤습니다.

[참고출처] - http://www.bbong.net/216

이런저런 내용이 있었고 내용을 종합해 본 결과 mysql의 host, db, user테이블의 정보를 저장 해야 하더라구요...

capture02.png

뭘 어떻게 저장해야되나 테이블 정보를 한번 보겠습니다.

mysql> show columns from db;

capture03.png

mysql> show columns from host;

capture04.png

mysql> show columns from user;

capture05.png

빨간색 네모로 표시된 부분을 보시면 좀 감이 오시죠?

모르셔도 뭔가 연관성은 있겠다고 느낌이 오십니까?

안오시면 별수 없고.....ㅋ

외부에서 접속할려면 접속권한이 필요한것 같습니다.

먼저 user테이블의 Host, User, Password이부분은 접속할수 있는 호스트와 유저 및 패스워드를 저장하는 곳입니다.

그다음 host테이블 Host, Db여기는 호스트 정보와 그 호스트가 접속할수 있는 Db를 지정하는 곳입니다.

마지막으로 db테이블 이곳엔 host, user, db컬럼이 있습니다. db에 접속할수 있는 호스트, 유저, db를 저장하는곳입니다.

그렇다면, 외부에서 접속 할수 있게 할려면 어떻하면 될까요?

그렇습니다. 데이터를 넣어주면 됩니다...어떻게....잘......^^;

만사가 다 귀찮다 난 그냥 접속만 할 수 있게만 해주면 된다....싶으면, 아래 내용을 그대로 넣어 주시면 됩니다.

(제가 그랬거든요... 일단접속하고...안되면 그다음에 또 삽질해야죠! 삽질하면 또 올리 겠습니다. ^^;)

mysql>insert into user values('192.168.25.4', 'root',password('패스워드'),'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y',' ',' ',' ',' ',0,0,0,0);

일단 저는 이걸로 접속이 되었습니다.

capture06.png

mysql> show tables;

capture07.png

만약 접속이 잘 안되신다면...방화벽 때문에 접속이 안될수 있습니다.

mysql접속 포트인 3306포트를 방화벽에서 예외처리 해주세요.

방법은 제어판->시스템 및 보안->Windows방화벽->고급 설정->인바운드 규칙을 누르고 왼쪽부분에서 새규칙->포트를 체크 한다음 다음버튼

->특정 로컬 포트에 3306설정하고 다음버튼->연결허용체크한다음 다음버튼->다음 버튼->이름에 MySQL입력하고 마침

이상입니다.

'프로그램 > Mysql' 카테고리의 다른 글

MySQL과TABLE 생성  (0) 2013.01.08
[MySQL] MySQL 접속, 관리 프로그램  (0) 2013.01.08
Mysql 정리  (0) 2011.07.21
[MySQL] 계정관리(생성,삭제) - GRANT  (0) 2011.07.21
MySQL 명령어  (0) 2011.05.15
MySQL INDEX  (0) 2011.05.15
윈도우 자바개발환경을 위한 Mysql 5 설치방법  (0) 2011.02.25
Posted by wrnly
프로그램/java&eclipse2014. 8. 14. 21:33



 JAR 이란?
 


클래스 파일의 효율적인 배포를 위해 여러 클래스 파일들을 하나로 묶어 단일의 파일로 만드는 포멧. 로컬(local)상에서 편리한 관리는 물론 자바(Java) 프로그램 실행 중에 원격지에서 하이퍼텍스트 전송 규약(HTTP) 등을 통해 내려받기(download)되어 바로 사용이 가능하다.            -네이버 용어사전-

 JAR 생성 방법
 

1. 일반 파일
   


Sample1.java, Sample2.java, Sample3.java 클래스 파일을 만들었습니다.


File(1) → Export(2) 선택하면 Export 창이 나옵니다.
JAR File(3) 을 선택하고 Next(4) 클릭한다.


Browse(1) 을 클릭하여 jar 파일을 저장할 장소를 선택하고 Next(2) 을 클릭합니다.


Next 을 클릭한다.


클래스 파일 1개를 jar 파일로 만드는 작업은 FInish 를 클릭하면 되지만 여러개의 클래스 파일을 jar 파일로 만들기 위해서는 Main class 를 지정해줘야 합니다. Main class 를 지정하지 않으면 Sample1, 
Sample2, Sample3 의 클래스 파일 중 어느 파일이 Main class 인지 알 수가 없어서 jar 파일 실행시 에러를 발생합니다.

2. 패키지 파일
   


Sample1, 
Sample2, Sample3 클래스 파일을 Pack 패키지로 묶어서 jar 파일을 생성하였습니다. 이클립스에서는 일반파일의 jar 파일 생성 방법과 동일합니다.


일반 클래스 파일과 패키지 클래스 파일 을 각각 Sample.jar 과 Sample_pack.jar 로 만들고 jar 파일을 압축을 해제한 후 비교를 했습니다.

1. 클래스 파일 위치가 다르다.
일반 클래스 파일로 만든 jar 파일 안에는 클래스 파일이 바로 존재하지만, 패키지 클래스 파일로 만든 jar 파일 안에는 Pack 디렉토리(패키지) 안에 클래스 파일이 존재합니다.

2. MANIFEST.MF 파일의 Main-Class 가 다르다.
일반 클래스 파일로 만든 jar 파일의 Main-Class 는 클래스명을 사용하지만, 패키지 클래스 파일로 만든 jar 파일의 Main-Class 는 패키지명.클래스명 을 사용합니다.

 JAR 실행 방법
 

Browse 을 클릭하여 Main class 를 선택하고 Finish 를 클릭하면 Sample.jar 파일이 생성됩니다.
jar 파일은 더블클릭으로 실행하거나 java -jar 파일.jar 명령어로 실행시킬 수 있습니다.


JAR 파일을 실행파일(EXE) 파일로 만들기  ☞  http://pangsan.tistory.com/125
Posted by wrnly
프로그램/ ftp2014. 8. 10. 02:48

기존에 폴더에서 ftp://xxx.xxx.xxx.xxx 를 입력하여 들어가면


폴더가 유지 된 채로 ftp 서버의 내용이 폴더처럼 보였는데

구글 크롬을 재설치 한 이후부터 폴더로 들어가지는게 아니라

폴더에서 해당 ftp 서버 주소를 입력하면 구글 크롬을 통해서

해당 ftp 사이트에 접속이 됩니다. ftp 서버 자체 문제는 아니고

제 컴퓨터만 해당되는 사항인데 인터넷이 아닌 폴더를 유지한채로

ftp 서버에 접속하는 설정을 어떻게 하는지 궁금합니다.

------------------------------------------------------------------------

FTP를 탐색기에서 들어갈려고하나 크롬 설치후에 크롬을 통해서 접속이 되시는군요.

 

즉, 윈도우 탐색기 형태로 접속하고 싶으신 거군요.

 

Unable to access FTP Sites using Windows Explorer


간략하게 설명드리면
구글 크롬이 설치되면서 FTP의 설정이 변경됩니다.

이것을 레지스트리의 수정을 통하여 해결 합니다.


[HKEY_CLASSES_ROOT\ftp]
@="URL:File Transfer Protocol"
"EditFlags"=dword:00000002
"ShellFolder"="{63da6ec0-2e98-11cf-8d82-444553540000}"
"Source Filter"="{E436EBB6-524F-11CE-9F53-0020AF0BA770}"
"FriendlyTypeName"="@C:\\WINDOWS\\system32\\ieframe.dll.mui,-905"

"URL Protocol"=""

[HKEY_CLASSES_ROOT\ftp\DefaultIcon]
@=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\
00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,75,00,72,00,\
6c,00,2e,00,64,00,6c,00,6c,00,2c,00,30,00,00,00

[HKEY_CLASSES_ROOT\ftp\Extensions]
".IVF"="{C69E8F40-D5C8-11D0-A520-145405C10000}"


[HKEY_CLASSES_ROOT\ftp\shell]
@="open"

[HKEY_CLASSES_ROOT\ftp\shell\open]

[HKEY_CLASSES_ROOT\ftp\shell\open\command]
@="\"C:\\Program Files\\Internet Explorer\\IEXPLORE.EXE\" %1"

[HKEY_CLASSES_ROOT\ftp\shell\open\ddeexec]
@="\"%1\",,-1,0,,,,"
"NoActivateHandler"=""

[HKEY_CLASSES_ROOT\ftp\shell\open\ddeexec\Application]
@="IExplore"

[HKEY_CLASSES_ROOT\ftp\shell\open\ddeexec\ifExec]
@="*"


[HKEY_CLASSES_ROOT\ftp\shell\open\ddeexec\Topic]
@="WWW_OpenURL"




위는 관련된 내용이며,
첨부파일을 다운로드하시고 실행하시면 해결되실 겁니다.

파일을 올릴수없어서 링크 올립니다.


궁금증은 위 포스팅 댓글로 남겨주세요.


'프로그램 > ftp' 카테고리의 다른 글

FTP서버 만들기 - IIS를 이용  (0) 2011.08.24
Posted by wrnly
프로그램/java&eclipse2014. 3. 23. 21:19

 

? 

소켓에서 우리가 입력한 문자열을 바이트알갱이로 바꿔서 OuputStream으로 밀어내면

서버소켓에서는 InputStream으로 읽어드린다.

String타입을 다룰때는 BufferedWriter가 더 편하고 좋다.

하지만 사진이나 파일전송은 바이트알갱이로 되어있는것은 OutputStream을 쓰면 된다

 

package test.ex1;

import java.net.Socket;

/*
 *  [ 클라이언트 프로그램 작성순서 ]
 * 
 *   1. Socket 객체생성 : 생성됨과 동시에 서버에 소켓 접속을 시도함
 *    접속할 서버의 ip주소와 port번호가 필요함
 *   2. Socket 객체를 이용해서 서버와 통신하기
 * 
 *   3. 필요한 작업을 완료 후 Socket 닫아주기
 * 
 */
public class Client {
  public static void main(String[] args) {
  //필요한 객체 초기화 하기
   Socket socket=null;
   try{
    //Socket객체를 생성하면서 ip 주소와 port 번호전달
    socket = new Socket("127.0.0.1",500);   => 객체생성

    System.out.println("서버에 접속 성공");
   }catch(Exception e){
    e.printStackTrace();
   }finally{
    try{
     socket.close();
    }catch(Exception e){}
   }
 }

 

-----------------------

 

package test.ex1;

import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

/*
 *  [서버 프로그램 작성순서 ]
 *
 *   1. ServerSocket 객체를 생성한다. (port 번호 필요)
 *   2. 클라이언트의 접속을 기다리고 있다가 접속해오면 이를 받아들인다.
 *   3. Socket 객체를 클라이언트와 통신을 하고 ServerSocket 객체는 다시
 *    클라이언트의 접속을 기다린다.
 *   4. 클라이언트와 접속을 종료하려면 socket 객체를 닫아준다.
 */
public class Server {
 public static void main(String[] args) {
  //필요한 객체 초기화
  ServerSocket server=null;
  Socket socket= null;
  try{
   //5000번 port 를 열고 클라이언트의 접속을 기다린다.
   server = new ServerSocket(5000);
   System.out.println("클라이언트의 접속을 기다리는 중.....");
   //접속 요청이 올때 까지 블로킹 되는 메소드
   socket = server.accept(); //잡혀있어요.. 메소드를 리턴하지 않아요.누군가접속을하면
   //클라이언트의 ip주소에 대한 정보를 갖는 객체 얻어오기
   InetAddress iAddr=socket.getInetAddress(); //반환되는 소켓을 받아온다
   //ip주소 얻어오기
   String clientIp=iAddr.getHostAddress();
   System.out.println(clientIp+"가 접속했습니다.");
   
  }catch(Exception e){
   e.printStackTrace();
  }finally{
   try{
    socket.close();
    socket.close();
   }catch(Exception e){}
  }//try
 }//main()

---------------------------------------------


 

 

Posted by wrnly
프로그램/java&eclipse2014. 3. 23. 21:18

사용환경 : win2000, apache tomcat 4.0.2

다른 jsp는 제대로 되는데...
class연결하면 안되거든요...

아래 소스입니다.
hello.jsp 소스입니다.
ROOT밑에 test라는 폴더를 만들어 넣었습니다.

<html>
<title>use bean</title>
<body>
<jsp:useBean id="hello" class="HelloBean"/>
<jsp:setProperty name="hello" property="name" param="name" /> Hello, <jsp:getProperty name="hello" property="name" />
</body> </html>

HelloBean.java 소스입니다.
javac HelloBean.java해서
HelloBean.class를 ROOT밑에 WEB-INF밑에 classes밑에 넣었습니다.

public class HelloBean implements java.io.Serializable {
String name;

public HelloBean () {
this.name = "World";
}
public String getName () {
return name;
}
public void setName (String name) {
this.name = name;
}
}

 

-----------------------------------

<%@ page import="HelloBean"%> 줄을 추가해주세요.

Posted by wrnly
프로그램/java&eclipse2014. 3. 23. 21:16

1. Inner class

  • 클래스 자체가 다른 클래스내부 또는 메소드 내부에 존재하는 것을 말한다.
  • 중첩 클래스라고도 불린다.
  • 정적(static) 클래스는 내부 클래스로 인정되지 않는다.
  • interface는 무조건 정적으로 선언되므로 내부 인터페이스란 아예 존재하지 않는다.
  • 특정 외부 클래스에게는 public으로 선언되고 다른 클래스에게는 private로 접근 제어를 하고자 할때 사용된다.

- Inner class의 종류

  • 중첩된 최상의 클래스
  • 클래스 멤버 클래스
  • 지역 클래스
  • 익명 클래스

2. 중첩된 최상의 클래스

  • 클래스 안에서 특정 메소드에 소속되지 않는 상태로 선언되고 사용되는 클래스
  • 다른 클래스안에서 정적(static)형으로 선언된 클래스.
  • 자신이 포함된 클래스의 정적 메버들을 다룰 수 있다.
  • 다른 클래스를 작성할 때 'import'문을 사용할 수 있다.
  • 인터페이스는 무조건 묵시적으로 정적으로 선언된다.

1) 실예

  1. // =====================================================
  2. // static inner class Test
  3. // make : pwg
  4. // date : 2003
  5. // =====================================================
  6. class innerClass3
  7. {
  8.         static int su=10;
  9.         
  10.         int su2=20;
  11.         
  12.         // 중첩된 최상위 클래스
  13.         static class test
  14.         {
  15.                 int su3=su;
  16.         
  17.         }
  18.         
  19.         public static void main(String args[])
  20.         {
  21.                 innerClass3 ic3=new innerClass3();
  22.                 System.out.println(ic3.su);
  23.                 
  24.                 // inner class object
  25.                 innerClass3.test t=new innerClass3.test();
  26.                 System.out.println(t.su3);
  27.                 
  28.         }
  29. }

3. 클래스 멤버 클래스

  • 다른 클래스의 비정적클래스로 선언된 클래스
  • 외부 클래스의 모든 멤버들을 제어할 수 있다.
  • 외부 클래스가 인스턴스화 될 때 포함되는 형식으로 존재한다. 따라서 외부 클래스가 인스턴스화 되지 않으면 참조할 수 없다.
  • 이벤트를 처리할 때 가장 많이 사용하는 방법이다.
  1. // =====================================================
  2. // member inner class test
  3. // make : pwg
  4. // date : 2003
  5. // =====================================================
  6. import java.awt.*;
  7. import java.awt.event.*;
  8. class innerClass4 extends Frame
  9. {
  10.         Button b=new Button("exit");
  11.         myActionListener myAction = new myActionListener();
  12.         
  13.         public innerClass4()
  14.         {
  15.                 setLayout(null);
  16.                 setSize(400,400);
  17.                 b.setBounds(100,100,100,100);
  18.                 b.addActionListener(myAction);
  19.                 add(b);
  20.         }
  21.         
  22.         public static void main(String args[])
  23.         {
  24.                 innerClass4 ic4=new innerClass4();
  25.                 ic4.setVisible(true);
  26.         }
  27.         
  28.         // method type inner class
  29.         class myActionListener implements ActionListener
  30.         {
  31.                 public void actionPerformed(ActionEvent ev)
  32.                 {
  33.                         System.exit(0);
  34.                 }
  35.         }
  36. }

4. 지역 클래스(Local Class)

  • 메소드의 블록안에서 선언된 클래스를 말한다.
  • 정적으로 선언될 수 없다.
  • 비정적인 메소드에서 선언된 클래스인 경우 자신이 포함된 클래스의 모든 멤버를 참조할 수 있다.
  • 정적 메소드에서 선언된 클래스인 경우는 자신이 포함된 클래스의 정적 멤버들만 참조할 수 있다.

1) 실예

  1. // ==================================================
  2. // inner Class test
  3. // Local inner class
  4. // make : pwg
  5. // date : 2003.
  6. // ==================================================
  7. public class innerClass2
  8. {
  9.         String name = "park";
  10.         public innerClass2()
  11.         {
  12.         }
  13.         
  14.         public void method()
  15.         {
  16.                 class inner // 메소드안에서 선언되 클래스(Local Class)
  17.                 {
  18.                         public void prn()
  19.                         {
  20.                                 System.out.println(name);
  21.                         }
  22.                 }
  23.                 
  24.                 inner inc=new inner();
  25.                 inc.prn();
  26.         }
  27.         
  28.         public static void main(String args[])
  29.         {
  30.                 innerClass2 ic2=new innerClass2();
  31.                 ic2.method();
  32.                 
  33.         }
  34. }

5. 익명 클래스(Anonymous Class)

  • 클래스의 상속과 객체 생성을 동시에 할수 있다.
  • 객체를 한번만 생성하거나, 클래스가 간단한 구조로 되어 있을때 사용한다.
  • 정적(static)형 멤버를 가지지 못한다.

1) 선언형식

  1. // 클래스 유형
  2. new 클래스생성자(){
  3.         멤버 선언...
  4.         {초기화 블럭}
  5.          메소드 선언(){ ... }
  6. ...
  7. }
  1. // 인터페이스 유형
  2. new 인터페이스명(){
  3.          메소드명(){};
  4. ....
  5. }

2) 실예

  1.  // ==================================================
  2. // inner Class test
  3. // Anonymous inner class
  4. // make : pwg
  5. // date : 2003.
  6. // ==================================================
  7. import java.awt.*; // Frame을 사용하기 위해
  8. import java.awt.event.*; // ActionListenner를 사용하기 위해
  9. public class innerClass1 extends Frame
  10. {
  11.         Button exitButton = new Button("Exit");
  12.         public innerClass1()
  13.         {
  14.                 this.setSize(400,400);
  15.                 this.setLayout(null);
  16.         
  17.                 exitButton.setBounds(100,100,100,100);
  18.                 exitButton.addActionListener(
  19.                         // 익명 클래스 시작
  20.                         new ActionListener()
  21.                         {
  22.                                 public void actionPerformed(ActionEvent ev)
  23.                                 {
  24.                                         System.exit(0);
  25.                                 }
  26.                         }       
  27.                         
  28.                 );
  29.                 this.add(exitButton);
  30.         }
  31.         
  32.         public static void main(String args[])
  33.         {
  34.                 innerClass1 ic=new innerClass1();
  35.                 ic.setVisible(true);
  36.         }
  37. }
Posted by wrnly
프로그램/java&eclipse2014. 3. 23. 21:14

public 은 모든 class 에서 접근이 가능한 개방형 생성자 이고

private는 자신의 class 내에서만 접근이 가능한 제한적 생성자 인걸로 알고 있습니다.

protected는 자기 자신 또는 상속받은 클래스나 sub 클래스에서 접근이 가능한

-----------------------------------------------------------------------------------


다음 클래스는 모든 엔터프레임을 중앙에서 실행 시킬 수 있도록 하는 클래스입니다. 일시 정지 기능도 있습니다.
package org.raongames
{
import flash.display.DisplayObject;
import flash.display.Shape;
import flash.events.Event;

public class CentralEnterFrame
{
private static var me:CentralEnterFrame=new CentralEnterFrame();
private var _do:DisplayObject;
private var _list:Vector.<Function>;//function 관리용
public function CentralEnterFrame()
{
if(me!=null) {
throw new Error("Singleton");
}
init();
}
private function init():void
{
_do=new Shape;//EnterFrame
_list=new Vector.<Function>;
start();
}
public static function get obj():CentralEnterFrame {
return me;
}
public function addListener(func:Function):void
{
if(func==null) {
throw new ArgumentError("Func must not be null");
}
if(_list.indexOf(func)>=0) { //등록 되어있으면 추가 안함
return;
}
_list.push(func);
}
public function removeListener(func:Function):void
{
if(func==null) {
throw new ArgumentError("Func must not be null");
}
var i:int=_list.indexOf(func);
if(i==-1) return;
_list.splice(i, 1);
}
public function start():void
{
_do.addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
public function stop():void
{
_do.removeEventListener(Event.ENTER_FRAME, onEnterFrame);
}
private function onEnterFrame(e:Event):void
{
for each(var f:Function in _list) {
f();
}
}
}
}


메서드의 내용보다는 역할에 주목하시길 바랍니다.
참고로 이 클래스는 싱글턴 패턴이란것을 이용하고 있습니다. 당장 배울 때 중요한것은 아니니까
속성 me랑 getter메서드 obj()는 무시하시길 바랍니다.

여기서 _do는 displayObject로 EnterFrame이벤트를 걸기 위해서 사용하는 것입니다. 근데 외부에서 이 변수를 굳이 알고 있어야 할 이유는 없죠. 외부에서 원하는것은 엔터프레임을 모두 중앙에서 관리한다는 것이지, 중앙에서 관리하기 위해서 어떤 것들이 필요한지는 몰라도 되죠. 즉 영화를 보려고 영화관에 갔으면 영화만 보고 오면되지 굳이 어디서 영사기를 쏘고 어디서 필름을 넣어주고 하는 것들은 몰라도 된다는 것입니다. 마찬가지로 _list에 보관되어 있는 엔터프레임마다 실행할 함수의 목록들을 외부에서는 몰라도 됩니다. 그래서 private인 것입니다. 클래스는 외부에서 필요로 하는 것만 노출시키면 됩니다. 이 클래스에서도 외부에서 리스너를 등록하고 해지하는 기능이 필요하기 때문에 addListener()와 removeListener()을 public 으로 설정하고 있습니다. 이 메서드 마저 private이라면 외부에서 리스너를 등록도 해지도 못하겠죠. start()와 stop()도 일시정지를 위해서 외부에서 필요하는 기능이기 때문에 public으로 둡니다. 반면 onEnterFrame()은 _do의 엔터프레임에 걸린 리스너인데 외부에서는 이것을 필요로 하지도 않고 알 필요도 없습니다. 매 프레임마다 어떻게 등록된 리스너들을 다 실행 시켜 주는지 알게 뭡니까? 그냥 쓰면되지. 그리고 이 onEnterFrame()같은 경우는 외부에서 알면 안됩니다. 외부에서 강제로 onEnterFrame을 호출해서 임의로 리스너들을 실행 시키는 경우는 원하지 않기 때문이지요.

※여기서 말하는 외부는 클래스의 객체를 생성해서 쓰는 곳을 말합니다.
var centrelEnterFrame:CentralEnterFrame = new CentralEnterFrame();(사실 이 클래스는 싱글턴이라서 이렇게 객체를 생성하지는 않지만.... var centralEnterFrame:CentralEnterFrame = CentralEnterFrame.obj; 이렇게 하죠.)
centralEnterFrame.addListener(function () { trace("htht"); });
좀 도움이 되셨을라나요?
Posted by wrnly