먼저 제가 현재 사용하는 프로젝트를 정리한 것입니다.

1. quartz-applicationContext.xml의 윗부분에 아래와 같이 선언합니다.


2. 그리고 아래부분들을 추가하는데 말 그대로 그림대로 순서대로 진행해 나아가면 복잡한것 없습니다^^

Business Bean 설정에 보면 targetObject와 targetMethod가 있는데 P□TriggerBiz를 생성해 줬다면, P□TransRun 메소드를 생성해서 P□TriggerBizImpl에 오버라이딩 한 후에 그 메소드를 사용하면 메소드에 있는 일들을 수행합니다.

ps. 쿼츠를 사용하면서 이번에 제가 맡았던 부분인데요 새벽 2시에 매일 이미지 임시 저장공간을 복사해서 옮긴 후 이전 이미지들을 삭제하는 코딩을 하였는데 그부분은 DB에 접속할 필요없이 설정되어 있는 경로를 추가하고 그 경로값으로 자바단에서 처리만으로 해결하는 로직입니다. 이 부분에서 DB즉 Dao부분은 필요가 없게되니까 삭제하시고 설정하셔도 잘 돌아갑니다.ㅎ

'Tip' 카테고리의 다른 글

이클립스 속도 올리기  (0) 2010.04.08
Appfuse 설치  (0) 2010.04.05
Java StringFramework Quartz 사용  (0) 2010.03.30
이클립스 단축키 정리  (0) 2010.03.22
CVS 접속 프로젝트 다운  (0) 2010.03.10
Posted by 미스터네오
,


1. 라이브러리 다운로드
경로 : http://www.terracotta.org/download/reflector.jsp?b=TCreleases&i=quartz-1.7.2.tar.gz

다운을 받은 후 압축을 해제하면 quartz-1.7.2.jar 파일을 프로젝트 lib 폴더로 복사한다.

2. quartz-applicationContext.xml 에 아래 내용 추가

<beans xmlns="http://www.springframework.org/schema/beans"
            xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance"
            xmlns:aop="
http://www.springframework.org/schema/aop"
            xmlns:tx="
http://www.springframework.org/schema/tx"
            xsi:schemaLocation="
http://www.springframework.org/schema/beans
                                            
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
                                            http://www.springframework.org/schema/aop
                                            
http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
                                            http://www.springframework.org/schema/tx
                                            
http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">

<!--iBatis를 사용시 -->



   
    
<!-- Bean 설정: Begin -->

    <bean id="quartzDao" class="com.mbiz.core.dao.QuartzDao">
         <property name="sqlMapClient" ref="sqlMapClient"/>
     </bean>

     <!-- Bean 설정: End -->





 
    
<!-- Business Bean 설정:Begin -->

     <bean id="bizUserUpdateJob" class="org.springframework.scheduling.quartz.JobDetailBean">
         <property name="jobClass" value="com.mbiz.core.service.QuartzService"/>
         <property name="jobDataAsMap">
              <map>

               <!-- 여기서 파라미터 형식으로 Dao를 넘겨주어야 인식한다. -->
                   <entry key="quartzDao">
                        <ref local="quartzDao"/>
                   </entry>
              </map>
          </property>
      </bean>

     <!-- Business Bean 설정:End -->



     <!-- cronExpression 설정:Begin -->
     <bean id="bizUserUpdateTrigger"
       class="org.springframework.scheduling.quartz.CronTriggerBean">

     <!-- 생성했던 인스턴스 id를 레퍼런스 해준다. -->
         <property name="jobDetail" ref="bizUserUpdateJob"/>
         <property name="cronExpression" value="0 0 22 * * ?"/> 

         <!-- 시간 설정 부분이다. 이렇게 설정하면 매일 밤 10시에 실행된다. -->
     </bean>
     <!-- cronExpression 설정:End -->



      <!-- scheduler 설정:Begin -->
      <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean" autowire="no">
          <property name="triggers">
              <list>

    <!--
           최종적으로 반복될 작업에 대한 인스턴스에 대한 레퍼런스를 설정한다. 
           여러가지 클래스를 동시에 작업 진행할 수도 있다.
     -->

                   <ref bean="bizUserUpdateTrigger"/>
              </list>
          </property>
          <property name="quartzProperties">
              <props>

              <!-- 기타 설정들. -->
                  <prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop>
                  <prop key="org.quartz.threadPool.threadCount">5</prop>
                  <prop key="org.quartz.threadPool.threadPriority">4</prop>
                  <prop key="org.quartz.jobStore.class">org.quartz.simpl.RAMJobStore</prop>
                  <prop key="org.quartz.jobStore.misfireThreshold">60000</prop>
               </props>
          </property>
     </bean>
      <!-- scheduler 설정:End -->

3. 반복 작업을 하게 될 클래스를 생성(현재 제 회사는 BizImpl로 합니다.)

//QuartzJobBean 클래스를 상속받아 구현한다. 당연히 applicationContext에 설정되어 있는 정보와 맵핑이 되야한다.

public class QuartzService extends QuartzJobBean{

     private QuartzDao quartzDao;

     public void setQuartzDao(QuartzDao quartzDao) {
          this.quartzDao = quartzDao;
     }
     @Override
      protected void executeInternal(JobExecutionContext jobExecutionContext)
             throws JobExecutionException {
             // 반복할 작업 구현

     }
}

Thread 에서의 run 메소드라 생각하면 되겠다.. 이 메소드 내부의 내용이 설정한 시간마다 반복 수행된다.


