레이블이 JAVA CAST인 게시물을 표시합니다. 모든 게시물 표시
레이블이 JAVA CAST인 게시물을 표시합니다. 모든 게시물 표시

2013년 8월 8일 목요일

스트럿츠 예제 Constants.java [오라클자바닷넷커뮤니티강좌교육]

package oraclejavanew;

public class Constants {
        /**
        * 로그인한 사용자의 LoginForm이 저장될 세션 범위의 Attriute 이름
        */
        public static final String USER_KEY = "user";
       
        /**
        * 로그인한 사용자의 선택 상품을 보관할  세션 범위의 CART
        */
        public static final String CART_KEY = "cart";
       
        /**
        * 로그인한 사용자의 선택 상품을 보관할  세션 범위의 CART(MAP에서 빠져니온 ArrayList)
        * ArrayList안에는 CartItem이 있다.
        */
        public static final String CART_LIST = "cartlist";
       
        /**
        * 로그인한 사용자의 배송지를 보관할  세션 범위의 BAESONGJI
        */
        public static final String BAESONGJI_KEY = "baesongji";
       
        /**
        * 카드 결재시 승인 후 결과 페이지
        */
        public static final String CARD_RESULT_PAGE = "resultpage";
       
        /**
        * 주문번호 생성시 오류 발생한 경우 이동할 페이지
        */
        public static final String ORDER_NO_ERROR = "ordernoerror";
       
       
        /**
        * 무통장 주문완료 후  결과 페이지, 이곳에서 PayAction을 부름...
        */
        public static final String MU_RESULT_PAGE = "muresultpage";
       
       
        /**
        * 로그인한 사용자의 배송지를 보관할  세션 범위의 BAESONGJI
        * ArrayList안에 BaesongjiItem이 들어가 있다.
        *
        */
        public static final String BAESONGJI_LIST = "baesongjilist";
       
       
                     
        /**
        * ActionForward에서 사용되는 값       
        */
        public static final String LOGINOK      = "loginok";
        public static final String LOGIN        = "login";
        public static final String CARTOK      = "cartok";
        public static final String ORDERPAGE    = "orderpage";
        public static final String ORDERMOD    = "ordermod";
        public static final String ORDERCONFIRM = "orderconfirm";
        public static final String LOGOFFOK    = "logoffok";
        public static final String MAIN        = "main";       
        public static final String SHOPINGEND  = "shopingend"; 
        public static final String BADACTION    = "badaction";
       
        public static final String CART      = "/oraclejava/goods/cart.jsp";
        public static final String ORDER      = "/oraclejava/goods/order.jsp";
                       
}

2013년 8월 5일 월요일

(Struts Login Exam)스트럿츠 를 이용한 간단한 로그인 예제

Struts를 이용한 간단한 로그인 예제


오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의) 




이번엔 웹 개발의 전형적인 예로써 사용자의 ID와 Password를 입력 받아 이를 인증 후 결과 페이지로 Forward 시키는 것을 Struts Framework을 이용하여 만들어 보겠습니다.

구성요소들은  다음과 같습니다.

1.        로그인  HTML 페이지
2.        Controller&Model 역할을 하는 LoginAction
3.        ActionForm, 폼빈 역할을 하는 LoginForm
4.        로그인이 성공 이었을 때 분기하는 success.html
5.        로그인이 실패했을 경우 분기하는 fail.html

사용자는 HTML 웹페이지를 이용하여 ID/Password를 입력 후 로그인 버튼을 누릅니다. 이 요청을 Controller 와 Model의 역할을 동시에 수행 하는(이 예제에서…)LoginAction이 이를 받아 폼빈(LoginForm, 사용자가 HTML 폼에서 입력한 정보들이 들어 있다.)을 통해 사용자가 입력 한 정보를 추출 후 인증을 수행 합니다.

폼빈(LoginForm)이 존재 하므로 LoginAction에서는 요청 파라미터를 추출 하는 일은 없습니다. 최근에 발표된 RC2 버전인 경우 매번 폼빈을 생성 할 필요 없이 동적으로 파라미터를 추출 할 수 있도록 했는데 이를 동적 폼빈 이라고 하며 DynaActionForm 클래스를 이용 합니다.

