자바(Java) 기본 정보
자바(Java) 기본 정보 정리
* IDE 
    - Eclipse, IntelliJ IDEA,  NetBeans
//===========
* 한글 깨짐 해결방법
    - *.java 파일을 UTF-8 로 저장하고 컴파일 옵션 조정
> javac.exe  -encoding UTF-8 Main.java
> java.exe Main
//===========
* 'IntelliJ IDEA' IDE 설정
    - 문서 UTF-8로 저장
    - File -> Project Setting -> Editor 
            -> File Encodings
                - IDE Endoding : UTF-8 
                - Project Encoding : System Default <-- 중요(UTF-8 아님)
                - Default encoding for propertied : UTF-8
    - 프로젝트 속성 -> Build -> Compiler -> Javva Compiler
        - Additional command line parameters :  -encoding UTF-8
    - idea.exe.vmoptions 파일 수정 - (사실 변화 없음)
C:\Program Files (x86)\JetBrains\IntelliJ IDEA 14.1\bin\idea.exe.vmoptions 열어서 다음행 추가
        -Dfile.encoding=UTF-8
//===========
* 'IntelliJ IDEA' 에서 실행시 윈도우 창에서 한글 출력 에러(깨짐 현상)
    - 해결방법 : 프로젝 옵션중 Project Encoding 을 System Default로 바꿔야 함
    //참고
    - 컴파일에 javac.exe를 사용하지 않는다
    - java.exe 로 명령행에서 실행하면 한글 제대로 출력됨
    - GUI Designer나 jFormDesigner에서 만들어진 *.form 파일을 활용하면 한글 정상
    - AWT 사용시, *.java 파일에 쓴 한글 깨짐
    - Run 단계의 java.exe 옵션 변경
        - java.exe 실행 옵션에 -Dfile.encoding=UTF-8 있으니 글자깨짐
        - 옵션을 뺄려면 프로젝 옵션중 Project Encoding 을 System Default로 바꿔야 함
- 여러창 열기(Allow multi instance)
File -> Setting -> Appearance & Behavior -> System Settings 
    -> Project Setting : Open project in new window
//==============
* JAR (Java 실행파일) 파일 만들기
    JAR.exe cfe Main.jar Main Main.class 필요한 클래스들...
* IntelliJ IDEA 에서 JAR 생성
    - 설정 : Project Setting -> Artifacts -> 설정추가
    - 생성 : Build -> Build Artifacts
* EXE 파일 만들기
launch4j 이용
http://launch4j.sourceforge.net/
//===========
* 주석 : C++과 동일
    - 한줄 : //
    - 범위 : /*   */
//=================
* 제어, 조건, 반복
http://www.tutorialspoint.com/java/java_loop_control.htm
https://wikidocs.net/211
      do{
         System.out.print("value of x : " + x );
         x++;
         if( x > 10) break;
      }while( x < 20 );
      for(int x = 10; x < 20; x = x+1) {
         System.out.print("value of x : " + x );
      }
      int [] numbers = {10, 20, 30, 40, 50};
      for(int x : numbers ){
        if( x == 30 ) {
              continue;
         }
         System.out.print( x );
      }
      
      String [] names ={"James", "Larry", "Tom", "Lacy"};
      for( String name : names ) {
         System.out.print( name );       
      }
//=================
* 클래스, 메소드(=함수)
public class Main {
    public static void main(String[] args) {
        System.out.println("헬로우 World ");
        Test1 t1 = new Test1();
        t1.sum1(1,2);
    }
}
class Test1 {
    int i;
    //생성자
    public Test1(){
        i= 2;
        System.out.println("생성자 ");
    }
    //소멸자, 사용 권장안함!! 실행된다는 보장이 없음
    public void finalize() {
        System.out.println("소멸자 ");
    }
    //메소드(=함수)
    public int sum1(int a, int b) {
        System.out.println("sum ");
        return a+b;
    }
}
//==================
* 파일 입출력
http://chs02.tistory.com/14
    void FileOp() throws IOException  {
        //파일 쓰기
        System.out.println("파일 쓰기");
        FileWriter fw = new FileWriter("C:\\Test.txt");
        BufferedWriter bw = new BufferedWriter(fw);
        for(int i=0; i< 10; i++){
            bw.write( (i+1)+"줄\r\n" );
            bw.flush();
        }
        bw.close();
        fw.close();
        //================
        //파일 읽기
        System.out.println("파일 읽기");
        FileReader fr = new FileReader("C:\\Test.txt");
        BufferedReader br = new BufferedReader(fr);
        while(true) {
            String line = br.readLine();
            if (line==null) break;
            System.out.println( line );
        }
        br.close();
        fr.close();
    }
