Show Whitespace characters Check!

 

 

'공부 > Eclipse_TIP' 카테고리의 다른 글

Eclipse_TIP[단축키 모음]  (0) 2012.11.28
Eclipse_TIP[공백표시]  (0) 2012.07.02
Eclipse_TIP[파일 저장시 공백 업애기]  (0) 2012.07.02
Eclipse_TIP[라인표시]  (0) 2012.07.02
Eclipse_TIP[SVN Plugin 설치하기]  (0) 2012.06.30

 

 

'공부 > Eclipse_TIP' 카테고리의 다른 글

Eclipse_TIP[단축키 모음]  (0) 2012.11.28
Eclipse_TIP[공백표시]  (0) 2012.07.02
Eclipse_TIP[공백 설정(Space)]  (0) 2012.07.02
Eclipse_TIP[라인표시]  (0) 2012.07.02
Eclipse_TIP[SVN Plugin 설치하기]  (0) 2012.06.30

  - General(화살표)->Editors(화살표)->Text Editors-> Show line numbers(체크)->확인

 

'공부 > Eclipse_TIP' 카테고리의 다른 글

Eclipse_TIP[단축키 모음]  (0) 2012.11.28
Eclipse_TIP[공백표시]  (0) 2012.07.02
Eclipse_TIP[공백 설정(Space)]  (0) 2012.07.02
Eclipse_TIP[파일 저장시 공백 업애기]  (0) 2012.07.02
Eclipse_TIP[SVN Plugin 설치하기]  (0) 2012.06.30

  - NHN NEXT 에서 2013년 인재양성을 위하여 직접 설릭한 교육기관이다.

     이번 입학생 특전

     - 2년간 학비 전액 지급(무료라는 소리지)

     - 개별 노트북 지급 및 개인 작업공간 제공

     - 교수 1인당 15명 이하의 학생 배정. 밀착 지도 

 

     설립배경

   

    수시모집

    - 일반트랙

       1) 학습역량이 우수

       2) 한 분야에 열정을 가지고 끝까지 몰입한 결과를 보여주거나

       3) 학업계획서, 에세이를 통해 잠재력, 성장가능성, 학업에 대한 열의, 논리적 사고, 문제해결능력을 증명할 수 있는 지원자

 

    - 실기트랙

       1) 서류평가에서 소프트웨어 개발역량, 학업의지 및 열정, 논리적 사고능력, 문제해결능력, 학습역량을 모두 종합저으로 평가

       2) 소프트웨어 실기시험에서는 실제 소프트웨어 개발역량을 검증함.

       3) 개별면접 및 상황 면접에서는 소프트웨어 개발역량, 문제해결능력, 인재상 적합성을 평가함.

 

    모집전공

 

    모집일정

    - 일반트랙

   

    - 실기트랙

 

어차피 올해 끝나면 사이버대학 컴퓨터공학과 3학년 편입으로 갈려구 계획하고 있었는데. 이건 뭥미(?)

NHN NEXT 졸업하면, 대기업(DAUM, SK, SAMSUNG ...) 인턴쉽 및 취업을 지원해준단다.

내가 그냥 사이버대학가서 학사따고 경력으로 들어갈수 있는 실력이 2년후에 될까?

그렇다고, 들어가는게 쉬운게 아니다. 딱 120명 뽑는다. 하고 싶어도 어렵다.

너나 나나 나 들어가려고 할땐데, 2년 전액학비 지원에 취업까지라니!! 근데 졸업률을 75%로 예상하고 있어서

버티기 쉽진 않을 거같다. 얼마나 지원할까? 나같이 해볼까? 하는사람도 많겠지...

지원이나 해보자 -

'공부 > ETC' 카테고리의 다른 글

ETC_[ Win7 Telnet 설정 ]  (0) 2014.11.04
ETC_[Apache Error Code]  (0) 2013.08.24
학교숙제자료  (0) 2013.04.16
ETC_[제발 a href="#" 좀 쓰지 말자]  (0) 2013.03.13
주저리_[날짜 약자]  (0) 2013.01.08

  - 이클립스 메뉴에서

    Help -> Eclipse Marketplace 선택 -> 팝업 창 Find 에 'SVN' 입력 후 -> 'Go' -> 선택 후  검색 창에서 SubVersive 선택

