2022. 10. 6. 08:33ㆍDev.Program/Java & Spring
======== 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 만들기
====================================================================
- 필요한 파일 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);
'Dev.Program > Java & Spring' 카테고리의 다른 글
자바 Swing(스윙) - (3) (0) | 2022.10.06 |
---|---|
자바 Swing(스윙) - (2) (0) | 2022.10.06 |
JDBC(Java DataBase Connectivity) (0) | 2022.10.06 |
예외(Exception) / 쓰레드(Thread) (1) | 2022.10.06 |
java.util 클래스 / 정규표현식 / Pattern 클래스 / Matcher 클래스 (0) | 2022.10.06 |