주)이 예제를 이클립스에서 실행 하기 위해서 이전 강좌(Eclipse에서 Struts(HelloWorld))와 같이 struts-test 라는 Tomcat 프로젝트에서 작성을 합니다. 그리고 프로젝트에서 마우스 우측 버튼을 누른 후 속성 - Java Build Path - library - add jars를 하신 후 WEB-INF/lib 아래의 struts를 다운 받아서 푼 jar 파일들을 선택 해 주신 후 아래의 예제를 돌리셔야 합니다.

1.        로그인을 위한 login.jsp를 만듭니다. (struts-test 라는 프로젝트에서 마우스 우측버튼을 누른 후 new , file 한 후 만드세요)

<%@ page language="java" contentType="text/html;charset=euc-kr" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<html:form action="/login">
        ID : < html:text property="id"/><br>
        Password : <html:password property="pwd"/><br>
        <html:submit value="로긴"/>
</html:form>

2.        로그인이 성공 했을 때 분기할 페이지인 success.html을 만듭니다. (struts-test 라는 프로젝트에서 마우스 우측버튼을 누른 후 new , file 한 후 만드세요)
3.       

<html>
        <head><title>로그인 성공 화면</title></head>
        <body>
                로그인이 성공 되었습니다...
        </body>       
</html>

4.        로그인이 실패 했을 경우 분기 할 페이지인 fail.html을 만듭니다. (struts-test 라는 프로젝트에서 마우스 우측버튼을 누른 후 new , file 한 후 만드세요)

<html>
        <head><title>로그인 실패 화면</title></head>
        <body>
                로그인 실패!!
        </body>       
</html>

5.        사용자가 요청 시 넘기는 값들을 빈으로 저장 해 놓기 위해 Request Parameter와 같은 구조를 가지는 폼빈을 만듭니다. LoginForm.java (이클립스인 경우 WEB-INF/src에서 마우스 우측 버튼을 클릭 후 new, class 하신 후 만드세요)

이 클래스는 Form빈으로서 사용자가 입력 한 값을 적절한 변수(프로퍼티)로 설정 해 주는 역할을 합니다. getXXX, setXXX 메소드등을 이용하여 적절한 변수 값으로 설정 되는 것입니다.


package login;
import org.apache.struts.action.*;

public class LoginForm extends ActionForm {
        protected String id;
        protected String pwd;
       
        public String getId() {
                return id;
        }
       
        public String getPwd() {
                return pwd;
        }
       
        public void setId(String id) {
                this.id = id;
        }
       
        public void setPwd(String pwd) {
                this.pwd = pwd;
        }       
}

6.        이번에는 MVC 모델의 컨트롤러 및 모델의 역할을 동시에 수행하는 LoginAction.java 파일을 만듭니다. 아래 파일에서 AuthUser라는 모듈을 자바빈으로 빼 낸다면 이것이 모델에 해당 하게 될겁니다. 본예제에서는 편의상 컨트롤러와 모델의 기능을 통합 시켰습니다.

이 클래스는 사용자가 입력 한 파라미터(id, pwd)를 LoginForm(폼빈)으로부터 받아 이
값을 이용하여 인증을 한 후 적절한 View를 선택 하여 포워딩을 하는 것입니다.

예제의 간결함을 위해 본 예제에서는 AuthUser 메소드는 무조건 인증이 성공됨을 알
리는 true를 리턴 합니다. 이 부분을 Oracle과 같은 DB와 JDBC등을 이용한 적절한
인증을 구현 하시는 것은 여러분들의 몫으로 넘기겠습니다.


package login;

import org.apache.struts.action.*;
import javax.servlet.http.*;
import java.io.*;

public class LoginAction extends Action {
        public ActionForward execute(ActionMapping mapping, ActionForm form,
                                              HttpServletRequest req, HttpServletResponse res) {
                String id = ((LoginForm)form).getId();
                String pwd = ((LoginForm)form).getPwd();
               
                boolean isOK = authUser(id, pwd);
               
                if (isOK) {
                        return (mapping.findForward("success"));
                }
                else {
                        return (mapping.findForward("fail"));
                }               
        }
       
