"IoC가 뭘까?" "DI는 뭐지?" "AOP는?"
질문에 대답을 하지 못했다면 아직 Spring을 할 준비가 안 되었다고 할 수 있다
답변을 하기 전에 데이터에 대해 먼저 말하고자 한다.
데이터를 저장하는 방법에는 어떤 것들이 있을까? 세가지 방법이 있다 !!
프로그램 실행 도중 사용자가 직접 입력해주는 경우 예) in.readLine을 통해
즉, 클래스가 유지되는 동안(메모리할당이 된) 메모리 소멸 전까지 메모리에 데이터가 저장된다.
당연히 메모리 소멸되면 데이터도 소멸된다!!
유지를 하기 위해서 어떤 방법을 써야할까? file과 DB가 있다IO를 이용해 file에 저장
text를 통해 저장해서 간단하다 하지만 복잡하고 체계적인 경우엔 이용하기가 쉽지 않다
입력은 쉬운데 조회가 어렵다DB에 저장
복잡체계적인 경우, 조회를 쉽게 하기 위해 사용한다
데이터베이스에는 데이터를 2차원 형태로 저장한다
DAO는 뭘까요?
Data Access Object로써 DB에 접근하는 유형을 전담하는 클래스이다!!
테이블을 만들면 CRUD를 해야하는데 이 때 DAO가 필요하다
VO는 뭘까요?
Value Object 전달데이터!!
Bean이라고도 불리고 DTO(Data Transfer Object)라고도 불린다
컬럼명을 묶어주는 용도 예) 회원가입 할 때 입력한 데이터를 묶어서 전달할 때 사용
IoC (Inversion of Control) 제어의 역행이라는 뜻인데 의미만 가지고 보면 무엇을 얘기하는지 파악하기가 어렵다
예시를 통해 살펴보자
A obj = new A(); 가 있다고 했을 때 클래스 안에서 만드는게 아니라 밖에서 만든다는 것이다 !!
이 때 프레임워크야 도와줘를 외치면 된다
프레임워크 왜 해? 객체지향할려고 !!
객체지향 왜 해? 유지보수 뿐만 아니라 같은 데이터를 다른 형태로 보여줄 수 있으니까!!
void method(){ //내부에서 해줄 때
A a = new A();
a.hello();
}
SpringFramework(Bean 관리)
<bean class="A" id="a">
준비상태에 있다 A클래스의 속성과 변수를 사용할 수 있다
new A()를 안해도 된다!! 밖에서 제어된다!!! 그래서 이게 IoC
method안의 a와 bean의 a는 다르다
void method(){ //외부에서 해줄 때
A a = ctx.getBean("a");
A a = new B(); (X)
---> 에러발생(A와 B클래스는 서로 관련없는 클래스)
a.hello();
}
bean의 클래스를 C로 바꾼다면 실행될까? 안된다 부모자식 관계도 아닌데
그래서 인터페이스가 등장한다!!!!! 조립이 가능해진다!!
※ 형제는 xml과 html에나 있다
예) Common인터페이스 ---구현클래스---> A, B, C
SpringFramework(Bean 관리)
<bean class="A" id="a">
<bean class="B" id="a">
void method(){
Common a = ctx.getBean("a");
Common a = new B(); (O)
---> 정상적실행(부모=자식;)
a.hello();
}
첫 번째 실행하면 위에
두 번째 실행하면 밑에가 실행된다는 걸 보여주기 위함
원래는
void method(){
Common a = ctx.getBean("a");
a.hello();
}
------------------------------------------------
DI(Dependency Injection) 생성된 객체를 생성자, set을 통해 전달하는 것 IoC 구현하는 것!!
void method(Common com){
//Common com = new A(); <bean class="A" id="a">
//Common com = new B(); <bean class="B" id="a">
주사 놓자~!! 어디가 주사기고 어디가 맞을 곳인가??
주사 맞는 곳!!! 주사기!!!
}
------------------------------------------------
AOP(Aspect Oriented Programming)공통적인 관심사항의 코드를 따로 분리!!
관심사항 ? 여기선 시간측정!!
void insert(Bean b){
DB입력!!
시간측정
}
void select(){
DB조회!!
시간측정
}
===> 시간측정이 '공통관심사항'이므로 코드 따로 분리!!
void timeCheck(){
시간측정
}
void insert(Bean b){
DB입력!!
}
void select(){
DB조회!!
}
===> insert 실행시 insert()+timeCheck()를 실행할 수 있음!!
'Spring' 카테고리의 다른 글
"Spring URL 요청에 Model 없이 JSP 전달이 가능한가??" (0) | 2018.08.23 |
---|---|
"아무것도 입력해주지 않았는데 서버를 실행하면 Hello World가 출력된다???" (0) | 2018.08.23 |
Spring 시작 전 개념익히기2<해설> (0) | 2018.08.23 |
Spring 시작 전 개념익히기2<문제>------- (0) | 2018.08.23 |
"Spring 설치의 모든 것" (0) | 2018.08.22 |