*
* 동시성 문제가 고려되지않음, 실무에서는 ConcurrentHashMap, AtomicLong 사용 고려
* */
public class MemberRepository {
// static을 사용 했기 때문에,
// MemberRepository가 new 인스턴스를 사용해도 메모리 상 한개만 등록된다.
private static Map<Long, Member> store = new HashMap<>();
private static long sequence = 0L;
// servlet으로 만들기 때문에 Singleton 직접 선언
private static final MemberRepository instance = new MemberRepository();
public static MemberRepository getInstance() {
return instance;
}
// Singleton을 사용하기 위해 private으로 막아준다.
private MemberRepository() {
}
public Member save(Member member) {
member.setId(sequence++);
store.put(member.getId(), member);
return member;
}
public Member findById(Long id) {
return store.get(id);
}
public List<Member> findAll() {
// private static Map<Long, Member> store =
new HashMap<>(); , Member가 values 값임으로 반환
return new ArrayList<>(store.values());
}
public void clearStore() {
store.clear();
}
}
static으로 선언한다는것은 new 인스턴스로 객체를 생성해도static메소드는 메모리에 한 개만 등록됩니다.
( 템플릿 엔진 없이 html 코드를 관리해야 함으로, 유지보수성이 엄청 떨어지게 됩니다. )
html 코드를 자바 코드로 작성해줘야합니다.✔ 입력을 받을수 있는 Form 형식의
html코드
( 추가로 repository를 사용한 save 코드를 작성해줘야 웹 페이지에 보이게 됩니다. )
JSP 사용시 필요한 라이브러리 추가implementation 'org.apache.tomcat.embed:tomcat-embed-jasper'
implementation 'javax.servlet:jstl'
JSP파일은 webapp 폴더에서 생성해야 합니다.JSP파일 생성후<%@ page contentType="text/html;charset=UTF-8" language="java" %>라는 코드가 반드시 존재 해야 합니다.
- 자바코드를 그대로 다 사용할수 있습니다. (
import사용 등)<%%>이 부분에는 자바 코드를 작성할수 있으며,%>밖에 있는html코드들은println으로 그냥 출력됩니다.
JSP의 한계📣 서블릿의 한계
서블릿으로 개발할 경우에 View 화면을 위한 html 을 만드는 코드들이 자바 코드에 뒤섞여 가독성이 떨어지고 복잡했습니다.
📣 JSP 적용 및 JSP의 한계
JSP를 사용하면서 View의 html 코드를 깔끔하게 따로 작업하고, 중간중간 동적으로 변경이 필요한 부분을 자바 코드로 적용 했습니다.
이렇게 해도 문제점이 있습니다. ➡JSP파일에 레포지토리등 다양한 코드가 노출되어있습니다. (너무 많은 책임) (유지 보수성이 좋지 않음)