        public boolean authUser(String id, String pwd) {
                //이곳에서 디비에 접속해서 ID와 Password가 맞는지 확인 한다.
                //본 예제에서는 무조건 인증이 된것으로 true를 리턴 합니다
                return true;
        }
}


7.        이번에는 web.xml을 만듭니다. (WEB-INF에서 마우스 우측 버튼을 누른 후 new, file 하신 후 만드세요)

web.xml 파일에서 추가 한 내용은 URL창에 확장자가 .do인 요청이 들어 오면 ora.apache.struts.action.ActionServlet으로 요청을 보내도록 설정을 했습니다. 그런다음 스트럿츠의 설정 파일인 struts-config.xml의 위치를 알려주고 있습니다.

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
  <display-name>Welcome to Tomcat</display-name>
  <description>
    Welcome to Tomcat
  </description>
        <!-- Struts Tag Library Descriptors -->
        <taglib>
            <taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri>
            <taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
        </taglib>
        <taglib>
            <taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
            <taglib-location>/WEB-INF/struts-html.tld</taglib-location>
        </taglib>
        <taglib>
            <taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri>
            <taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
        </taglib>   
       
        <!-- ActionServlet Congif =====================================-->
        <servlet>
                <servlet-name>action</servlet-name>
                <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
                <init-param>
                        <param-name>config</param-name>
                        <param-value>/WEB-INF/struts-config.xml</param-value>
                </init-param>
                <load-on-startup>1</load-on-startup>               
        </servlet>
       
       
        <!-- ActionServlet Mapping ====================================-->
        <servlet-mapping>
                <servlet-name>action</servlet-name>
                <url-pattern>*.do</url-pattern>
        </servlet-mapping>


</web-app>


8.        이번에는 struts 설정을 위한 struts-config.xml을 만듭니다. . (WEB-INF에서 마우스 우측 버튼을 누른 후 new, file 하신 후 만드세요)