'공부 > Eclipse_TIP' 카테고리의 다른 글

Eclipse_TIP[단축키 모음]  (0) 2012.11.28
Eclipse_TIP[공백표시]  (0) 2012.07.02
Eclipse_TIP[공백 설정(Space)]  (0) 2012.07.02
Eclipse_TIP[파일 저장시 공백 업애기]  (0) 2012.07.02
Eclipse_TIP[라인표시]  (0) 2012.07.02

#### Thread ####

  - 생각보다 Thread 범위가 광범위하다. 너무 많다. 일단 오늘 배운 것( Runnable & extends ) 두 가지를 포스팅!

 

### Extends Thread ###

    * Thread 를 extends 한 클래스를 작성한다.
    * run() 메소드를 오버라이딩하여 내용부를 삭정한다.
    * main() 메소드를 내부에서 Thread 를 extends 한 클래스의 객체를 생성한다.
    * 해당 객체의 start() 메서드를 호출
    EX)
    class Daniel1 extends Thread {
       public void run() {
           System.out.println("Thread Start");
           for ( int i = 0; i < 10; i++ ) {
               System.out.println(i);
           }
       }
    }

    public class Daniel1Main {
        public static void main(String args[] ) {
            Daniel1 danile1 = new Daniel1();
            adniel1.start();
            System.out.println("Thread End")
        }
    }

 

### Runnable Thread ###
    * Runnable 을 구현하는 클래스 작성
    * run() 메서드를 오버라이딩하여 내용을 구현
    * main() 메서드에서 Runnable 를 구현한 클래스의 객체를 생성
    * Thread 객체를 생성하여 매개변수를 implements Runnable 한 객체를 대입
    * Thread 객체의 start() 메서드 호출
    EX)
    class Ssung1 implements Runnable {
        public void run() {
            System.out.println("Thread Start");
            for ( int i = 0; i < 10; i++ ){
                System.out.println(i);
            }
        }
    }

    public class Ssung1Main {
        public void run() {
            Ssung1 ssung1 = new Ssung1();
            Thread ssung1Thd = new Thread(ssung1);
            ssung1Thd.start();
        }
    }

 

    - 허접하다. 쩝



 - 2015.02.06 Thread 추가


▶ Thread 우선순위

- 동시에 여러 Thread 를 실행할 때 우선순위를 주어 실행시간을 늘려줄수 있다.

  우선순위라고 해서 숫자가 낮은게 먼저라고 생각하겟지만, 그 반대이다.

  쉽게, 실행시간을 늘려주기 위한 숫자라고 생각하면 될 듯 하다.

  우선순위는 1 ~ 10 까지 정수이며, Default 값은 '5' 이다.

  ThreadGroup 으로 상위 그룹의 우선순위를 설정한 후에 하위에 쓰레드를 추가하면 상위 ThreadGroup 에 설정한 우선순위를

  따라간다.

  그리고, Thread start() 하기전에 우선순위를 주어야 하며, start() 한 후에 우선순위를 주면 에러가 난다.

  방법은, Thread.setPriority(int 우선순위 값) 안에 1 ~ 10 까지의 값을 넣어주면 된다.


▶ Daemon Thread (데몬 쓰레드)

- 데몬 쓰레드는 일반쓰레드의 작업을 돕는 보조적인 쓰레드

  일반 쓰레드가 종료되면 자동으로 데몬 쓰레드는 종료가 된다.

  무한루프나, 조건문을 이용해서 데몬 쓰레드 실행 후 대기하고 있다가 조건이 맞으면, 작업을 수행하고 다시 대기하는 쓰레드

  데몬 쓰레드 작성 & 실행 방법은 일반 쓰레드와 거의 동일하다.

  쓰레드 start() 전에 setDaemon(boolean on) 값에 'true' 지정하면 데몬 쓰레드가 된다.

  주의할 점은 우선순위 설정과 같이 start() 하기전에 setDaemon(boolean on) 값을 입력하어야 한다.


