DAO/DTO 패턴 / 자바 Swing(스윙) - (1)

2022. 10. 6. 08:33Dev.Program/Java & Spring

728x90

======== JAVA0416 프로젝트 만들기

DAO / DTO

DBCP

지난시간 < JDBC_Member_Management.java > ⇒ JAVA0416 으로 복사해오기

  • DAO/DTO.java 만들기

< Presentation Logic >

  • 프로그램에서 사용자와의 상호작용을 위해 보여지는 부분의 코드
  • 주로 GUI 구현 등

< Business Logic >

  • 프로그램 상에서 데이터베이스 등에 접근하여 데이터 처리 등의 실제 작업을 수행하는 코드

< DAO/DTO 패턴 >

1. DAO(Data Access Object, 데이터 접근 객체)

  • 데이터베이스에 접근하여 데이터를 처리를 담당하는 객체

(DB 에 대한 INSERT, UPDATE, DELETE, SELECT 작업을 실제로 수행하는 코드들)

  • XXXDAO 클래스

2. DTO(Data Transfer Object, 데이터 전송 객체)

  • Presentation Logic 과 Business Logic 사이에서 작업에 필요한 데이터를 저장하여 전송하는데 사용되는 객체
  • XXXDTO 또는 XXXBean 클래스 형태의 이름을 갖는다
  • 멤버변수, 생성자, Getter/Setter 메서드로 구성

 

======== MemberDTO.java / MemberDAO.java 만들기

< MemberDTO.java >

public class MemberDTO {
/*

* DTO(Data Transfer Object, 데이터 전송 객체)
* - Presentation Logic 과 Business Logic 사이에서 작업에 필요한 
*   데이터를 저장하여 전송하는데 사용되는 객체
* - XXXDTO 또는 XXXBean 클래스 형태의 이름을 갖는다
* - 멤버변수, 생성자, Getter/Setter 메서드로 구성
*/

// 멤버변수 선언 - DB 테이블 컬럼과 동일하게 선언
private int idx;
private String name;
private int age;
private String email;
private String jumin;

// 생성자 정의 - 필요에 따라 기본생성자와 파라미터 생성자 정의
public MemberDTO() {}

public MemberDTO(int idx, String name, int age, String email, String jumin) {
this.idx = idx;
this.name = name;
this.age = age;
this.email = email;
this.jumin = jumin;
}

// Getter / Setter 정의
public int getIdx() {
return idx;
}

public void setIdx(int idx) {
this.idx = idx;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public String getEmail() {
return email;
}

public void setEmail(String email) {
this.email = email;
}

public String getJumin() {
return jumin;
}

public void setJumin(String jumin) {
this.jumin = jumin;
}

}

 

< MemberDAO.java >

jdbcUtil ⇒ 한 번 더 쪼갬!

======== jdbcUtil.java 만들기

====================================================================

http://jakarta.apache.org/

  • 필요한 파일 3가지

< 첫번째 파일 >



< 두번째 파일 >

< 세번째 파일 >

 

 

  • 여기에 파일 3개 복사 붙여넣기
  • 이클립스 껐다 켜기
  • 이렇게 들어가있음

====================================================================























< jdbcUtil.java >

  • JDBC 사용에 필요한 4가지 문자열 가져오기

  • 지난번보다 마지막꺼만 추가됨

  • 커넥션 풀에선 이 부분만 보면 됨
  • 커밋과 클로즈 해주기

 

====================================================================

java GUI

  • 2019-12 버전

 

  • WindowBuilder 1.9.3
  • install → confirm → 라이센스 동의 → finish

======== Ex.java

< 자바 Swing(스윙) >

  • 자바에서 GUI 구현을 담당하는 API 모음
  • 대부분 javax.swing 패키지 내에 클래스들이 존재

(이벤트 처리를 위한 클래스 등은 별도의 패키지에 존재) 

  • JFrame 클래스를 상속받아 사용하거나 인스턴스 생성하여 사용 ⇒ 창 관리

 

  • JFrame 상속받기
  • Ex 생성자 만들기
  • setSize();
public Ex() {
setSize(300, 200);
setVisible(true);
};
  • 창이 하나 생긴다
  • 창을 꺼도
    계속 돌아감 ( 수동으로 빨간 불 꺼줘야 함 )
  • closeOperation 추가해줘야됨. 근데 int 값을 받는다. 뭔지 모를 땐 클래스명. 찍어보기

 

  • 켰을 땐 빨간불 들어옴
  • 이제 닫으면 꺼짐

★★★★★ 세트

1. setSize(); 창크기 지정

2. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 창닫기 버튼기능 설정
3. setVisible(true); 창 표시 설정

public Ex() {
setSize(300, 200); // 창 크기 지정
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 창닫기 버튼기능 설정
setVisible(true); // 창 표시 설정
};
  • 이 세가지는 세트로 외우기
  • setVisible(true); 이게 없으면 창이 안 뜸! 무조건 마지막에 와야함(나머지는 순서 상관없음)





======== Ex2.java

