Download and Setting
Spring
자바 개발을 위해 어느정도의 틀을 제공하는 일종의 프레임워크 중 하나.
-
MVC: Model, view, Controller Structure ( Model2 )
-
각 역할
- 서블릿: Controller 역할 (요청 파라미터를 추출, 분석, 처리 할 DAO를 결정 -> 결과를 보여줄 JSP를 결정. 일종의 교통정리)
- DAO, DTO: model(데이터를 만들어주는 역할)
- DAO, DTO: model(데이터를 만들어주는 역할)
Spring에서는 위와 같은 MVC 구조가 강제된다.
Spring 시작하기
-
spring.io 에서 해당 파일을 다운, 원하는 폴더에 압축해제
-
시작할 때 workspace 지정
-
help>Eclipse Marketplace에서 STS 검색, 버전에 맞는 STS 다운로드(web, server항목 등이 있음)
- 나의 경우 SpringToolSuite4 버전을 사용, 따라서 Spring Tool3 Add-On for Spring Tools 4 3.9.16.REALEASE를 다운
-
Changes
1) Change
to 1.8 Change to 1.6.10 2) Change Compiler
- Preferences>Java Compiler> change java version(1.8)
- Edit Library>JRE System Library> change java version(1.8)
- Project Facets> change java version(1.8)
- Project Facets> Runtimes Apache Tomcat (add libarary)
3) Connect Tomcat (after connect, check libarary)
-
파일 위치 파악하기
: 자바 소스를 생성 공간
: eclipse로 따지면 WebContent의 공간
: classes ( = eclipse에서 lib )
설치
Dynamic Web Installation
Create Spring mvc project
- new > Spring Legacy Project > Spring MVC Project > package name > finish
- 초기 패키지 생성은 필수, test.my.mvc로 이름을 정할 시, 서버가 시작되면 url의 끝은 /mvc로 시작하게 된다. 따라서 여러 패키지를 만들게 될 시 세번째 이름은 중복되지 않도록 한다.(충돌 오류발생함)
Spring Dependency Injection
: 클래스 객체를 개발자가 코드에서 생성하지 않고 프레임워크가 생성하여 사용하는 방법
의존성 주입(Dependency Injection)
-
coupling: 객체 하나를 변경하니 같이 변경해야 할 코드가 동반된다면, 이 경우 커플링이 높다(결합도가 높다)고 한다.
-
결합도 낮추기
-
인터페이스 활용
- 유사 기능의 메소드, 그러나 다른 코드를 정의 할 인터페이스를 생성하고 그 안에 메소드를 선언
- 인터페이스를 상속한 하위 클래스들을 표준화시키고 메소드를 오버라이딩
- 인터페이스는 여러가지 하위 클래스 타입이 호환 가능해진다.
하나의 인터페이스 타입에 여러가지 하위 객체들 생성이 가능
-
-
주입: 값을 다른 객체로부터 전달받아오는 것을 주입 받는다고 표현한다.
-
해당 클래스가 결정한 객체가 아닌 외부로부터 전달받은 객체를 의미.
-
DAO VO의 예시)
VO1
package emp;
public class EmpVO implements VO{
int id;
String name;
double salary;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
}
VO2
package emp;
public class MemberVO implements VO {
int id;
String name;
String email;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
DAO
package emp;
public class EmpDAO {
void insertEmp(VO vo){
// dtod 받아온 객체를 SQL에 저장할 코드
System.out.println("db등록 완료 했습니다.");
}
}
Main
package emp;
public class EmpMain {
public static void main(String[] args) {
VO vo = new EmpVO();
vo.setId(100);
vo.setName("이사원");
VO vo2 = new MemberVO();
vo2.setId(100);
vo2.setName("이사원");
EmpDAO dao = new EmpDAO();
dao.insertEmp(vo)
dao.insertEmp(vo2);
System.out.println("회원 등록 마쳤습니다. ");
}
}