출처 : http://msgzoro.egloos.com/3034871

'Tip' 카테고리의 다른 글

Appfuse 설치  (0) 2010.04.05
내가 정리한 쿼츠 + 스프링 프레임웍  (0) 2010.03.30
이클립스 단축키 정리  (0) 2010.03.22
CVS 접속 프로젝트 다운  (0) 2010.03.10
editer 설정  (0) 2010.03.10
Posted by 미스터네오
,

가위바위보 게임
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Random;
public class Game1 {
 public static void main(String[] args) {
  InputStreamReader sr = new InputStreamReader(System.in);
  BufferedReader br = new BufferedReader(sr);
  
  try {
   System.out.print("입력하세요(가위(1), 바위(2), 보(3)) : ");
   
   int user = Integer.parseInt(br.readLine());
   Random rn = new Random();
   int com = Math.abs(rn.nextInt(3))+1;
   
    System.out.println(com);
    
   switch (user){
    case 1:
     user=1;
     System.out.println("가위를 입력하셨습니다.");
     switch(com){
      case 1:
       com=1;
       System.out.println("컴퓨터는 가위입니다. 비겼습니다.");
       break;
      case 2:
       com=2;
       System.out.println("컴퓨터는 바위입니다. 컴퓨터가 이겼습니다.");
       break;
      case 3:
       com=3;
       System.out.println("컴퓨터는 보입니다. 사용자가 이겼습니다.");
       break;
     }
     break;
    case 2:
     user=2;
     System.out.println("바위를 입력하셨습니다.");
     switch(com){
     case 1:
      com=1;
      System.out.println("컴퓨터는 가위입니다. 사용자가 이겼습니다.");
      break;
     case 2:
      com=2;
      System.out.println("컴퓨터는 바위입니다. 비겼습니다.");
      break;
     case 3:
      com=3;
      System.out.println("컴퓨터는 보입니다. 컴퓨터가 이겼습니다.");
      break;
    }
     break;
    case 3:
     user=3;
     System.out.println("보를 입력하셨습니다.");
     switch(com){
     case 1:
      com=1;
      System.out.println("컴퓨터는 가위입니다. 컴퓨터가 이겼습니다.");
      break;
     case 2:
      com=2;
      System.out.println("컴퓨터는 바위입니다. 사용자가 이겼습니다.");
      break;
     case 3:
      com=3;
      System.out.println("컴퓨터는 보입니다. 비겼습니다.");
      break;
    }
     break;
   }
   
  } catch (IOException e) {
   System.out.println("숫자를 제대로 입력하세요");
  }
 }
}

369게임
public class Sam {
    public static void main(String[] args)
    {
          String number = "";
          for(int i=1; i <= 100; i++) {
                number = i + "";
                if(number.indexOf("3")!=-1 || number.indexOf("6")!=-1 || number.indexOf("9")!=-1) {
                 if(i/10 == 3 || i/10 == 6 || i/10 == 9) {
                  if(i%10 == 3 || i%10 == 6 || i%10 == 9){
                   System.out.print("짝");
                  }
                 }
                      System.out.println("짝");
                } else {
                      System.out.println(i);
                }
          }
    }      
}          

 
Posted by 미스터네오
,

□ 6장 배열, 제네릭, 컬렉션
  ■ 배열(Array) 클래스 : 단순 용량적인 측면에서의 데이터 저장공간
     ● 단순 저장공간의 문제 : 자료를 처리하는 방식, 동적인 공간의 문제, 빠른 검색의 문제
  ■  배열
     ● 종류 : 기본 데이터 타입 배열, 객체 배열.
         - 데이터 타입 배열 : 배열생성과 동시에 메모리 생성
         - 객체 배열 : 객체변수의 이름만 생성되고, 메모리는 생성되지 않는다.
     ● 특징 : 같은 데이터 타입의 변수를 한꺼번에 여러개 생성.
     ● 검색 : 첨자를 통해서 배열 내에 존재하는 모든 변수를 검색
     ● 단점 : 배열의 크기를 변경할 수 없다.
  ■ 컬렉션, 맵 : 자료구조적인 측면에서의 데이터 저장공간, 배열의 발전된 구조, 인터페이스이다.
     ● 컬렉션 : 집합적인 저장공간
객체를 삽입 삭제하는 추상 메서드
boolean add(E o); 
boolean remove(Object o);
데이터 확인을 위한 추상 메서드
boolean isEmpty();  --- 비어있는지 확인
boolean contains(Object o); --- 특정 객체가 포함되어 잇는지 확인
int size(); --- 포함된 객체의 수를 리턴
데이터를 배열로 얻기 위한 추상 메서드
T[] toArray(); --- 객체들을 배열 형태로 리턴
         - List : 순서있다, 중복허용
         - Set : 수학적인 집합개념, 중복허용안함

     ● 맵 : 검색적인 저장공간, 데이터 삽입시 Key와 Value의 형태로 삽입, Key를 이용하여 Value를 검색