//=================
< GUI >
* AWT(Abstract Window Toolkit) : 
* 스윙(Swing) - AWT 보다 나은 그래픽 제공
* 표준 위젯 툴킷(SWT, Standard Widget Toolkit)
    - 이클립스에서 사용하고 있는 자바기반의 위젯 툴킷(Widget Toolkit) 
    - JNI(Java Native Interface) 사용
예제 소스
//==================
< 자바 관련 용어 정리 >
* 자바 버전 출시 역사
http://en.wikipedia.org/wiki/Java_version_history
    JDK 1.0 (1996)
    JDK 1.1 (1997) - JDBC, RMI, JIT
    J2SE 1.2 (1998) - Swing, IDL, Collections
    J2SE 1.3 (2000) - RMI, JNDI, JavaSound
    J2SE 1.4 (2002) - Java Web Start
    J2SE 5.0 (2004)
    Java SE 6 (2006)
2008/9 - 안드로이드 운영체제 1.0 발표
2009/4 - 썬을 오라클이 인수합병, Oracle에게 넘어감
    Java SE 7 (2011)
    Java SE 8 (2014) - Lambda
Java SE 9 (2017) - 6개월 단위로 버전업 선언
Java SE 10 (2018)
Java SE 11 (2018) - LTS
Java SE 12 (2019)
Java SE 13 (2019)
Java SE 14 (2020)
Java SE 15 (2020)
Java SE 16 (2021)
Java SE 17 (2021) - LTS
https://en.wikipedia.org/wiki/Java_version_history
* PaaS(Platform as a service) 
    - 개발 요소들을 웹에서 빌려쓰는 모델
    Google App Engine(GAE) : 
    Microsoft Azure : 
    Amazon Web Services (AWS) : 
* Groovy(그루비)
    -  자바에 파이썬, 루비 등의 특징을 더한 언어
* Hibernate
    - 자바 기반의 ORM (Object Relationship Mapper)
    - 자바 객체를 RDBMS의 하나의 ROW로 맵핑
* JBoss 
    - 자바기반 미들웨어, 어플리케이션 서버
* Drools : 오픈 소스 Rule Engine
* Rule Engine: 
    - 소프트웨어의 일부분이며, 최소한의 지식(Knowledge)만으로도, 결론을 추론(inferencing)해낼 수 있는 도구
    - 문제점 분석, 장애 발생 의심 상황 탐지, 매우 복잡한 문제 해결 
* JavaBeans (자바빈즈)
    - 자바로 작성된 재사용가능한 컴포넌트
    - 자바빈 규약을 따르는 클래스
    - MVC 구조에서 모델(Model)에 해당, 데이터를 표현
* 서블릿( Servlet )
    - 웹서비스를 위한 인터페이스, javax.servlet.Servlet 인터페이스의 구현체
    - 클라이언트의 요구를 받아 그에 대한 처리를 한 후, 결과를 되돌려주는 서버 모듈
    
* 서블릿 컨테이너
    - servlet을 실행하고 관리하는 역할
    - 네크워크 통신, 서블릿의 생명주기 관리, 스레드 기반의 병렬처리를 대행
    - HTTP 요청을 해석하여 적정한 서블릿의 service 메서드를 호출
* 미들웨어
    - 클라이언트와 서버 간의 통신을 담당하는 시스템 소프트웨어
    - 컴퓨터와 컴퓨터의 연결을 담당하는 시스템 소프트웨어
    - TP 모니터(TP Monitor: Transaction Processing Monitor)
    - 데이터베이스 미들웨어 : ex)  ODBC 드라이버
    - WAS(Web Application Server) 미들웨어 : JBoss
            
* 어플리케이션 서버, WAS(Web Application Server)
    - HTTP 세션 처리를 위한 웹서버,  
    - TP모니터(Transaction Processing Monitor, Teleprocessing monitor)
    - 기업 업무까지 자바, EJB 컴포넌트 기반으로 구현 가능하게 해주는 미들웨어
    - 제우스, JBoss
* JavaEE Persistence
    - 다양한 데이터 소스에 대한 범용적인 접근
    - ex) JDBC, ODBC
* OSGi
* Thymeleaf
    -  web application에서 view를 쉽게 작성할수 있도록 해주는 View Template Engine
    - XML / XHTML / HTML5 template engine