목록분류 전체보기 (50)
손영배 블로그 누구나 쉽게 이해하고 습득하기
https://madplay.github.io/post/why-constructor-injection-is-better-than-field-injection
NullPointerException 대한 처리를 (번거롭지 않게) 단순히 처리할 수 있도록 자바 8에서 Optional 클래스가 만들어졌다. Optional 클래스의 기본적인 사용 방법 - Optional 클래스는 java.util 패키로 묶여 있으며, 다음과 같이 정의되어 있다. Optional 인스턴스의 생성 방법 - of, ofNullable 두 가지를 이용해서 Optional os1 = Optional.of(new String("Toy1")); Optional os2 = Optional.ofNullable(new String("Toy2")); of,..
int [] cols = new int[N+1]; return type queens(int level){ if(non-promissing(level)) report failure and return; else if(level == N) report answer and return; else visit children recursively; } 현재 내가 도착한 노드한 꽝이라면(non-promissing())이면 - 실패 내가 도착한 노드가 최종적 답이라면 - 성공 다음 level에 내가 갈 수 있는 노드들을 가보자 int [] cols = new int[N+1]; boolean queens(int level) { if(!promising(level) return false; else if (level =..
@Controller와 @RestController의 차이 HTTP @Response Body가 생성되는 방식의 차이 기존의 MVC @Controller는 View를 반환하지만, @RestController는 객체를 반환할때 객체 데이터는 Json/XML 타입의 HTTP응답을 직접 리턴하게 된다. @Controller + @ResponseBody를 선언해서 객체를 리턴하는 방법도 있다. 실행흐름 순서 @Controller의 실행 흐름 Client -> Request -> Dispacher Servlet ->Handler Mapping -> Controller -> View -> Dispatcher Servlet -> Response -> Client @Controller + @ResponseBody Cl..
H2DB H2DB는 자바 기반의 오픈소스 관계형 데이터베이스 관리 시스템(RDBMS)이다. Server mode Embedded mode 두 가지의 in-memory DB 기능 지원한다. *in-memory 데이터 스토리의 메인 메모리에 설치되어 운영되는 방식 브라우저 기반의 콘솔모드를 이용할 수 있고, 별도의 설치과정이 없이 용량도 2MB이하로 매우 저용량이다. 가볍기 때문에 빠르고, JDBC API또한 지원하고 있다. SQL 문법도 다른 DBMS들과 마찬가지로 SQL 지원 가능. 위와 같은 장점들 때문에 어플리케이션 개발 단계의 테스트DB로서 많이 이용된다. 자바 기반의 DBMS이므로 자바가 설치되어 있어야 한다. Spring Boot가 지원하는 인-메모리 데이터베이스 H2 HSQL Derby 더보기..
HTML과 data를 섞어서 html 화면에 변화를 주는 것. 1. HTML Templating 작업이란? 반복적인 HTML 부분을 template로 만들어두고, 서버에서 온 데이터(주로JSON)을 결합해서, 화면에 추가하는 작업이라고 할 수 있습니다. 랜더링이 서버에서 할까? 클라이언트에서 할까?는 고민사항이다. 문자열을 replace 해서 변환하는 작업을 해보자 var data = { title : "hello", content : "lorem dkfief", price : 2000 }; var html = "{title}{content}{price}"; var result = html.replace("{title}", data.title) .replace("{content}", data.conten..
var log = document.querySelector(".log"); var lists = document.querySelectorAll("ul > li"); for(var i = 0, len =lists.length; i < len; i++){ lists[i].addEventListener("click", function(evt){ log.innerHTML = "clicked" + evt.currentTarget.firstElementChild.src; }); } 문제 : 만약에 리스트가 몇개가 더 추가된다면 그 만큼 또 추가된 element들에게 addEventListener를 해줘야 하기 때문에 불편하다. 그래서 그래서 ul의 target에 다가 addEvnentLlist를 걸 수 있다. va..