Take off

블로그 이미지
by 안.들
  • Total hit
  • Today hit
  • Yesterday hit

'Java'에 해당되는 글 4건

  1. 2016.01.11
    POJO 란?
  2. 2016.01.11
    Maven이란?
  3. 2015.11.26
    Java MDI(multiple Document Interface)form Application 만들기 using AWT/Swing
  4. 2015.11.23
    "HttpClient" 를 이용하여 어플리 케이션 실행화일 업데이트 방법

출처) http://bsnippet.tistory.com/17


POJO 란?

각종 프레임웍 책에서, 그리고 기술 서적에서 POJO라는 단어를 통해 처음 접하게 된 용어이다. 그런데 막상 책에 나온 설명을 읽고, 다시 인터넷을 찾아봐도 이해가 되지 않았다. 평범한 객체!? 명백(Plain) 오래(Old) 자바(Java) 객체(Object)라는데 이게 무슨 말일까? 


실제적으로 POJO를 이해하기 위해선 Enterprize Java Bean(EJB)를 이해해야 한다. EJB에서 나오는 빈을 사용하는데 단점들을 극복하기 위해서 시작되었다. EJB에서 복잡한 3-티어(tier) 애플리케이션 환경을 이해해야 하는 어려움이 있었다. 단순히 빈을 만들기 위해서 다양한 부모 클래스를 알아야 했고, 인터페이스를 구현해야 했던 것이다. 이러한 제약들을 없애고 '단순한 자바 객체'를 이용해 개발하자는 것이었다. 이후에는 데이터베이스와 직접 상호 작용하기 위해 POJO 기반의 하이버네이트가 개발되어고, 간단하게 작업을 ORM 기능을 구현할 수 있게 되었다.(하이버네이트를 공부해보니, mybatis보다 쉽게 데이터베이스 작업을 할 수 있다. 한번 공부해놓으면 좋은 기술이다.)


개념적으로는 자바 언어 명세에서 강제적으로 제한되어진 것을 제외하고 어떠한 제약이 없는 자바 객체를 말한다. 구체적으로 예를 들면 다음과 같다. 


1. 부모 클래스를 확장하지 않는다.