- ex


public class Thread_Ex11 implements Runnable {


    // 자동저장

    static boolean autoSave = false;


    public static void main(String[] args) {


        Thread thread = new Thread(new Thread_Ex11());

        thread.setDaemon(true);

        thread.start();


        for (int i = 1; i < 20; i++) {

            try {

                thread.sleep(1000);

            } catch (Exception e) { }

            System.out.println(i);


            if( i == 5 ) {

                autoSave = true;

            }

        }

        System.out.println("프로그램을 종료합니다.");

    }


    @Override

    public void run() {

        while (true) {

            try {

                Thread.sleep(3 * 1000);     // 3초

            } catch (Exception e) { }


            // true 이면

            if (autoSave) {

                autoSave();

            }

        }

    }


    public void autoSave() {

        System.out.println("작업파일이 자동저장 되었습니다.");

    }

}


- main() 메서드 for 문이 종료되면 데몬 쓰레드는 자동으로 종료가 된다.
  하지만, 데몬쓰레드 설정 setDaemon(boolean on) 값에 'true' 설정을 하지 않고 그냥 보통 쓰레드로 위 구문을 실행하면,
  종료되지 않고.. 계속 "작업파일이 자동저장 되었습니다" 를 출력하게 될 것이다.(무한반복 '- ';;)


▶ 쓰레드 상태(JDK 1.5 부터 추가 됨)
- Thread.getState() 메서드 호출해서 확인 할 수 있다.

 STATUS

 COMMENT 

 NEW

 쓰레드가 생성되고 아직 START() 가 호출되지 않은 상태 

 RUNNABLE

 실행 중 또는 실행 가능한 상태 

 BLOCKED

 동기화블럭에 의해서 일시정지된 상태(LOCK 이 풀릴 때 까지 기다리는 상태)

 WAITING

 TIMED_WAITING

 쓰레드의 작업이 종료되지는 않았지만 실행가능하지 않은 일지정지 상태.

 TIMED_WAITING 은 일시정지시간이 지정된 경우를 의미 

 TERMINATED

 쓰레드의 작업이 종료된 상태





... 나중에 보면 또 다 까져먹을거 같은데..


 

   

'공부 > JAVA' 카테고리의 다른 글