Object put(Object key, Object value); --- 데이터 삽입
Object remove(Object key); --- 데이터를 제거
Object get(Object key); --- 데이터를 검색
V put(K key, V value); --- 데이터 삽입
V remove(Object key); --- 데이터 제거
V get(Object key); --- 데이터 검색
         - HashMap : 키와 값을 이용해서 데이터 관리, 동기화가 보장되지 않는다.
         - Hashtable : 키와 값을 이용해서 데이터 관리, 동기화가 보장된다.
         - TreeMap : Map계열이면서 검색이 가능한 클래스

     ● Sotred 계열 : Set과 Map인터페이스를 상속바당 정렬 기능이 추가
         - SotredSet : Set 인터페이스를 상속
            * TreesSet : Set계열이면서 검색이 가능한 클래스, 데이터들이 자동으로 오름차순
         - SotredMap : Map 인터페이스를 상속
            * TreeMap : Key, Value로 데이터 관리, Key 기준으로 오름차순

  ■ 배열과 컬렉션,맵의 차이점 : 배열은 크기를 동적으로 늘릴수 없다. 하지만 컬렉션이나 맵계열의 클래스는 동적으로
                                             메모리를 확장할 수 있다

  ■ ArrayList와 HashSet
     ● 공통점 : 객체의 저장공간, 동기화 보장하지 않는다.
     ● ArrayList : List 인터페이스를 구현하는 클래스, 순서의 개념, 데이터 중복 허용
       - Vector와 공통점 : 순서가 있는 collection, List인터페이스 구현, 데이터 중복 허용
                       차이점 : 자동으로 동기화
     ● HashSet : Set 인터페이스를 구현하는 클래스, 집합의 개념, 데이터 중복 허용하지 않음
  ■ 제네릭 : 클래스에 사용할 타입을 클래스를 사용할 때 지정한 후 사용하는 기술
     ● 자바 코드내에서 Top<String>형 클래스의 사용
Top<String> t = new Top<String>();
t.setDate(str);
String str2 = t.getData();
     ● 자바 컴파일러가 제네릭을 처리하는 방식
Top t = new Top();
t.setData(str);
String str2 = (String)t.getData();
  ■ Stack : 후입선출 컬렉션 클래스
     ● push() 메서드 : Stack의 맨 위에 요소를 삽입
     ● pop() 메서드 : Stack의 맨 위에 있는 요소를 삭제하고 데이터를 반환
     ● peek() 메서드 : Stack의 맨 위에 있는 요소를 제거하지 않고 반환
  ■ AutoBoxing : 기본 데이터 타입을 래퍼(Wrapper) 클래스형의 객체로 자동으로 변환해주는 기능
  ■ Enumeration과 Iterator : 컬렉션 내의 데이터에 접근하기 위한 방법
     - 특징 : 모든 데이터에 접근가능
     - 차이 : Itorator는 Fail-Fast방식을 지원한다
     ● Enumeration 메서드 : hasMoreElements() //데이터가 있는지 확인, nextElement(); //다음 위치로 이동
     ● Iterator 메서드 : hasNext(); //데이터가 있는지 확인, next(); //데이터를 얻어내면서 다음 위치로 이동
□ 7장 Exception, 문자열, 자바5.0
  ■ 문자열
     ● 문자상수의 집합, 이중 따음표사용, String 클래스의 객체
     ● length(), concat(), equals(), indexOf(), lastIndexOf(), substring(), replace()
  ■ StringBuffer 클래스 : 동기화를 지원한다.
     ● 수정이 가능한 클래스, 객체는 문자열의 추가, 삭제, 수정, 검색등의 기능을 가지고 있다.
     ● StringBuilder와 차이 : 동기화를 지원하지 않는다.
  ■ Formatting 클래스
  ■ 자바의 상수
     ● 클래스에서 상수 선언 : final 키워드를 상수를 선언, 단한번 초기화, static final로 선언하면 전역적인 상수
     ● 인터페이스에서의 상수선언 : 멤버변수는 상수만 가능, 멤버변수 선언하면 자동으로 public static final이 된다.
  ■ enum(열거형) : 열거형으로 변수를 만들어도 이 변수는 열거형을 선언할 때 명시한 값을 넣을 수 있다.
  ■ Varargs(가변인수) : 필요에따라 매겨변수를 가변적으로 조정할 수 있는 기술.
□ 8장 자바 Thread
  ■ 프로세스와 스레드 : 하나의 프로세스 내에는 여러개의 스레드가 존재할 수 있다.
     ● 프로세스(process) : 하나의 프로그램은 하나의 프로세스에 해당.
     ● 멀티 태스킹(Multi-Tasking) : 운영체제 차원의 프로세스 관리
     ● 스레드(Thread)
         - 하나의 프로그램 내에서 실행되는 메서드
         - 같은 순간에 두 개의 메서드가 동시에 실행되면 두 개의 스레드가 동작하는 것이다. ---> 시퀀셜하게 동작한다.
         * 주의사항 : 우선권, 동기화(공유자원을 상대로 순서대로 작업이 이루어지는 것)
         - 스레드 상태
시작 상태(Start)
동작할 수 있는 상태(Runnable) : 스레드 실행, 스레드가 여러 개 존재할 수 있다.
동작 상태(Run) : Runnable상태에서만 Run 상태가 될 수 있다, 한순간 단 하나의 스레드만 Run 상태가 된다.
대기 상태(NotRunnable) : Run 상태로 진입할 수 없음, sleep()-일정시간, wait()과 notify()-수동으로 제어
종료 상태(Dead) : 스레드의 종료
  ■ 동기화(synchronized) : 줄서서 순서대로 공유자원 사용하기
      - 블록형태로 사용가능 
  ■ 스트림(Stream) : 자료 입출력을 도와주는 중간 매개체