이 파일에서는 프로그램에서 사용 할 폼빈을 LoginForm으로 설정 하고 프로그램에서 사용 할 포워딩 이름을 설정 하는데(물론 이 부분은 action 설정에서 할 수도 있지만 전역적으로 설정 하기 위해 global-forwards 로 설정을 했습니다.

그리고 실제 요청을 처리 할 action 부분을 설정 하는데 예제 에서는 URL에 “/login”이 포함되어 있는 경우에 처리하라고 지정 했는데 LoginAction이 그 일을 하는거죠… 또한 폼빈으로 LoginForm을 설정 했습니다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<struts-config>
     
    <!-- ========== Form Bean Definitions ================================== -->
    <form-beans>
        <form-bean name="LoginForm" type="login.LoginForm">         
        </form-bean>       
    </form-beans>
   
 
    <!-- ========== Global Forward Definitions =============================== -->
    <global-forwards>
        <forward name="success" path="/success.html" />
        <forward name="fail" path="/fail.html" />
    </global-forwards>
   
    <!-- ========== Action Mapping Definitions =============================== -->
    <action-mappings>
        <action         
                path="/login"
                type="login.LoginAction"
            name="LoginForm"                       
            validate="false"
        >
        </action>       
    </action-mappings> 
</struts-config>

위에서 주석 만드실 때 주의하세요… <!—다음에 줄 두개짜립니다. “====” 만약 다음과 같이 하시면 Tomcat 시작시 오류 뜹니다.<!-------------- 

그리고 이클립스에서 만드시면 별도로 LoginForm.java나 LoginAction.java를 별도로 컴파일 하실 필요는 없습니다. 브라우저에서 다음과 같이 입력 하신면 로그인 화면이 나타나며 적절한 ID/PWD를 입력하시면 인증이 성공 했다는 success.html이 실행 될겁니다.

실행 후 화면을 보시면 주소창에 /login.do 라고 나타나 있을 것입니다. 이 같이 함으로써 사용자의 입장에서는 마지막 결과가 어느 페이지에서 나오는지를 알 수가 없습니다.(멋지죠^^) 당연히 직접 그 페이지로 접근 한다는 것은 불가능 합니다.

그러므로 success.jsp와 같은 결과 페이지를 만드는 사람과 Action등을 만드는 사람의 업무가 분리가 가능 하다는 이야기 입니다. 결국 이러한 장점이 MVC 모델의 장점이 되는거구요…

다음 강좌부터는 이 로그인 예제를 하나씩 기능을 추가해 가도록 하죠^^

건투를 빕니다, 오타 주의 하세요~~~

2013년 8월 3일 토요일

실습과 예제를 통해 Spring Framework3.2를 배우는 과정, (개발과정)Ajax,jQuery,MyBatis&Spring3.X개발자과정(평일야간)

실습과 예제를 통해 Spring Framework3.2를 배우는 과정, (개발과정)Ajax,jQuery,MyBatis&Spring3.X개발자과정(평일야간)


강좌명 (개발과정)Ajax,jQuery,MyBatis&Spring3.X개발자과정(평일야간)
교재 자체교재 or PDF 무료 제공
강좌 일정 08월09일(금) ~ 09월04일(수)((평일야간) 19:00~22:00, 14일) 총 42시간
강의 장소 [B강의장]구로디지털단지역2번 출구-> 미니스톱끼고 우회전 -> 100m 직진 후 골목길 끝에서 이마트방향 우회전 -> 50m 직진 후 우체국 옆골목으로 길건너서 직진 -> 150미터 직진 후 JnK 타워에서 우회전 -> 50미터 직진 후 우측에 코오롱빌란트2차 803호 (구로구 구로3동 222-8 코오롱디지털타워 빌란트2차 803호)
[약도보기]
수강절차 - 강좌내용 확인
- 전화 또는 홈페이지(www.onjprogramming.co.kr)를 통한 수강지원 및 수강료 결제(무통장입금, 온라인 카드결제)
- 고용보험 가입자(재직자)인 경우 고용보험환급 관련 서류 제출
- 수강전 : 커리큘럼 및 장소에 대해 다시 한번 공지
- 교육 전 설문 작성(간단한 개발 경력, 수강 목적, 강좌진행방식 등)
- 강좌 수강
- 수강후 : 교육 후 설문 작성
수강료 - 680,000원
[고용주환급]대기업:20만원 전후,중소기업:270,000원
[개인수강지원(개인환급)]정규직 504,000 ,비정규직:전액환급
대기업(상시근로자 300인 이상 대기업)은 개인환급 불가합니다.

재직자 내일배움카드 : 정부지원금 80% 자기부담금 20%
(구 능력개발카드 명칭이 내일배움카드로 변경 / 연간 총한도 200만원)
수강료
입금안내
- 온/오프라인 카드결제, 계좌이체(수강안내->입금안내 참조)
문의사항 02-851-4790 번으로 연락 부탁 드립니다.
교육개요 (스프링 개발자 과정은 오엔제이프로그래밍 교육 센터 입니다!)

본 과정은 수료 후 자바기반 환경에서 스프링 웹개발이 가능하도록 하는 속성 스프링 개발자 과정 입니다. Ajax, jQuery를 기본으로, 스프링 개발을 위한 최소 구성요소(IoC, AOP, JDBC, MVC)를 학습하고 MyBatis, Hibernate를 학습 후 활용성이 높은 게시판 예제, XPlatform&Spring을 단계별로 학습하면서 이전에 배운 요소기술들을 하나씩 주입시켜 개발해 나가는 개발자 실습 과정 입니다. 게시판 버전을 1차, 2차로 나누어서 1차에서는 Spring DI를 중심으로 Spring JDBC, MVC요소를 결합시켜 작성하며 2차에서는 로그인 기능을 추가하고 Spring 로깅 AOP기능, MyBatis와의 결합을 구현해 나감으로써 스프링 기능 및 부가기능에 대한 응용 학습을 하게 되며, 마지막으로 최근 UI 개발의 필수 구성요소인 XPlatform과 Spring의 연동에 대해서도 학습을 하게 되어 어떠한 환경에서도 개발가능한 자바 웹 개발자를 만들어 드립니다.

본 과정을 이수 후 현장에서 즉시 개발가능한 스프링 개발자가 되는데 손색이 없도록 진행 예정입니다. (단 수강생 스스로도 열심히 학습해 주셔야 합니다)

[특징]
- 실습에 근거한 이론 취득
- 이론/실습 과제로 인한 개발력 UP
교육목표 - Ajax, jQuery 활용 능력
- Spring IoC, AOP에 대한 이해
- Spring JDBC, MVC에 대한 이해
- 스프링 웹 개발에 대한 이해
- 스프링 개발력 UP
교육대상 - Spring을 경험하지 못한 자바 개발자
- Spring을 배우고 싶은 자바 개발자
선수학습 - JAVA, JSP
 

Ajax Programming - Ajax란, 장점
- Ajax 사용예제 분석
- XMLHttpRequest 객체, 메소드, 속성
- Cross-Browsing
- innerHTML, CSV
- JavaFramework & Ajax
- Ajax 동적 XML 로딩
- Form 입력값 검증
- Auto refresh
DOM - DOM 개요
- JAVA for DOM
- Dynamic DOM 다루기
jQuery Programming - jQuery 개요, 다운로드, 설치
- $(document).ready() 메소드
- Selector
$(“*"), $("#ID"), $("DIV"),$(".classname"), $("p > a"),
$(“elementname.classname")
속성 선택자, 속성(attr)
입력양식 필터 선택자
위치와 관련된 필터 선택자
- jQuery 배열(Array) 관리
- jQuery 객체 확장
기본 필터링 메소드
특정 위치 문서 객체 선택
문서 객체에서 특정 태그를 선택하는 방법
innerHTML 속성과 관련된 jQuery 메서드
문서객체 생성 , 제거
- jQuery Event
이벤트 관련 메소드(발생, 제거)
이벤트 자동 발생
마우스/키보드/윈도우/입력양식 이벤트
- jQuery 기본효과, 사용자지정효과
- jQuery, Ajax
관련 메소드
XML 문서 다루기
입력양식 전송
Spring & ORM Basic - Spring의 도입배경 및 아키텍처에 대해 이해한다.
(자바빈의 태동부터 EJB, 그리고 현재까지)
- Eclipse, Maven, STS 플러그인에 대한 이해
(개발환경 설정의 이해)
- Spring IoC(DI, DL)
- Spring AOP
- AspectJ Annotation
- Spring Web MVC, JDBC
- Spring Controller에 대한 이해
- ORM에 대한 이해
Hibernate에 대한 이해
MyBatis에 대한 이해
Spring Project 스프링 게시판 작성하기(Step by Step으로 이해가 쏙쏙)

- 1차버전 : 기본 게시판 기능(리스트보기, 답글, 커멘트, 게시물 입력, 수정) + 게시물 내용 미리보기(Ajax연동)
기술요소 : Ajax, Spring MVC, Spring JDBC, Spring DI

[절차]
게시물 보기 화면부터 구현 후 전체 기능 추가
Controller 구현
Model 영역 구현
DAO 구현
Service 구현
Ajax Manager 구현
View 구현
web.xml, 스프링 설정 파일 작성
TEST, 시연


- 2차버전 : 기본 게시판 기능(리스트보기, 답글, 커멘트, 게시물 입력, 수정) + 로그인 기능(인증한 경우에만 글읽기, 입력,수정,삭제 가능) + 파일 업로드 + DB쪽 Spring AOP를 이용한 로깅 + SQL문을 MyBatis를 이용하여 별도 XML로 관리

기술요소 : Ajax, Spring MVC, Spring JDBC, Spring DI, Spring AOP, MyBatis 결합

[절차]
스프링 설정 파일 수정
Controller 수정
Model 영역 수정
DAO 수정
Service 수정
View 수정
TEST, 시연
 

2013년 8월 2일 금요일

JAVA

"자바 디자인 패턴 입문" 이라는 책의 내용을 정리하여 올립니다.

시스템내에 단 한 개만 존재하는 것을 프로그램으로 표현시 클래스의 인스턴스를 하나만 만든다.
 지정한 클래스의 인스턴스가 하나만 존재하고 이를 프로그램 상에서 보장하는 패턴을 Singleton Pattern이라 한다.
 다수의 인스턴스가 존재하는 경우 상호간에 영향을 주어 예기치 못한 오류가 발생할 확률이 높으므로 이를 제한하는 경우에 사용



 예제의 Singleton Class는 인스턴스를 하나만 만들고 static으로 singleton이 정의되어 클래스가 메모리에 로드될때 한번 초기화 된다. 

오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의) 


생성자가 private으로 되어 있으므로 외부에서 new Singleton()을 하게되면 컴파일 시에 오류가 발생한다.Singleton 패턴의 경우 개발자가 부주의 하더라도 인스턴스는 하나만 존재


// Singleton.java
public class Singleton {
    private static Singleton singleton = new Singleton();
    private Singleton() {
        System.out.println("인스턴스 생성!");                   
    }
    public static Singleton getInstance() {       
        return singleton;
    }                                         
}


//Main.java
public class Main extends Thread {
    public static void main(String[] args) {
        System.out.println("Start.");       
    Singleton obj1 =    Singleton.getInstance();
      Singleton obj2 = Singleton.getInstance();
        if (obj1 == obj2){
System.out.println("obj1 == obj2");
        }
        else { System.out.println("obj1 != obj2");
        }
    }
}

2013년 8월 1일 목요일

자바의 OutputStream (JAVA OutputStream)

OutputStream 클래스는 모든 파일 시스템으로부터 스트림의 한 바이트를 쓴다. 
  public abstract void write(int b): 정수 b를 byte로 변환하여 출력한다.
  public void write(byte b[]): 배열 b의 모든 바이트를 쓴다.
  public void write(byte b[], int off, int len): b의 off 위치로부터 len만큼 쓴다. 
  public void close(): 출력 스트림을 닫는다.
  public void flush(): 버퍼에 남겨진 모든 데이터를 목적지에 보낸다.
  InputStream과 OutputStream은 추상 메소드를 포함하여 바이트들과 바이트 배열들을 읽고 쓰기 위하여 read()와 write()를 사용하는데 실제로 바이트 스트림을 읽고 쓰는 경우가 드물기 때문에 이 메소드는 거이 이용하지 않는다. 왜냐하면 자바에서 문자열은 바이트가 아니라 유니코드로서 일반적으로 숫자, 문자열, 객체형태로 입출력되기 때문이다. 


public class Iotest { //입력 문자열을 그대로 출력 
      public static void main(String []args) throws java.io.IOException {
            int i;
            while ((i=System.in.read())!=-1)
                System.out.write(i); // 정수 i를 문자로 바꾸어 출력한다.
      }
 }

(JAVA OBJECT Serialize,Object Serializing)자바 객체직렬화

객체는 클래스를 통해 팔요한 시기에  생성되며 프로그램이 종료하지 않더라도  소멸된다. 물론 프로그램이 종료하면 사라진다. 실행시간에 유지하고 있던 객체 내부의 정보와 객체 자신의 정보를 어디엔가 기록해 놓고 나중에 필요한 시기에 다시 볼수 있는 방법을 제공하는것이 객체직렬화 이다.
 정보를 연속된 바이트 단위로 기록하는데 이를 객체 직렬화라고 한다.
 직렬화의 과정은 인스턴스 변수의 값을 저장하는 일인데 만약 인스턴스 변수가 다른 객체를 참조하고 있는 참조형의 변수일 경우 그 변수가 가리키는 객체 또한 직렬화 되어야 한다. 이렇게 직렬화는 복잡한 Tree형태로 계속 진행된다.
 (만약 참조형 변수가 가리키는 객체가 Serializable, Externalizable을 구현 하지 않았다면 직렬화가 되지 않으므로 이경우에는 readObject 메소드및 writeObject를 적절히 프로그램 내부에 기록해 줌으로서 제한적이지만 가능한 방법을 제시한다.)
 Static 필드, transient로 명시적으로 직렬화 하지 말라고 선언된 변수등은 직렬화 되지 않는다.
 직렬화를 담당하는 클래스는 java.io.ObjectInputStream, java.io.ObjectOutputStream
 적절히 writeObject, readObejct 메소드를 구현한다.

 객체를 생성한후 그 인스턴스를 a.dat 파일에 쓰는 경우
  FileOutputStream fos = new FileOutputStream(“”a.dat);
  ObjectOutputStream oos = new ObjectOutputStream(fos);
  oos.writeObject(“MyString…”);
  oos.writeObject(new Date());
  oos.flush(); 
 복구하는 방법
  FileInputStream fis = new FileInputStream(“”a.dat);
  ObjectInputStream ois = new ObjectInputStream(fis);
  String myString = (String)ois.readObejct();
  //return형이 Object이므로 타입캐스팅이 필요
  Date d = (Date)ois.readObject();


 
// MySerializationWrite.java
import java.io.*;
public class MySerializationWrite extends MySuperClass implements Serializable {
int i;
public MySerializationWrite(int i) {
this.i = i;
j=i*2;
}
          public static void main(String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream("imsi.dat");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(new MySerializationWrite(2000));
oos.close();
System.out.println("객체 쓰기 완료...");
}
}
class MySuperClass implements Serializable {
int j;
}




객체직렬화(Object Serializing) –예제(복원하기)

import java.io.*;

public class MySerializationRead implements Serializable{
public static void main(String[] args) throws IOException, ClassNotFoundException {
FileInputStream fis = new FileInputStream("imsi.dat");
ObjectInputStream ois = new ObjectInputStream(fis);
MySerializationWrite m = (MySerializationWrite)ois.readObject();
ois.close();

System.out.println("읽은후 MySerializationWrite(i) :" + m.i);
System.out.println("읽은후 MySerializationWrite(j) :" + m.j);
}
}

Java.lang.Object 클래스

자바의 모든 클래스는 Object 클래스의 하위 클래스이므로 Object 클래스의 모든 메소드를 사용할 수 있다. Object 클래스의 메소드는 클래스의 객체를 조작하기 위한 가장 기본적인 메소드만을 제공하는데 그 중 주요 메소드만을 소개하면 다음과 같다. 

public java.lang.Class getClass() 
  현재 객체의 원형 클래스에 대한 정보를 자바의 Class 타입으로 반환하는 메소드이다. 두개의 객체가 동일 클래스의 객체인지 비교할 때 유용하다. 

public boolean equals(Object obj)
  현재 객체가 다른 객체(obj)와 내용이 동일한지를 비교하는 메소드이다. 이 메소드는 객체의 내부 필드와 메소드의 구조가 완전히 동일하고 또 필드에 설정되어 있는 값도 동일한지를 비교한다. 

protected java.lang.Object clone() 
  객체를 완전히 복사할 때 사용하는 메소드이다. =의 경우는 참조하는 위치만 전달하지만 clone의 경우는 새로운 객체를 만들어 값까지 동일하게 복사한다. 

public java.lang.String toString() 
  객체를 문자열의 형태로 변환하는 데 사용하는 메소드이다. 보통 객체를 대표할 수 있는 값을 문자열로 반환한다. 
 
protected void finalize()
객체가 더이상 사용되지 않을 때 쓰레기 수집기에 의해 수행되는 메소드이다. 이 메소드는 객체가 사용한 파일이나 데이터베이스를 닫을 때 주로 사용된다. 

(JAVA CASTING, CAST)자바 형변환 예제(CastingTest.java)

class CastingTest {
  public static void main(String[] args) {
  //i = (int)l l이 int형의 범위를 넘어선다면 오류, integer형의 범위가 넘는값은 int로 Casting 안된다.
  // integer형의 범위는 -2147483648 ~ 2147483647
  long l=123456789;
  int i=(int)l;
  System.out.println("i --> " + i);
  //작은데 큰것을 넣을때는 명시적으로 형변환을 해야한다.
  //i = l;  integer은 4바이트, long형은 8바이트 이므로 에러...

  boolean bool =true;
  //boolean형의 경우 int형으로 명시적으로 형변환 불가
  //boolean형은 같은 자료형 이외에 다른 자료형으로의 변환이 금지된 자료형이다
  //i = (int)bool; 


  //int형을 boolean 형으로의 형변환은 명시적으로 불가
  //bool = (boolean)i;

  i = 65535;
  byte b = (byte)i; //65535 가 -1로 바뀜
  System.out.println("b --> " + b);

  //왼쪽이 작으니까 명시적 형변환 필요, 협소화
  double d = 3.1313139313;
  float f = (float)d;
  System.out.println("f --> " + f);

    //왼쪽이 크니까 컴파일러에 의한 묵시적인 형변환, 광역화
    f = i;
    System.out.println("i --> " + i);       
  }
}