회원관리 Program
Package : lecture0722.step1
Main.java : main method
- private field : db의 column명과 같은 변수명
UserDAO.java : DAO (data를 전문적으로 처리하는 객체)
User.java : DTO, VO, Entity, Bean
=> 원래는 각각의 기능별로 Package를 나누어야 한다.
Class.forName()
: JDBC Driver 로딩
Java
- Language spec
- Class, Instance (객체 지향)
- Class Library
- Thread
- IO
- Network
- Collection
- Database
Web
IOT
Design Pattern
Refactoring
Design Pattern
Class 작성(설계)시
- 객체지향 : 재사용성, 유지 보수
- 문제 또는 변화가 있을 경우 빠르게, 쉽게, 안정적으로 프로그램 수정이 가능해야 함
- 코드의 수정이 다른 부분에 미치는 영향을 최소화
SoC (seperation Of Concern)
- 여러 관점에 따라 분리시킴 = 관심사의 분리
- ex. JDBC
- Java Program과 DB 연결 기능, DB에서 데이터 처리 기능 등
- 여러 기능이 혼재되어 있지 않도록 구조를 변경하여 효율성을 향상시키는 방향으로 refactoring
▶ method 추출 기법(Method Extraction)을 사용하여 새로운 method를 만듦
- 현재 만든 JDBC 프로그램은 MySQL DBMS만 사용 가능
- 기업들은 나름대로의DBMS와 connection 연결 방식 사용
- 소스코드 제공 ??? -> 불가능
- 상속을 이용해 해결 (Template method Pattern - Framework에서 많이 사용)
- 상위 class(UserDAO)에 기본적인 logic 흐름이 구현(이 안에 protected method, abstract method가 있다.)
- 하위 class(NUserDAO)에서 추상 method를 overriding해서 하위 class에 맞도록 기능 완성
Step2 : Template method pattern
- class를 상속, 확장하는 가장 기본적인 방식
-> 상위 class : 변경되지 않는 기능(logic)
-> 하위 class : 변경할 기능(logic)을 구현
- 다른 관점에서 보면
- UserDAO에는 getConnection이라는 추상 method가 존재
- NUserDAO에서 구체적으로 객체를 어떻게 생성할 것인지 기술 (Factory Method Pattern)
Step3 : Factory Method Pattern
- 하위 class에서 객체 생성 방법을 구체적으로 결정해 사용하는 Design Pattern
Template method pattern과 Factory Method Pattern
- 상속 : 객체를 재사용한다는 측면에서 Good
- 그러나 상속의 문제점(다중 상속 불가능)이 존재
-> class를 분리해 만들어보자!
Step4 : Interface
Step5 : DI
결론!🌟🌟🌟
가능하면 class 간의 의존성을 낮추기 위해 interface 구현 방향으로 프로그램을 만들자!