JAVA_[날짜 형식 변경(SimpleDateFormat)]  (0) 2012.11.12
JAVA_[Vector]  (0) 2012.07.31
JAVA_[객체_직렬화]  (0) 2012.06.23
JAVA_[Adapter_패턴 (일명 : Wrapper 패턴)]  (0) 2012.06.23
JAVA_[Eclipse_SerialVersionUID]  (0) 2012.06.23

  - 자바 객채를 저장하거나 전송하기 위해서 자바 객체의 코드를 다시 복원가능한 형태의 Stream 으로 변경(?) 직렬화 시켜주는 것
  - 용어 설명
    * 직렬화 : Heap 에 위치한 객체를 출력 가능한 상태로 만드는 작업
    * 역직렬화 : 직렬화된 객체를 다시 Heap 에 넣기 위한 작업
    * 직렬화의 대상은 객체의 Attribute 의 값 (메소드는 그저 주소값만 필요) - Attribute 만 직렬화된단 말씀
    * 객체를 IO 하기 위해서는 필터 스트림인 ObjectInputStream & ObjectOutputStream 이 필요하다
    * 직렬화할 대상객치는 java.io.Serializable 를 implements 한 클래스(객체) 이어야 한다.


    EX) 직렬화 대상 클래스
    import java.io.*

    public class Member implements Serializable {
        private String name;
        private String address;
        private String hobby;
        private transient int age;  // 객체 Instance 앞에 transient 키워드를 붙여주면 직렬화 대상에서 제외 된다.
    }
   
    EX) 객체 직렬화 하기
    public void writeMenberObject(Member m) throws IOException {
        ObjectOutputStream oos = null;
 try {
     oos = new ObjectOutPutStream(new FileOutputStream("mem.obj") );  // 연결 + 필터 추가
     oos.writeObject(m);  // 객체를 출력하는 메소드 : writeObject(Object obj)
     // write 할때 Exception 이 발생하는데 이 때 close 를 안하면 스트림이 안닫혀 있는 상태로
 } fimally {
     if( oos != null ) {
             oos.close();  // close 해줌
          }
       }
    }

 

    EX) 역직렬화 된 객체를 복원하기
    public Member readMemberObject() throws IOException, ClassNotFoundException {
        ObjectInputStream ois = null;
 Member m = null;
 try {
     ois = new ObjectInputStream(new FileInputStream("mem.obj") );
     m = (Member)ois.readObject();
 }finally {
         ois.close();
         return m;
         }
      }

 

  - 직렬화 대상 클래스 EX) 중에 인스턴스 변수명 앞에 "transient" -> 객체 직렬화 피하기!
    * 보안적인 측면에서 직렬화 할때 빼는 경우
    * 직렬화 대상이 아닌 객체의 Type
      - 예제를 보기전에 설명을 하자면 직렬화할 클래스에 implements Serializable 를 붙였다.

         Ex) Class Woochul implements Serialzable
        'Ex)' 의 'Woochul' class 에 다른 객체(Serialzable 안한 class)의 멤버 인스턴스를 가지고 있다면, 직렬화가 되지 않는다.
              이때도, transient 를 사용해서 제외시킨다.(코드를 수정하지 않아도 되는 이점이 있다고 한다.)

        EX) 객체 직렬화 피하기
 Class Woochul implements Serialzable{
     Ssung ssung = new Ssung(); -> transient Ssung ssung = new Ssung();  // 객체 직렬화 피하기
 }

 Class Ssung {
     ....
 }

 

  - 부록
    역직렬화해서 만든 객체(readObject() 메소드로 불러온 객체)의 클래스가 변경 되었을떄
    JVM 은 역직렬화 객체를 대입할수 없다고 예외를 발생 시킨다.
    직렬화, 역직렬화 할때 JVM 이 serialVersionUID 를 부여하는데 역직렬화해서 만든 객체의 클래스가 변경될때 이 값

    (serivalVersionUID) 변경이 되어 서로 일치하지 않아서 발생하는 현상이다.
    이를 해결하기 위해서 새로변경된 클래스와 역직렬화 하는 객체의 serialVersionUID 를 일치시켜주어야 한다.


    참고사이트 ->    #####  http://dojeun.egloos.com/317825   #######

'공부 > JAVA' 카테고리의 다른 글

JAVA_[Vector]  (0) 2012.07.31
JAVA_[Thread]  (0) 2012.06.23
JAVA_[Adapter_패턴 (일명 : Wrapper 패턴)]  (0) 2012.06.23
JAVA_[Eclipse_SerialVersionUID]  (0) 2012.06.23
JAVA_[코딩_지침]  (0) 2012.06.21

  - '이미 제공되어 있는 것'과 '필요한 것' 사이의 '차이'를 없애주는 디잔인 패턴 이 Adapter 패턴 (일명 : Wrapper 패턴)
 
  - Adapter 패턴의 종류
    * 클래스에 의한 Adapter 패턴 (상속을 사용한 Adapter 패턴)
      - 단점 : 상속 을 활용하기 때문에 유연하지 못하다.
      - 장점 : 어댑터를 전체를 다시 구현할 필요가 없다.(빠르다는 얘기)
      - 주의 : 자바는 다중상속을 지원하지 않는다. (Ex - public class Adapter extends Target, Adaptee{} )
        EX)
        public class Adaptee {
     public void specificRequest() {
         System.out.println("Adaptee.speificRequest()" );
     }
 }

        public interface Target{
     public void request():
 }
       
        public class Adapter extends Adaptee implements Target {
     public void request() {
         this.specificRequest();  // 다중상속
     }
 }

 public class Clinet {
     public static void main(String args[] ) {
         Target target = new Adapter();
  target.request();
     }
 }

 결과 : Adaptee.speificRequest(); 출력 된다.
 대충 소스를 보면 이해는 되겟는데... 설명하라면 못하겠다 -0-

 

 

 

    * 인스턴스에 의한 Adapter 패턴 (위임을 사용한 Adapter 패턴)
    - 단점 : Adapter 클래스의 대부분의 코드를 구현해야 하기 떄문에 효율적이지 못하다.
    - 장점 : 구성(Composition) 를 사용하기 때문에 더 뛰어나다(유연하다)
      EX)
      public class Adaptee {
          public void specificRequest() {
       System.out.println("Adaptee.speificRequest()" );
   }
      }

      public interface Target {
          public void request();
      }

      public class Adapter implements Target {
          Adaptee adaptee = new Adaptee();  // 객채 생성

   public void request() {
       adaptee.specificRequest():  // 객체 연결
   }
      }

      public class Clinet {
          public static void main(String args[] ) {
       Target target = new Adapter();

       target.request();
   }
      }
       결과 : Adaptee.speificRequest(); 출력 된다.

 

 

 

 

 

 

 

 

 

