주석코드에 의미를 명확하게 담도록 노력하고 주석은 왠만하면 사용을 안하는것이 좋다사용을한다면 좋은 주석을 쓰는것이 좋다나쁜코드에 주석을 달지말고 좋은 코드로 바꿔라안좋은 주석은 없는것보다 훨씬 나쁘다코드만이 정확한 정보를 제공하는 유일한 출처다 좋은 주석 정말 좋은 주석은 주석을 달지 않는것이지만 어쩔수 없이 달아야한다면 다음과 같은 주석을 달길 바란다 법적인 주석저작권, 날짜 등을 알려주는 주석ex) // Copyright (C) 2003,2004,2005 by Object Mentor, Inc. All rights reserved.// GNU General Public License 버전 2 이상을 따르는 조건으로 배포한다. 중요도를 알려주는 주석코드를 볼 사람을 위해 뭐가 중요하다고 알려주는 주석e..
함수는 작게만드는것이 좋다 아래와 같이 너무 긴 코드는 이해하기 힘들다public static String testableHtml(PageData pageData,boolean includeSuiteSetup) throws Exception {WikiPage wikiPage = pageData.getWikiPage();StringBuffer buffer = new StringBuffer();if (pageData.hasAtt ribute("Test")) {if (includeSuiteSetup) {WikiPage suiteSetup =PageCrawlerlmpl.getlnheritedPage(SuiteResponder.SUITE_SETUP_NAME, wikiPage);if (suiteSetup != nu..
의도가 분명하게 이름을 작성하라변수나 함수 그리고 클래스 이름은 다음과 같은 굵직한 질문에 모두 답해야한다. 1. 변수(혹은 함수나 클래스)의 존재 이유는? 2. 수행 기능은? 3. 시용 방법은? 따로 주석이 필요하다면 의도를 분명히 드러내지 못했다는 말이다 public List getThem() {List listl = new ArrayList();for (int[] x : theList)if (x[0] 二二 4)listl.add(x);return listl;} 위 코드는 단순하지만 읽기 어렵다문제는 코드의 단순성이 아니라 코드의 함축성이 훨씬 중요하다 코드 맥락이 코드 자체에 명시적으로 드러나지 않는다 위 코드는 암암리에 독자가 다음과 같은 정보를 안다고 가정한다.1. theList에 무엇이 들었는가..
장인 정신을 익히는법1. 장인의 기술, 방법, 구현 등을 습득하고2. 그것들을 꾸준히 연습하고 반복숙달 해야한다 이책은 꾸준히 열심히 공부해야하는 책 마지막에 나오는 휴리스틱까지 꼼꼼하게 다 공부해야 제대로 공부한것 ------------------ 이 책을 읽고나면 좋은코드와 나쁜코드를 구별할수있게된다.코드는 요구사항을 상세히 작성할수있는 수단?코드가 없다면 추상화도 불가능하며 코드가 사라질수는없다 ----------------- 궁극적으로 코드는 요구사항을 표현하는 언어 ----------------- 나쁜코드를 작성하는것은 바빠서, 귀찮아서 다양한 이유로 작성을 하고나중에 고쳐야지 라고 생각하지만 그 나중은 오지않는다 (르블랑의법칙)나쁜코드는 개발 속도를 크게 떨어뜨린다. --------------..
AbstractAnnotationConfigDispatcherServletInitializer에 디스패처서블릿 추가설정을 위한 메소드들도 존재한다 그중 하나가 customizeRegistration이다 디스패처서블릿이 등록된다음 ServletRegistration 안에 전달하면서 customizeRegistration() 메소드를 호출 customizeRegistration를 오버라이딩 함으로써 디스패처서블릿에 추가설정을 적용한다 MultipartConfigElement를 설정하기위해 customizeRegistration 파라미터로 ServletRegistration.Dynamic이 기초 설정을 다하고 서블릿 3.0이상의 멀티파트를 설정하기위해 setMultipartConfig 메소드의 매개변수로 Mu..
요청이 브라우저를 떠나 디스패처 서블릿에 도착 요청URL을 분석하기위해 핸들러 매핑의 도움을 받는다 핸들러 매핑에 정보를 이용하여 URL과 비교하여 맞는 컨트롤러에게 전달 단일 프론트컨트롤러 : 디스패처 서블릿 Servlet & jsp로 구현할때와는 다르게 스프링MVC 에서는 모든 요청을 디스패처서블릿이 처리한다 디스패처 서블릿 : 요청에맞는 스프링 MVC 컨트롤러에게 전달함 컨트롤러 : 요청을 처리하는 컴포넌트 컨트롤러에 요청이 도착하면 사용자가 요청한 정보를 컨트롤러에게 전달 컨트롤러가 그것을 처리할때까지 기다린다 Model : 컨트롤러가 요청을 처리한후 사용자가 읽을수있는 정보로 변환 컨트롤러가 처리한 정보를 Model로 만든후 전달한다 하지만 Model 자체를 넘기는건 좋지않다 HTML 같은 사용..
모든 서블릿은 javax.servlet.servlet의 인터페이스를 구현한다 javax.servlet.servlet 안에는 5개의메소드가 있는데 getServletlnfo, getServletConfig 그중 init, service, destroy는 생명주기와 연관있다 init 은 최초요청이 들어와서 서블릿 클래스를 인스턴스화하고 init을 실행한다 init은 요청이 들어오기전에 성공적으로 끝내야한다 init안의 내용은 초기값 관련내용으로 채워지며 오직1번만 실행되는것만 작성할수있다. 보통은 init안을 비워둔다 service request객체와 response객체를 받고 그것들을 가지고 일을 처리한다 destroy 톰켓이 종료되었거나 메모리정리가 필요한시점 service에서 모든 스레드가 빠져나간뒤 ..