File 입력 스트림의 연결과 작업
FileInputStream fis = new FileInputStream(파일);    //fis.read()를 이용해서 데이터 읽기
File 출력 스트림의 연결과 작업
FileOutputStream fos = new FileOutputStream(파일);    //fos.write()를 이용해서 데이터 쓰기
     ● 스트림이란 빨대다
  ■ File 클래스
     - File f = new File("FileMain.java);
 f.isFile() : 파일인지 아닌지 f.isDirectory() : 디렉터리인지 아닌지  f.isHidden() : 숨김 파일인지 
 f.lastModified() : 마지막 수정 날짜 f.canRead() : 읽기속성가진 파일  f.canWrite() : 쓰기속성가진 파일 
 f.getPath() : 상대 경로  f.getAbsolutePath() : 절대 경로  f.getName() : 디렉터리 또는 파일이름 
 f.toURL() : URL형식의 경로 f.exists() : 파일이 존재하는지  f.length() : 파일의 길이 
  ■ File 스트림
     ● 파일 입출력을 위한 스트림
         - 바이트 단위 : FileInputStream, FileOutputStream
         - 문자 단위 : FileReader, FileWriter
     ● RandomAccessFile : 데이터를 랜덤하게 접근
     ● Memory 스트림 : 목표지점 자체가 메모리, 배열과 문자열 등

'자바' 카테고리의 다른 글

소설같은 자바 훑어보기 3권!!  (0) 2010.02.22
소설같은 자바 훑어보기 1권!!  (0) 2010.02.18
Posted by 미스터네오
,

□ 1장 언어의 기본
 ■ 자바를 배우려면 클래스를 알아야 한다. 
 ■ 클래스를 정복하는 것이 자바의 최종 목표이다.
 ■ 데이터 타입 : 메모리를 생성하기 위한 도구
 ■ 기본 데이터 타입 : byte(1), char(2), int(4), long(8), float(4), double(8), boolean(1)
    ● 분류
       : 정수형 - byte, char, int, long double
       실수형 - float, boolean
 ■ 자바에서는 모든 데이터 타입이 signed 계열이다.  signed 계열 = 음수와 양수를 함께 표현
 ■ 데이터 타입의 목적
    1) 생성할 메모리의 크기를 지정하기 위한 목적으로 사용.
    2) 메모리의 형태(Type)를 지정하는 목적으로 사용.(메모리의 형태란 비트의 조합을 의미)
 ■ 데이터 타입의 최종 정의
    ● 메모리의 크기(Size)와 형태(Type)를 지정하기 위한 도구
 ■ 자바에는 포인터가 없어서 선언된 변수의 정확한 주소를 확인할 방법이 없다.
 ■ 변수 : 데이터 타입이 명시된 형태의 데이터를 담을 수 있는 메모리
 ■ 변수의 목적 : 데이터를 보관하기 위해서
 ■ 상수 : 데이터 그 자체를 말하여 바꿀 수 없는 데이터를 말한다. 데이터 그 자체를 상수라고 한다.
 ■ 데이터 할당 : 변수에 값을 넣는 것.
 ■ 데이터 할당의 법칙 : 변수에 상수가 존재해도 다른것을 할당하면 마지막에 넣은것이 최종적으로 할당


□ 2장 클래스의 기본
 ■ 자바에는 구조체가 없다. 구조체에서 발전된 개념이 클래스
 ■ 자바의 클래스 개념에서는 반드시 new 연산자로 메모리를 생성하는 부분이 나와야 한다.
 ■ 구조체와 클래스의 정의 : 구조체와 클래스는 데이터 타입 생성기이다.
 ■ 클래스의 역할
     ● Person(인간) 클래스 생성
class Person{
int age;
int height;
int weight;
}
     ● Person 클래스로 사람 생성
Person Hong = new Person();
Person Choi = new Person();
     ● Hong의 정보입력
Hong.age = 20;
Hong.height = 170;
Hong.weight = 60;
     ● Choi의 정보입력
Hong.age = 26;
Hong.height = 183;
Hong.weight = 75;
    ● Person Choi의 메모리는
     □□□□ □□□□ □□□□


□ 3장 클래스
  ■ 클래스의 구성요소
    ● 변수
       * 멤버변수 : 클래스꺼, 자동 초기화.
       * 지역변수 : 메소드꺼, 초기회 해줘야함.
    ● 메서드
      *일만하는 메서드 : void형태 리턴값 없음
       * 일을 한 후 값을 리턴하는 메서드 : 타입 
       → 리턴은 메서드의 종료를 의미한다.
  ■ 메서드는 변수이다.
  ■ 클래스 내의 메서드
    ● 보통 클래스 내에 존재하는 변수나 메서드를 클래스의 멤버라고 부른다.
  ■ 클래스 = 데이터 + 메서드
                = 구조체 + 메서드
  ■ 접근제어 : 메모리를 보유한 객체를 이용해서 멤버에 점을 찍고 접근할 수 있는지 없는지 결정
    ● 이런식의 접근제어를 자료의 은폐화 라고 표현
    ● public(제한없음) > protected(상속관계) > default(같은 패키지내) > private(같은 클래스내)
  ■ 객체의 메모리 생성
    ● 클래스 데이터 타입으로 변수를 선언, 컴퓨터 내의 메모리 속에 데이터 타입에 해당하는 만큼의 메모리를 확보하는 일
        (위의 인간(Person) 클래스에서 사람 객체(Choi) 생성 참조)
    ● 자바에서는 객체 변수를 참조변수라고 말한다.
    ● 참조값이란 객체의 메모리를 생성했을때 메모리와 연결된 유일한 숫자값.
    ● 객체 변수는 참조변수이다.
    ● 레퍼런스는 주소의 참조값


