DI, IoC
공부하며 느낀 점
참조한 페이지
아무리해도 main.html 이외의 페이지로 갈 수 가 없다.
메인 페이지에 들어갈때마다 브라우저의 콘솔창에 오류가 뜬다
Failed to load resource: the server responded with a status of 404 (Not Found)
// app.js
app.get('/signup.html', (req, res) => {
res.render('signup.html', {});
});
위와같이 app.js에 경로마다 페이지를 추가해야하는듯하다...
다행히 js의 경우에는 아래와같이 html안에 넣으면 된다.
// template/main.html
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>회원관련 페이지</title>
</head>
<body>
<h1>회원 정보 페이지</h1>
<button onclick="goToSignUp()">회원가입</button>
<p>로그인</p>
<p>회원탈퇴</p>
<script src='../template/js/main.js'></script>
</body>
</html>
// template/js/main.js
function goToSignUp() {
location.href = 'http://localhost:8080/signup.html';
}
페이지마다 라우팅 핸들러를 추가할 수 는 없는 노릇이니 작은 페이지들은 모달로 구현을 해야겠다.
우선 IOC를 알아야한다.
프레임 워크와 라이브러리의 차이이다. 라이브러리는 내가 라이브러리의 코드를 사용하지만, 프레임 워크는 반대다. 프레임 워크가 나의 코드를 사용한다. 즉, 제어권이 프레임 워크에게 가있는 것이다.
스프링의 의존성 객체 메소드 호출도 마찬가지이다.
기존 : 객체생성 → 클래스 내부에서 의존성 객체 생성 → 의존성 객체 메소드 호출
스프링 : 객체 생성 → 제어권을 스프링에게 위임 → 스프링이 만들어둔 객체를 주입한다. → 의존성 객체 메소드 호출
DIP Dependency Inversion Principle
의존관계 역전법칙 : 높은 단계의 모듈이 낮은 단계의 모듈에 의존하지 않아야하며, 양쪽다 추상화에 의존해야한다.
추상화는 세부사항에 의존해서는 안되고, 세부사항은 추상화에 의존해야한다.
DI Dependency Injection
의존성 주입 : 필요한 오브젝트를 외부에서 주입받는 것이다.
생성자 Constructor, 세터 Setter, 인터페이스 Inferface 주입의 세가지 방식이 있다.
IOC를 구현하기 위해서 DIP를 사용하고, DIP를 구현하기 위해서 DI를 사용한다.
라이브러리랑 프레임 워크의 차이를 제대로 알지 못했는데 생각지도 못한데서 알게 되었다.
내가 만든 코드의 주도권은 당연히 내 코드 자체에 있을것이라고 생각했는데 역전하게되는 경우가 있다는 것도 신기했다.