  • 스윙하는 동안에는 메인메서드 안에 new 선언밖에 안함!

  • 이제 상속(extends) 받은 게 아니라 안에서 선언했기 때문에 f. 으로 불러옴
  • 아까와는 다르게 제목이 나옴!
  • 생성자에 텍스트 전달 시 창의 제목표시줄에 표시됨

setTitle(); 창 제목표시줄

JFrame f = new JFrame(); 
f.setTitle("JFrame 기초");
  • 이렇게 두 줄로 적어도 된다!

setLocation(x, y); 창 위치 지정

  • 기본값은 (0, 0) 으로 좌측 상단에 고정되어있다!
  • 옵션~~

setBounds(x, y, width, height); 크기부터 위치까지 한 번에 지정

  • setBounds(); 크기부터 위치까지 한 번에 지정가능
f.setBounds(600, 400, 400, 300);
  • location 값 600, 400 & size 값 400, 300
  • size 와 location 을 한 방에 처리!



======== Ex3.java

< setDefaultCloseOperation() 메서드 >

- 프레임 닫기 버튼에 대한 동작 지정

- 파라미터로 JFrame 클래스의 상수를 사용 가능

  1) JFrame.DO_NOTHING_ON_CLOSE : 닫기 버튼에 대한 동작 X

  2) JFrame.HIDE_ON_CLOSE : 현재 창(JFrame 객체)을 숨김(종료 X) - 기본값

  3) JFrame.DISPOSE_ON_CLOSE : 현재 창 종료. 다른 창(JFrame 객체)은 유지됨

  4) JFrame.EXIT_ON_CLOSE

 

> 자기가 직접 만들어보기!

import javax.swing.JFrame;

public class Ex3 {

public Ex3() {
JFrame f = new JFrame("프레임1");
// f.setSize(300, 300);
// f.setLocation(400, 300);
f.setBounds(300, 300, 400, 300);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}

public static void main(String[] args) {
new Ex3();
}

}

 

JFrame f2 = new JFrame("프레임2");
f2.setBounds(800, 300, 400, 300);
f2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f2.setVisible(true);
  • f2 도 추가!

 

하나는

f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

하나는

f2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

→ 프로그램 종료 때는 Exit

→ 그냥 창만 꺼질 땐 dispose

  • 창이 두개 켜졌을 때 dis 를 끄면 dis 하나 창만 꺼지는데
  • exit 를 끄면 창 두개 같이 꺼짐

 

< Ex.java >

  • 똑같은 사이즈의 창을 여러개 만들어야할 때 이렇게 객체생성해서 한 번에 관리
  • setSize() 메서드의 파라미터로 Dimension 객체 사용 가능

⇒ width, height 값을 관리하는 객체

 

  • location 도 똑같이 Point 가 있음



======== Ex4.java

< javax.swing.JButton 클래스 >

- 버튼 기능을 담당하는 클래스

- 생성자에 문자열 전달 시 Button 에 표시할 텍스트 지정 가능

- 생성 후 프레임 또는 패널 등의 컨테이너 객체에 부착(추가)해서 사용

  ⇒ 해당 컨테이너 객체의 add() 메서드를 사용

 

  • Component




  • 엔터!
  • 구현해야 할 추상메서드까지 자동으로 생성됨
  • 실행창
  • 이렇게 실행하는게 총 5단계가 압축되어 있는거! 

(이제부터 그 5단계를 차근차근해볼것)

 

======== 패키지 만들기 event_handling

  • 패키지 생성

======== Ex_Stage_1.java

< 이벤트 처리 1단계 >

  • 오류뜨는 이유는 구현해야 할 메서드(추상 메서드)가 있기 때문!
  • Add unimplemented methods 눌러서 자동 추가

  • addWindowListener();

  • 실행하면 두 줄 바로 출력됨
  • 눈에서 안보이면 De- 출력, 다시 보이면 Ac-
  • 최소화 누르면 최소화/비활성화 출력
  • 닫기 누르면 출력

 

이렇게만 만들면 종료 했을 때

빨간불 안꺼짐( 계속 돌아감 )

  • 한 줄 추가
  • 종료했을 때 꺼짐



======== Ex_Stage_2.java

< 이벤트 처리 2단계 >

1단계에서 우리가 필요한 메서드는 closing 하난데 인터페이스를 상속받았기 때문에 8개의 추상메서드를 전부 구현해야했다 → 코드 불필요 너무 많음!

그래서 추상메서드 2가지 이상일때만 Adapter 클래스를 쓸 수 있게 함

  • 객체만 바뀔 뿐 메서드 이름은 안바뀜
  • addWindowListener(listener);



728x90