□ 4장 자바의 기본
  ■ Static
    ● 객체를 아무리 많이 만들더라도 스태틱 변수는 오직 하나의 메모리만 생성
    ● 객체를 생성하기 전에 스태틱 멤버에 접근할 수 있다.
    ● 객체 생성 이전의 스태틱의 메모리가 생성된다.
    ● 스태틱 멤버 메서드 내에 일반 멤버 변수를 사용할 수 없다.
  ■ Stack 메모리
    ● 프로그램을 실행하는데 필요한 메모리 공간
    ● 메서드가 호출되는데 필요한 메모리
        - 지역변수(Local Variable), 매개변수(Paremeter), 리턴값이 저장될 곳(Return Value)
    ● 스택 프레임
        - 하나의 메서드를 호출하는데 필요한 메모리 덩어리
        - 메서드 하나당 하나의 스택 프레임이 존재
    ● 자바의 메모리 : 스택, 힙
    ● 가비지 콜렉터 : 자바의 메모리 관리자 역할(힙에 생성되는 객체의 메모리)
  ■ 오버로딩
    ● 메소드의 이름은 같은데, 인수의 갯수나 Type 이 다른 형태의 메소드로써 설계, 사용의 편의성을 위해서 존재한다.
  ■ 생성자
    ● 객체를 만들기 위해서 호출되는 메소드 형태의 것(new 와 함께 호출하면 객체 생성)
  ■ 상속
    ● 하위 클래스가 상위 클래스를 상속받았을때, 하귀 클래스는 상위 클래스의 모든 권한을 갖게 된다.
    ● 생성자는 상속되지 않는다. 상→하 순위로 생성자 호출
    ● Virtual메소드 : 아버지의 이름으로 아들의 메서드를 호출하는 기법
    ● this : 자기자신
    ● super : 상위 클래스


□ 5장 다형성
  ■ 다형성 : 하나로 여러가지 일을 하는것
    ● Abstract
        - 추상클래스 : 몸체없는 메서드({})를 가지고 있는 클래스, 클래스 선언부 앞에 abstract를 붙여준다.
        - 추상메서드 : 몸체없는 메서드({}), 메서드 선언부 앞에 abstract를 붙여준다.
    ● Interface : 골격만 가지고 있는 클래스, 몸체없는 메서드로만 이루어진 클래스
    ● Overriding
    ● Upcasting : 하위 클래스의 객체가 상위 클래스의 형으로 캐스팅 되는 것.
    ● Downcasting : 업캐스팅한 객체를 다시 되돌리는 것.
        - 직렬화 : 객제의 메모리를 통째로 저장할 수 있는 기법
  ■ 다중상속 : 자바는 단일 상속을 기본


'자바' 카테고리의 다른 글

소설같은 자바 훑어보기 3권!!  (0) 2010.02.22
소설같은 자바 훑어보기 2권!!  (0) 2010.02.19
Posted by 미스터네오
,

 
1. 자바의 역사
  (1) 1991년 : James Gosling외 개발자들에 의해 Oak 란 언어로 제작
  (2) 1997년 : jdk 1.1 발표
  (3) 1998년 : jdk 1.2 발표
  (4) 2000년 : jdk 1.3 발표
  (5) 2002년 : jdk 1.4 발표
  (6) 2004년 : jdk 1.5 발표 (J2SE 1.5 -> Java SE 5.0)
  (7) 2007년 : jdk 1.6 발표 (Java SE 6)

2. 자바의 특성
  (1) 객체지향언어
  (2) 플랫폼(OS)에 독립적
  (3) 멀티 쓰레드를 지원한다.
  (4) 자동 메모리 관리 : JVM이 자동으로 관리를 해준다.
  (5) 기본적으로 네트워킹 가능 언어이다.

3. 자바의 실행절차 (인터프리터 언어)
  .java 파일 작성 -> javac(컴파일러)를 이용해서 .class 파일 작성
    -> java(Java 실행기)를 이용해서 class 파일 실행 -> JVM 에 의해서 main() 메소드 실행 
        c.f.) JVM (Java Virtual Machine) : 자바 가상 머신, 자바의 실행에 관련한 모든 것을 책임지는 프로그램.  
  운영체제에 상관없이 자바 클래스를 실행하거나, 메모리를 관리해주는 프로그램이다.
    - 가비지 콜렉터(Garbage Collector) : 메모리 관리 프로그램으로써 객체가 더이상 쓰일 가능성이 없으면 자동으로
       메모리에서 삭제를 한다. (JVM에 내장)

4. 객체지향언어 용어 정리
  (1) 객체(Object) : 모든것이다. class 를 통해서 만들어진 구현물, 유형, 무형의 것들을 표현
  (2) 클래스(class) : 객체를 만들어내는 틀(blueprint, 설계도)
  (3) 속성(Field, Property, Member Variable) : 객체의 속성, 성질. 클래스에 정의되어있다.
  (4) 메소드(Method) : 객체가 할 수 있는 기능(행위)
  (5) 생성자(Constructor) : 객체를 만들기 위해서 호출되는 메소드 형태의 것(new 와 함께 호출하면 객체 생성)
       - 클래스 이름과 동일한 단어(대문자로 시작한다)
       - 메소드와 동일한 형태(예 : Hello())
       - 반환타입(return type)이 없다.
       - 생성자가 하나도 없는 경우에는 컴파일러가 기본생성자(default Constructor)를 자동으로 만들어준다.