public class Foo extends javax.servlet.http.HttpServlet { ...


2. 인터페이스 클래스를 구현하지 않는다.

public class Bar implements javax.ejb.EntityBean { ...


3. 어노테이션(Annotation)을 포함하지 않는다.

@javax.persistence.Entity public class Baz { ...


하지만, 여러 이유 때문에 많은 소프트웨어 제품이나 프레임워크에서 영속성(Persistence)과 같은 기능이 제대로 작동할 수 있도록 어노테이션을 사용하도록 제한을 두고 있다.


POJO는 기존의 복잡한 것들을 버리고, 간단한 자바 객체를 가지고 일을 처리하자는 철학을 가지고 있다.

클래스를 간단히 설계하고, 이 클래스를 여기저기에 배치하기 쉽게 의존성을 줄인 것이다.

AND

출처)

http://devzeroty.tistory.com/entry/Maven%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80

Maven에 대한 설명을 위 출처에서 그대로 copy & paste함



Maven은 크게 두가지 기능이 있다. 첫번째 라이브러리 관리 기능이다. Java로 개발을 하다보면 Spring, jdbc, junit, mybatis등 필요한 라이브러리들이 많다. 이걸 .zip형태로 다운받아서 수동으로 라이브러리를 추가 해줘도 된다.

수동으로 하는 방법이 방법이 훨씬 직관적일 수 있으니까. 이를테면 덧셈을 할 때 '1 + 1 = 2'라고 배우기 전에 사과 두개를 그려 놓고 '사과 한개에 사과 한개가 더 있으면 사과 2개이다.' 라고 하면서 배우는 것과 같은 이치이다.

나중에는 내가 덧셈을 배울 때 사과로 배웠는지 산까치로 배웠는지 잊어버리듯이 메이븐의 라이브러리 관리는 우리가 처음에 수동으로 라이브러리를 다운로드 받고 경로를 추가해주던지 복사해 주던지 하면서 외부 라이브러리를 관리 하다가 이것을 편하게 관리해 주는 기능만을 사용하도록 만들어 준다.

써보면 안다. 쓰는 법은 차차 익히게 될 것이다. 한번에 설명을 해줄 수 없으니 지금은 이해가 잘 가지 않더라도 천천히 가보도록 하자.

메이븐의 라이브러리 관리 기능은 너무 편하다. 이클립스에 기본으로 탑재 되어 있으므로 별다른 설정 없이 그냥 사용하면 된다.

pom.xml이라는 파일에 우리가 만들 App에 어떠한 라이브러리를 사용할 것인지 적어 놓기만 하면 Maven이 알아서 다운 받고 알아서 설치해 주고 경로도 지정해준다.

메이븐은 pom.xml이라고 해도 과언은 아니다. 메이븐이 편한 이유는 pom.xml파일만 있으면 Maven이 설치되어 있는 IDE라던지 혹은 시스템에 설치가 되어 있으면 Maven빌드를 통해 해당 파일을 다른곳에서도 쉽게 설치해준다.

이것은 git을 이용한 팀 프로젝트 할 때 더 유용하다.

두번째, 빌드 기능이다. 빌드란 무엇인지 이전 글에 써 놓은것을 보면 대충 감이 잡힐 것이다. '빌드'기능은 Ant도 가지고 있는 기능인데, 굳이 원한다면 라이브러리 관리는 maven으로 해도 되고 빌드는 수동으로 하거나 Ant를 이용해서 해도 된다.

하지만 결국은 maven하나로 통일하게 될 것이다.


결론은 메이븐이란 라이브러리 관리+빌드 툴인거다.




추가 출처)  http://www.slideshare.net/sunnykwak90/ss-43767933


AND

Java MDI(multiple Document Interface)form Application 만들기 using AWT/Swing

JavaMdiformApplication.zip


JAVA에서는 MDIForm이 기본적으로 제공 안됨.
유사한 모습으로 구현 가능한 것이 
Jframe( Parent ) - JinternalFrame ( Child ) 을 JdesktopPane 로 제어하는 프레임 구조임.

샘플화면


1. Java Project 생성


2. JFrame 생성 (Main 페이지)


3. JInternalFrame ( Child )


MDIFrame 수행을 위해서 메인 페이지에 메뉴추가 후 Child1,2,3을 실행 + 프로그래밍
Parent Page : JavaFrameMainPAge에서 메뉴추가



프로그래밍 

**javaFrameMainPAge 클래스에 JDesktopPane import.

import javax.swing.JDesktopPane; /*추가*/
import javax.swing.JInternalFrame;

@SuppressWarnings("serial")
public class javaFrameMainPAge extends JFrame {

        private JPanel contentPane;
        private JDesktopPane desktopPane ; /*추가 : 멀티문서 인터페이스 or 가상 데스크탑을 생성하는 컨테이너*/

        public static void main(String[] args) {
                EventQueue.invokeLater(new Runnable() {
                        public void run() {
                                try {
                                        javaFrameMainPAge frame = new javaFrameMainPAge();
                                        frame.setVisible(true);
                                } catch (Exception e) {
                                        e.printStackTrace();
                                }
                        }
                });
        }


**JDesktopPane 컨테이너에 JInternalFrame Add

private void mdiFormSetting(JInternalFrame oIframe)
        {               
                boolean bObj= true;
                JInternalFrame[] allFrames = desktopPane.getAllFrames();
               
                for(int i=0; i<allFrames.length; i++){
                        if(allFrames[i].getClass() ==  oIframe.getClass()){
                                bObj= false;
                                break;
                        }                       
                }
                
                if(bObj){
                        desktopPane.add(oIframe);
                        oIframe.setVisible(true);
                }
        }


**메뉴에서 Child1,2,3 페이지 호출

JMenuItem mntmChild = new JMenuItem("child1");
                mntmChild.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent e) {
                                
                                child1 obj = new child1();
                                mdiFormSetting(obj);
                        }
                });
                mnMditest.add(mntmChild);




별첨)소스파일


'Java' 카테고리의 다른 글

POJO 란?  (0) 2016.01.11
Maven이란?  (0) 2016.01.11
"HttpClient" 를 이용하여 어플리 케이션 실행화일 업데이트 방법  (0) 2015.11.23
AND

"HttpClient" 를 이용하여 어플리 케이션 실행화일 업데이트 방법

 

