[JDBC][국비교육] Day 58

Ga02·2023년 3월 23일

국비교육

목록 보기
55/82

🔍 DTO, Data Transmission Object

데이터 전송 객체

  • 프로그램의 내부 구조를 구성하고 있는 각 계층(Layer) 사이에서 계층간 데이터를 전달(교환)을 위해 작성되는 클래스
    ✔ 프로그램 내부 계층(Layer) 구조 👉🏻 MVC
    : 기능적으로 구분되는 프로그램 내부의 코드들을 객체들끼리 모아놓은 개념 👉🏻 자바에선 패키지 같은 개념
기능1	-	입력	-	로직	-	출력	-	데이터
기능2	-	입력	-	로직	-	출력	-	데이터
			Layer	Layer	Layer	Layer
  • 일반적으로 프로그램에서 사용하는 테이블 하나를 DTO클래스 하나로 표현
  • 별도의 기능을 넣지 않고 데이터 처리 기능만 하도록 작성

한 코드에 전부 작성하면 일부만 고치고 싶을 경우 어디가 어던 기능을 하는 코드인지 찾기 힘든 경우가 있음
-> 입력처리, 출력처리, 로직, 기능1, 기능2, ... 이렇게 기능별로 나눠서 작성하는 것이 좋음 ➡ 객체지향
나누는 방법이 개인별로 달라지게 됨 -> 정형화 시키기
입력처리, 출력처리 나눠서 이름 붙이기
시작점을 담당하는 애는 어떤 클래스로 만들자~ 하는 식으로 어떤 모양을 갖추도록 약속, 표준화
-> 일종의 디자인 패턴
반드시 지켜야 하는 것은 아님. 프로그램만 잘 돌아가면 잘 만든거겠지만~ 코드 공유가 힘들고 유지보수가 힘듬
적어도 자바 웹 개발을 한다면 MVC를 모르면 안됨
FrameWork : 개발방식, 동작, 실행 방식을 표준화해놓은 것
같은 프레임워크를 사용해서 개발을 하면 모르는 사람들끼리도 코드보고 소통이 가능
웬만하면 계층을 넘나드는 순서가 정해져있음
엔티티 개념을 갖고있음! 사용하기도 작성하기도 편함
해쉬맵 쓰나요 DTO 쓰나요 물어보기
TB Join시 DTO는 어떻게 하지? JoinDTO TB를 하나 더 만들기
두개 조인된 테이브릉ㄴ 해쉬맵으로 쓰던지~ -> DTO와 해쉬맵 섞어쓰기

➰ VO, Value Object

데이터 저장 객체

  • 데이터를 보관, 처리하는 용도로 작성되는 클래스
  • 데이터(값)를 가진 객체를 비교하는데 사용할 수 있게 작성됨
  • 데이터를 읽기 전용으로 설정

    안에 있는 데이터가 어떤 데이터인지가 중요한 경우
    DTO, VO 결과물이 비슷하게 생겨서 헷갈릴 것
    우리는 계층간 데이터 교화닝 중요해서 DTO로마 ㅁ볼 것~

➰ DTO 클래스를 작성하는 규칙

  • 멤버 필드는 모두 private 접근 제한자를 적용
  • 메소드는 getter, setter, toString만 작성
  • 추가적인 기능을 가진 일반 메소드를 작성하지 않음
    ❗ 디폴트 생성자를 반드시 가지도록 작성

DTO 클래스의 이름을 DB의 테이블 이름으로 작성하는 것이 좋음
DTO 클래스의 멤버 필드 이름과 자료형은 테이블의 컬럼을 따라서 작성하는 것이 좋음

MVC
지금은 Persistent Layer 배우고 있음

➰ DAO, Data Access Object

데이터베이스의 데이터에 접근하기 위해 작성되는 객체

  • DB연결(접속), SQL 수행, 결과처리 등의 DB 작업 처리를 담당하는 객체
  • 각 테이블에 맞춰서 DAO클래스를 하나씩 작성 👉🏻 메소드 하나가 기능 하나 / 메소드 여러개로 구성될 것
  • 데이터베이스에 수행할 SQL 구문 하나를 하나의 메소드로 구현
class EmpDao {
	public void selectEmp() {
    	String sql = "SELECT * FROM emp";
    }
    public void insertEmp() {
    	String sql = "INSERT INTO emp ~~";
    }
}
  • DAO를 interface와 class로 나누어서 작성하면 좋음
    👉🏻 interface에서 구현될 추상 메소드들의 목록을 확인할 수 있음
    • interface에서 메소드 전체 개요를 확인할 수 있음
    • interface의 추상 메소드에 기능에 대한 설명을 주석으로 같이 작성해두도록!
    • class에서는 실제 구현 코드, 상세한 로직을 확인할 수 있음

.jar 파일 추가 안했다!!!

-- INSERT 할 때 시퀀스값 자동 증가 적용 트리거
CREATE OR REPLACE TRIGGER usertest_ai_trg
BEFORE INSERT ON usertest
FOR EACH ROW
BEGIN
SELECT
usertest_sq.nextval
INTO
:NEW.idx
FROM dual;
END;
/
SET SERVEROUTPUT ON;

-- userTest테이블에 INSERT가 수행될 때마다
-- usertest_ai_trg 트리거 객체가 idx값으로
-- usertest_sq.nextval을 자동으로 채워줄 것이다
-- ** idx컬럼값을 지정하지않을 경우 트리거가 제대로 동작함
INSERT INTO userTest( userid, name ) VALUES ( 'ai_new', 'ai_new' );

SELECT * FROM usertest
ORDER BY idx DESC;

profile
IT꿈나무 댓츠미

0개의 댓글