5. OOP의 특징
  (1) 상속성(inheritance) : 기존의 클래스를 확장(extends)해서 새롭게 기능(method)이나 특성(field)을 정의하거나
                                      추가하는 것을 뜻한다. 부모클래스가 자식클래스에게 멤버변수, 메소드를 물려주는 것을 뜻.
  (2) 다형성(polymorphism) : 상속과 형변환(type casting)과 더불어 사용되는 단어로써, 메소드에서 호출된
                                              객체의 메소드가 객체의 본질(실체)에 따라 다양하게 실행될 수 있다는 뜻.
  (3) 은닉성(Information Hiding) : 객체의 특성과 메소드의 세부구현을 숨김으로써 객체가 완전한 독립성을
                                          유지
하도록 하는 개념 (예전엔 모듈화 라는 개념으로도 불렸다.)
  (4) 캡슐화(Encapsulation) : 은닉성의 대표적인 예로써, 클래스의 속성(Field)의 접근 제한자를 private 으로 하고
                                               메소드에 대해서는 public 을 선언함으로써, 특정 메소드를 빼고는 세부구현 내지는
                                              속성에 대한 것들을 숨김으로써, 마치 알약(캡슐)처럼 안쪽 내용을 전혀 알 수 없게
                                          만드는 형태
를 뜻한다.

6. 자바(class)의 구조
  (1) package 선언
  (2) import 구문
  (3) class 선언

  {
    (4) 속성 선언 및 초기화
    (5) 생성자
    (6) 메소드 선언
  }

7. 자바의 주석
  (1) // 한줄짜리 주석
  (2) 여러줄짜리 주석

    /*
        라인1
        라인2
      */

   (3) javadoc

   /**
     API 문서 작성용 주석
   */

8. 자바의 변수
  (1) 유효범위에 따라서
     <1> 멤버변수 (Member Variable)
            - 클래스의 속성으로서 정의된다.
            - 초기화가 자동으로 된다.(각각의 초기값으로)
     <2> 메소드 지역변수 (Local Variable)
            - 메소드의 안쪽에서만 정의되고 쓰인다.
            - 초기화를 반드시 해줘야 한다.
  (2) 변수 Type에 따라서
     <1> 기본형 변수(Primitive Type) 변수 (8개)
            - 존재이유 : 실행의 효율성 때문이다.(모두 객체로 실행하면 메모리 공간을 많이 차지한다)
            - 형변환 방향
               byte(1) -> short(2) -> int(4) -> long(8) -> float(4) -> double(8)
                                                          |
                                                 char(2)
               boolean
     <2> 참조형 변수(Reference Type) 변수
            - 형변환 방향 (위로)
               Object
                   |
               Human
                   |
             Superman
            - 형변환(Type Casting)의 예

               Human h = new Superman(); // 암시적 형변환
               Superman s = (Superman) h; // 명시적 형변환

9. 제한자
  (1) 정의
       클래스, 인터페이스, 변수, 메소드, 생성자 앞에 붙어서 기능을 제한하는 keyword
  (2) 종류
     <1> 접근 제한자
            public(제한없음) > protected(상속관계) > default(같은 패키지내) > private(같은 클래스내)
     <2> 소유 제한자
           
static
            - static 이 붙으면 class 의 소유가 되고, 안붙으면 객체의 소유가 된다.
            - static 메소드 안에서는 다른 static 메소드나 다른 static 변수만을 쓸 수 있다.
              (객체에 소속되어있는 메소드를 쓰려면 객체를 생성해서 호출한다.)
     <3> 수정 제한자
            
final
            - class, Field, method 앞에 붙어서 더이상의 수정을 할 수 없게 만드는 제한자
            - class 는 상속 불가, Field 수정불가(상수), method 오버라이딩 불가
     <4> 추상 제한자
            abstract
            - class 앞에 붙으면 추상클래스(객체를 생성할 수 없다. 완벽한 설계도가 아니다)
                        : 추상 메소드가 0개 이상 있는 클래스 (1개 이상 있으면 반드시 추상 클래스)
            - method 앞에 붙으면 추상메소드 : body {} 부분이 없는 메소드
     <5> 기타
            synchronized, transient, volatile, native ....

10. 오버로딩과 오버라이딩 (다형성)
  (1) 오버로딩 (over-loading)
     <1> 정의
            메소드의 이름은 같은데, 인수의 갯수나 Type 이 다른 형태의 메소드로써 
            설계, 사용의 편의성을 위해서 존재한다.
     <2> 조건
            - 반환타입이 달라도 된다.
            - 인수(parameter)의 갯수나, Type 이 다르거나 순서가 달라야 한다.
      <3> 종류
            - 생성자 오버로딩
            - 메소드 오버로딩

  (2) 오버라이딩 (over-riding)
     <1> 정의
            상속관계가 있는 클래스에서 부모 메소드의 내용을 자식 클래스에서 재정의 하는 것
     <2> 조건
            - 반환타입이 같아야 한다.
            - 인수(parameter)의 갯수나 Type 이 같고, 순서도 같아야 한다.
            - 부모 메소드의 접근제한자보다 오버라이딩한 메소드의 접근 제한자가 같거나 더 
               범위가 커야 한다.

11. 객체 지시 예약어
  (1) this - 자기 자신(class)의 객체
  (2) super - 바로 위 부모 클래스의 객체