@호출Stack

AppMain(어플리케이션 메인), updateApp(업데이트모듈)

AppMain에서 업데이트 event 수행 => updateApp호출 => AppMain 종료 => updateApp수행 실행파일 다운로드(기존 실행파일 대체됨) => AppMain 실행

 

 

AppMain



        public void actionPerformed(ActionEvent e) {

                             

                              if(0 == uMessage.MsgPopup("업데이트 하시겠어요?", uMessage.MsgOption.OK_CANCEL)){

                                     

                                      File file = new File("oneDevCenterUpdate.exe");

                                      String sPath = file.getPath();

                                     

                                      Process p;

                                             try {

                                                    

                                                     //업에이트 수행 프로그램을 실행한다.

                                                     p = newProcessBuilder(sPath).start();

                                                    

                                                     //기존 메인 시스템종료한다.

                                                     System.exit(0);                                      

                                        

                                             } catch (IOException e1) {

                                                     // TODO Auto-generated catch block

                                                     e1.printStackTrace();

                                             }             

                                     

                              }

                       }

 

 

 

updateApp

 

http 통신/File IO 라이브러리 참조

 

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

 

import org.apache.http.HttpEntity;

import org.apache.http.HttpResponse;

import org.apache.http.client.HttpClient;

import org.apache.http.client.methods.HttpGet;

import org.apache.http.impl.client.DefaultHttpClient;

 

 

        public static void main(String[] args) throwsIOException {

               // TODO Auto-generated method stub

              

               File file = new File("oneDevCenter.exe");

               String sPath = file.getAbsolutePath();

              

               HttpClient httpclient = newDefaultHttpClient();

               HttpGet httpget = new HttpGet("http://??????/oneDevCenter.exe");

               HttpResponse response = httpclient.execute(httpget);

               System.out.println(response.getStatusLine());

               HttpEntity entity = response.getEntity();

               if (entity != null) {

                    InputStream instream = entity.getContent();

                    try {

                        BufferedInputStream bis = newBufferedInputStream(instream);

                        String filePath =sPath;

                        BufferedOutputStream bos = newBufferedOutputStream(newFileOutputStream(new File(filePath)));

                        int inByte;

                        while ((inByte = bis.read()) != -1 ) {

                            bos.write(inByte);

                        }

                        bis.close();

                        bos.close();

                       

                    } catch (IOException ex) {

                        throw ex;

                    } catch (RuntimeException ex) {

                        httpget.abort();

                        throw ex;

                    } finally {

                        instream.close();

                    }

                    httpclient.getConnectionManager().shutdown();

                    exeCuteAfterJavaStudy();

               }

        }

 

 

AppMain수행 : 파일의 위치를 찾고 수행한다.

 

       

        public static void exeCuteAfterJavaStudy()

        {

               Process p;

                       try {

                             

                              File file = newFile("oneDevCenter.exe");

                              String sPath = file.getAbsolutePath();

                             

                              p = newProcessBuilder(sPath).start();

                                            

                              System.out.println("Process Done");

                 

                       } catch (IOException e1) {

                              // TODO Auto-generated catch block

                              e1.printStackTrace();

                       }             

              

        }

 

 

 

 

 

Httpclient 는 http 프로토콜을 지원해주는 클라이언트 객체임.

해당 라이브러리를 응용해서 다양하게 구현해 보시기 바랍니다. (예, screen scrapping)

 

 

HttpClient library 링크:

Java :

http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/client/HttpClient.html

microsoft : http://msdn.microsoft.com/en-us/library/system.net.http.httpclient(v=vs.118).aspx

 

'Java' 카테고리의 다른 글

POJO 란?  (0) 2016.01.11
Maven이란?  (0) 2016.01.11
Java MDI(multiple Document Interface)form Application 만들기 using AWT/Swing  (0) 2015.11.26
AND

ARTICLE CATEGORY

분류 전체보기 (66)
금융 (0)
관제 (4)
Unix (1)
Android (6)
Windows (2)
Java (4)
oracle (3)
web (3)
English (3)
Physics (1)
Books (6)
요리 (1)
Deep Learning (6)
IoT (21)
to-do list (0)
Music (1)

RECENT ARTICLE

RECENT COMMENT

CALENDAR

«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

ARCHIVE