'공부 > JAVA' 카테고리의 다른 글

JAVA_[Thread]  (0) 2012.06.23
JAVA_[객체_직렬화]  (0) 2012.06.23
JAVA_[Eclipse_SerialVersionUID]  (0) 2012.06.23
JAVA_[코딩_지침]  (0) 2012.06.21
JAVA_[StringTokenizer 과 Split 의 차이]  (0) 2012.06.21

#### SerialVersionUID ####

 

- 데이타의 전송은 객체건 뭐건 바이트의 흐름으로 전송&저장 이 된다.

  다시 읽었을 때 객체의 자료구조를 그대로 보존하지 않으면 안된다(그것이 Serialzation)

  만일, serialVersionUID 를 지정하지 않으면 실행시점에서 JVM 이 디폴트 값을 산정하게 되며,

  그 알고리즘은 JAVA(TM) Objec Serialzation Specification 의 정의 된것을 따른다고 한다.

  한마디로 굳이 신경 쓸 필요는 없다는 뜻!

 

  모든 serialzation 이 필요한 클래스에는 명시적으로 serialVersionUID 를 선언해주는 것이 좋다.

  그 이유는 디폴트 serialVersionUID 계산은 클래스의 세부 사항을 매우 민감하게 반영하기 때문에

  컴파일러 구현체에 따라 deserialzation(serialization 했던 객체를 복구하는 과정) 과정에서 예상하지 못한

  InvalidClassException을 유발할 수 있다는게 이유란다. 난 몬 소린지 모르겟다.

 

  위에 설명 다 집어 치우고 - 서로 다른 자바 컴파일러 구현체 사이에서도 동일한 serialVersionUID 값을 얻기 위해서는 명시적으로

  serivalVersionUID 값을 선언해야 하며 가능한 serivalVersionUID 을 pivate 으로 선언하라는 것이다.

  (상속되어 쓰여지는 것은 유용하지 않고, 해당 클래스에서만 쓰일 것이기 때문에...)

 

  - 설정 방법

  1. 첨부파일을 압축을 풀고, 이클립스 플러그인 디렉토리에 넣어두면 자동생성 플러그인 설치 끝

serialversionutil-civan.zip

 

  2. 설정 방법

 

 

  다음과 같이 Add SerialVersionUID 가 자동생성 후

  앞에 private 만 적어주면 완료.

 

 

 

   

'공부 > JAVA' 카테고리의 다른 글

JAVA_[객체_직렬화]  (0) 2012.06.23
JAVA_[Adapter_패턴 (일명 : Wrapper 패턴)]  (0) 2012.06.23
JAVA_[코딩_지침]  (0) 2012.06.21
JAVA_[StringTokenizer 과 Split 의 차이]  (0) 2012.06.21
JAVA_[텍스트파일읽기_예제]  (0) 2012.06.21

+ Recent posts