12. 식별자(Identifier)
  (1) 정의
       개발자가 임의로 만드는 패키지명, 클래스명, 메소드명, 변수명 등을 의미
  (2) 규칙(어길시 컴파일 오류 발생)
     <1> 식별자의 첫문자는 특수문자, 숫자여서는 안된다.(_,$는 예외)
     <2> 문자와 숫자, 특수문자(_,$)로 조합할 수 있다.
     <3> 예약어(keyword)를 사용하면 안된다.
     <4> 길이의 제한 없다.
  (3) 관례
     <1> 의미있는 단어를 사용한다.
     <2> 클래스와 인터페이스의 첫문자는 대문자로 한다.
     <3> 메소드와 변수의 첫문자는 소문자로 한다.
     <4> 단어의 결합으로 되어있을 경우 다음 단어의 첫번째글자를 대문자로 하거나
            _로 연결한다. ex) TestClass, getName(), set_name
     <5> $문자는 사용하지 않는다.

13. 연산자
  (1) 산술연산자
        +, -, *, /, %
  (2) 증감연산자
        ++, --
  (3) 대입연산자
        =
  (4) 산술할당(대입)연산자
        +=, -=, *=, /=, %= ...
  (5) 비트연산자
        &, |, ^, ~, 쉬프트연산자(<<, >>, >>>)
  (6) 비교연산자
        ==, !=, <, >, <=, >=
  (7) 논리연산자
        &&, ||, &, |, !
  (8) 조건연산자(삼항 연산자)
        조건식 ? 참일때 : 거짓일때
  (9) instanceof 연산자
        - 형식 : Reference Type 변수 instanceof Class 명
        - 앞의 변수가 뒤의 클래스와 상속관계인지(형변환 가능한지) 알아보는 연산자

14. 조건문
  (1) if(조건식){}문
  (2) if(조건식){} else{} 문
  (3) if(조건식){} else if(조건식) {} 문
  (4) if(조건식){} else if(조건식) {} ... else{} 문
  (5) switch(값) { case : ... default:} 문

15. 반복문
  (1) for(초기식;조건식;증감식) {}
  (2) while(조건식)
  (3) do{}while(조건식);
  (4) 확장 for 문
   for(변수 : 배열 혹은 Collection)

16. 제어의 이동
  (1) break
  (2) continue
  (3) return

17. 인터페이스 (interface)
  (1) 정의 : 명세서(골격), 설계자가 원하는 메소드, 상수값, JavaDoc 을 통해서 다른 객체와
                소통할 수 있는 수단을 만들어 내는 것.
                모든 메소드가 추상 메소드, 모든 Field 가 상수로 구성된 것.
  (2) 특징
     <1> 인터페이스끼리 다중상속이 가능하다.
     <2> 클래스에서 인터페이스를 다중 상속 가능하다.
     <3> 모양
            - Field 에는 public static final 예약어가 생략되어 있다.
            - Method 에는 public abstract 예약어가 생략되어 있다.
     <4> 인터페이스를 상속하는 클래스에서는 반드시 메소드를 재정의(오버라이딩)해야 한다.

18. 배열 Array
  (1) 정의 : 같은 타입(type)의 객체 또는 기본형 자료를 저장하는 저장소로써, 
                생성될 때 그 크기가 고정되는 저장소
  (2) 선언
            -> (저장될 객체나 기본형 Type) + 변수명[];
            ex) int i[]; int[] i; int []i;
  (3) 생성
            -> new int[5];
            -> new int[]{1, 2, 3, 4, 5};
            -> {1, 2, 3, 4, 5};

19. 중첩클래스 (Nested class)
  (1) 정의 : 클래스 안에 클래스
  (2) 종류
     <1> static nested class
     <2> inner class
     <3> anonymous inner class

20. 예외처리
  (1) 예외(Exception)의 정의
       프로그램이 정상적으로 진행되지 못하게 하는 돌발상황
  (2) 계층도
              Throwable
                   |  |
           Error  Exception
                   |  |
 RuntimeException  CheckedException
  (3) 예외처리의 목적
       프로그램 실행시에 발생할 수 있는 상황들을 정해놓고, 해당상황 발생시
       적절한 조치를 취해서 프로그램이 정상적으로 작동하도록 하는데에 목적이 있다.
  (4) 예외처리의 특징
     <1> Exception 은 메소드에서 발생한다.
     <2> 발생시킬때 throw 라는 예약어를 사용한다.
     <3> Error 나 RuntimeException 을 제외하고는 항상 잡거나(try catch) 
            자신이 처리하지 않고 던지게끔 선언해야한다.(throws)
     <4> try catch
            try {
                예외가 발생하는 구문(메소드)
            } catch(Throwable 의 자식 e) {
                예외처리구문
            }
     <5> catch 절에서 2개 이상의 Exception 을 잡을 경우 하위 Exception 부터 잡는다.
     <6> finally 절
            try 와 같이 쓰이며, 어떤 상황하에서도 실행되는 구문.
            (단, System.exit() 는 제외)
     <7> Error, RuntimeException
            1) throws 선언하지 않아도 자동으로 던져진다.(메소드 호출한 곳으로)
            2) try catch 안해도 컴파일 오류 발생하지 않는다.
     <8> 주요 메소드
            1) getMessage() : 익셉션 생성시 생성자에 넣어둔 문자열 가져오는 메소드
            2) printStackTrace() : 익셉션 최초 발생 부분 부터의 stack 메소드 구조를 다 보여주는 메소드

21. Package
  (1) 컴파일 방법
       javac -d . *.java : -d 옵션으로 class 파일이 저장될 위치를 정한다.
  (2) 실행 방법
       java com.study.StudyA 식으로 실제 패키지명을 다 명시해야한다.
  (3) jar 작성
       jar cvf test.jar 디렉토리명

