1. MVC 심화 구조
1-1 기존 방식
기능 + 구현코드 (한 클래스에 작성)
- 관리 어려움
- 수정 어려움
public class MemberDao {
public List<Member> selectAll(Connection con){
// SQL 실행 코드
}
}
2. Interface - impl 구조
MemberDao ← 인터페이스 (기능 정의)
MemberDaoImpl ← 실제 구현 클래스 (실제 구현)
MemberService ← 인터페이스 (기능 정의)
MemberServiceImpl ← 실제 구현 클래스 (실제 구현)
3. Interface
기능의 규칙을 미리 정의하는 것
public interface MemberDao{
public List<Member> selectAll(Connection con);
public Member selectOne(Connection con, int n);
public int insert(Connection con, Member m);
public int update(Connection con, Member m);
public int delete(Connection con, int n);
}
- 기능
4. Impl 클래스
인터페이스에서 정의한 기능을 실제 구현하는 클래스
public class MemberDaoImpl implements MemberDao{
public int insert(Connection con, Member m) {
String sql = " INSERT INTO MEMBER VALUES(SEQ_MEMBER.NEXTVAL, ?,?,?,?,?,?,?) ";
// SQL 실행 코드
}
}
5. Interface - Impl 구조 사용 이유
5-1 역할 분리
인터페이스 (규칙 정의), Impl (실제 구현) 분리
5-2 유지보수 쉬움
DB 구조가 변경되어도 인터페이스는 그대로 두고 Impl만 수정 가능
5-3 코드 교체 쉬움
DB가 Oracle 에서 MySQL로 변경되어도 Impl만 바꿔도 사용 가능
6. SQL문 상수화
String selectAll = " SELECT * FROM MEMBER ";
String selectOne = " SELECT * FROM MEMBER WHERE M_NO = ? ";
String insert = " INSERT INTO MEMBER VALUES(SEQ_MEMBER.NEXTVAL, ?,?,?,?,?,?,?) ";
String update = " UPDATE MEMBER SET M_LOCATION = ?, M_JOB = ?, M_TEL = ? WHERE M_NO = ? ";
String delete = " DELETE MEMBER WHERE M_NO = ? ";
- SQL 수정 시 한 곳만 변경함으로 전체 수정 가능
- SQL 관리 편함
6-1 기존 방식
pstm = con.prepareStatement(" SELECT * FROM MEMBER ");
- SQL 직접 작성
6-2 상수화 방식
pstm = con.prepareStatement(selectAll);
- 변수처럼 재사용 가능
7. 기존 Controller
기존에는 기능별로 Controller을 따로 구현
MemberInsertController
MemberSelectController
MemberDeleteController
- 클래스 관리 어려움
- 중복 코드 증가
8. 통합 Controller
기능을 하나의 Controller로 통합
public Object doMethod(Object ... obj) {
String req = (String) obj[0];
if(req.equals("selectAll")) {
List<Member> res = s.selectAll();
return res;
} else if(req.equals("selectOne")) {
int no = (int) obj[1];
Member res = s.selectOne(no);
return res;
} else if(req.equals("insert")) {
Member m = (Member) obj[1];
int res = s.insert(m);
return res;
}
return null;
}
- Controller 클래스 하나로 여러 기능 처리 가능
9. 가변인자
매개 변수 개수를 자유롭게 받을 수 있는 문법
public Object doMethod(Object ... obj)
9-1 가변인자 사용하는 이유
통합 Controller에서는 기능마다 필요한 값 개수가 다르기 때문
| 기능 | 필요한 값 |
| 전체 조회 | "selectAll" |
| 선택 조회 | "selectOne", 회원 번호 |
| 추가 | "insert", Member 객체 |
- 매개변수를 자유롭게 받기 위해 가변인자 사용
예시
전체 조회
con.doMethod("selectAll");
선택 조회
con.doMethod("selectOne", inputNo());
추가
con.doMethod("insert", inputMember());
10. req 기능 구분
String req = (String)obj[0];
- 첫 번째 값에 기능 이름 저장
예시
"selectAll"
"insert"
"delete"'FullStack Study > 9주차' 카테고리의 다른 글
| JAVA 풀스택 41일차 - Algorithm2 (정렬 / 이진탐색트리) (0) | 2026.05.25 |
|---|---|
| JAVA 풀스택 40일차 - Algorithm (재귀함수 / 이중연결리스트 / 스택,큐) (0) | 2026.05.22 |
| JAVA 풀스택 38일차 - JDBC (MVC 패턴) (0) | 2026.05.20 |
| JAVA 풀스택 37일차 - JDBC2 (0) | 2026.05.19 |