//////////////////////// 주요 클래스 //////////////////////////////
22. Object (가장 상위 root class)
     equals(), hashCode(), toString(), getClass(), finalize()(객체 소멸 직전 호출), 
     clone()(Cloneable interface 상속 Calendar 객체 복사시 유용)
 ※ 참고 : Hashtable 에서 직접 만든 빈즈 객체를 키(key)로 사용하고 싶다면 반드시 equals() 와 hashCode()메소드를
              오버라이드 하는게 좋다. (안하면 키값을 제대로 못찾는 경우 발생)

23. Class (클래스를 대변하는 클래스)
     getName(), getSuperclass(), getDeclaredFields(), getDeclaredMethods()

24. Wrapper class (기본형 변수를 객체형 변수로 변경해야할 경우 사용)
     Byte, Short, Integer, Long, Character, Float, Double, Boolean

25. String class (immutable 불변 클래스 Wrapper class 포함)
  (1) 한번 생성된 객체의 내용을 연산이나 메소드의 사용에 의해  변화시키는 것이 불가능하다.
  (2) 문자열의 비교시는 (== X) equals 메소드를 써야한다.

26. Math (객체 생성 불가)
     수학연산과 관련된 메소드가 존재하는 유틸 클래스

27. Calendar
     날짜 및 시간을 위한 클래스

28. SimpleDateFormat, DecimalFormat
     날짜나 숫자 등을 원하는 방식으로 변환할때 사용

29. System
     exit(0) : 인자값으로 0이면 정상종료, 0 아니면 비정상종료
     gc() : 가비지 컬렉터를 가능한한 빨리 실행되도록 하는 메소드
     arraycopy() : 배열 복사시 사용
     currentTimeMillis() : 시스템의 현재시간을 long 타입으로 가져옴

30. Collection Framwork (자료구조)
  (1) hierachy(계층구조)
            Collection                             Map
             |    |    |                      |
  Set  List   Queue      SortedMap
  |
 SortedSet

  (2) interface
     <1> Collection : 컬렉션 계층구조의 root
     <2> Set : 중복된 요소(element)를 허용하지 않는다.
      ex) 트럼프 카드
     <3> List : 순서가 있는 컬렉션(sequence 라고도 한다.) 중복된 요소 허용, 인덱스로 각 요소에 접근 가능
     <4> Queue : 우선순위를 가지는 여러개의 요소를 가지고 있는 컬렉션 FIFO(First-in First-out)
     <5> Map : key와 value로 이루어진 객체, 중복된 key는 불가
      // 순서가 있는 계열
     <6> SortedSet : 오름차순(ascending)의 순서로 요소를 가진다.
     <7> SortedMap : key 값을 오름차순의 순서로 가진다.
      ex) 사전, 전화번호부
  
     // ETC
     <8> Enumeration : 요소를 나열된 형태로 가지고 있다.
     <9> Iterator : remove 가 가능하다
 
  (3) Implementations (구현체들)
     <1> Set
            1) HashSet : TreeSet 보다 빠르다.
            2) TreeSet : SortedSet 에서 구현
     <2> List
            1) ArrayList : LinkedList 보다 빠르다.
            2) LinkedList : 각각의 요소가 연결되어 있는 리스트
                List 의 계속 요소(element)를 추가하거나 List 를 순환하면서 값을 삭제하거나 하는 일이 많을때 사용
                단, 데이터의 빠른 검색에는 적합하지 않다.(검색시 2번 인덱스를 찾기 위해서 0부터 찾아가기 때문)
               Queue 와 Stack 으로 사용 가능
                  -Queue : offer()(넣기), poll()(가장 앞의것 빼오기), 
                                peek()(삭제안하고 가져오기)
                  -Stack : addLast(), removeLast(), getLast()
     <3> Map
            1) HashMap : 빠르다. null key, null value 허용
            2) TreeMap : 순서가 있다.(SortedMap 구현물)
            3) LinkedHashMap : 집어넣는 순서로 정렬, 거의 
                HashMap 만큼 빠르다.
     <4> synchronized(동기화) 계열
            1) Vector (List 계열)
            2) Hashtable (Map 계열) : null key, null value 허용 안함
  (4) Collections : 각종 Collection 관련 유틸 클래스
  (5) Arrays : 배열 관련 유틸 클래스

31. Thread
  (1) Process : 컴퓨터 OS 내에서 실행중인 프로그램
  (2) Thread
       하나의 프로세스내에서 실행되는 일련의 명령흐름.
       즉, 프로세스의 구성단위
  (3) 특징
       한 프로그램내에서 동시에 두가지 이상의 일 수행하는 것으로 프로세스보다 작은 단위이며 프로세스의 자원
       (resource)을 공유하기 때문에 가볍다는 장점이 있다.
  (4) 생성과 실행
     <1> 쓰레드 대상 생성방법
            1) Thread 클래스를 상속받는 방법

     <2> 쓰레드 생성과 실행
            Thread th = new Thread(대상객체);
            th.start(); 
            start() 메소드를 호출하면 ready 상태가 되고,
            JVM에 의해서 자동으로 run() 메소드가 실행된다.
  (5) 소멸
        run() 의 body를 모두 수행뒤에 terminated 된다.
  (6) Life Cycle - ppt 자료 참조
  (7) 동기화 (synchronized)
        synchronized 블럭에 하나의 쓰레드가 객체에 대한 lock(monitor)을 소유하고 실행이 끝난 뒤 unlock 해주는 것
        즉, 한번에 하나의 쓰레드만 실행된다.
 

Posted by 미스터네오
,