본문 바로가기

분류 전체보기

(229)
대입 연산자 '=' 에 대하여 회사에서 일을 하다가 참으로 어이없고 초보적인 실수를 하였는데, var myHiddenValue = $("input[name='myHidden']").val(); ...(myHiddenValue으로 지지고 볶는중...) 위와 같이 작성해고 테스트를 했는데 name이 myHidden인 value가 변하지 않더라는거에요! 어 왜안되지..한참 고민을하다 맨위에 선언해놓은 var myHiddenValue = $("input[name='myHidden']").val(); 문장을 다시 보게 되었는데 이는 동일하다는 의미가 아니라 대입을 의미한다는 사실을 문득, 새삼스럽게 다시 깨닫게 되었다. 그러니 암만 myHiddenValue를 지지고 볶아도 실제 name이 myHidden인 value의 값이 변할리가 있나.....
톰캣과 스프링, 그리고 ContextLoaderListener 나는 궁금했다. 톰캣은 언제 해당 프로젝트가 스프링인걸 알아차릴까? 오랫동안 고민한 결과 내 나름대로 분석한 내용을 오늘에서야 정리하려한다. 먼저, 리스너(Listener)라는 개념을 알아야하는데 말그대로 무언가를 듣는 것이다. 그리고 그 무엇인가를 자바에서는 '이벤트'라고 한다. java.util 패키지에 EventListener 인터페이스가 있는데 이를 모든 Listener객체가 상속하거나 구현한다. 예시로 awt패키지에 MouseListener라던가, 톰캣 내장 패키지의 'JreMemoryLeakPreventionListener'가 있다. 그리고 스프링없이(뻥이다. 있어도 마찬가지로) 톰캣을 돌릴 때에는 톰캣 구동시 ServletContext가 생성이 되는데, 자세한 얘기는 https://java1..
[자바] Proxy 패턴 package proxy; public interface Printable { public void setPrinterName(String name); public String getPrintName(); public void print(String str); } package proxy; public class Printer implements Printable { private String name; public Printer() { heavyJob("Printer의 인스턴스 생성 중"); } public Printer(String name) { this.name = name; heavyJob("Printer의 인스턴스(" + name + ") 생성 중"); } @Override public void..
[자바] Abstract Factory 패턴 추상적인 공장에서 추상적인 부품을 조합해 추상적인 제품을 만든다라.. 바로 예제부터 살펴보자. 예제는 계층구조를 가진 Link 페이지를 HTML 파일로 만들기 이다. 추상 부품 package abstractfactory.factory; /** * Link와 Tray의 상위 클래스 * @author dev-jones * */ public abstract class Item { protected String caption; public Item(String caption) { this.caption = caption; } public abstract String makeHTML(); } package abstractfactory.factory; /** * HTML의 하이퍼링크를 추상적으로 표현한 클래스 * ..
[자바] bridge 패턴 bridge. 다리라는 뜻이다. 둘 사이의 이어진 무언가란 뜻인데, 이 둘의 컨셉을 이해하는게 중요하다. 그게 뭐냐면 1. 기능의 클래스 계층 2. 구현의 클래스 계층 어떤 클래스가 있을 때, 이 클래스에 새로운 기능(메소드)을 추가하고 싶을 때 우리는 이 클래스를 상속하는 하위 클래스를 작성할 수 있다. 이때 부모자식간의 계층이 생겼는데 * 상위 클래스는 기본적인 기능을 가지고 있다. * 하위 클래스에서 새로운 기능을 추가한다. 와 같은 특징을 가지고 있다. 이와 같은 클래스 계층을 '기능의 클래스 계층'이라고 한다. 또 다른 새로운 기능을 추가하려면 자식의 자식, 하위클래스를 하나도 더 생성함으로써 계층이 더욱 깊어졌다할수 있다. 템플릿 메소드 패턴처럼 어떤 인터페이스와 그것을 구현한 구현클래스의 관..
[자바] composite 패턴 디렉토리(directory) 통산 윈도우에서는 폴더라고 부르는 이것은 '상자 안의 상자', 즉 디렉토리 안에 디렉토리나 파일을 가지고 있는 재귀적인 형태의 구조를 띄고 있다. 디렉토리 안에 넣을 수 있는 것, 디렉토리와 파일을 아울러 '디렉토리 엔트리(directory entry)'라고 한다. 디렉토리 안의 내용을 조사한다할때, 그것이 하위디렉토리인지, 파일인지 모르지만 통상 디렉토리 엔트리를 조사한다고 말할 수 있다. 이는 마치 그릇과 내용물의 같은 취급으로 표현할 수 있다. 마치 그릇 안에 내용물을 넣을 수 있고 더 작은 그릇을 넣을 수 있듯이... 이와 같이 그릇과 내용물을 동일시 해서 재귀적인 구조를 만들기 위한 디자인패턴을 "composite 패턴"이라고 한다. 그럼이제 파일과 디렉토리를 도식적..
[자바] Observer 패턴 '관찰자' 관찰하는 객체를 'Observer' 인터페이스를 구현하도록 하고, 관찰하려는 객체는 'Observable'을 상속한다. 다음예제는 난수를 만들고 이를 'Observer'가 관찰하고, 그 수를 출력하도록 한다. package observer; public interface Observer { public void update(NumberGenerator generator); } package observer; import java.util.ArrayList; import java.util.Iterator; public abstract class NumberGenerator { private ArrayList observers = new ArrayList(); public void addObser..
[자바] 싱글톤이 보장받지 않는 상황 package com.devjones.web.singleton; public class Singleton { private static Singleton instance = null; private Singleton() {}; public static Singleton getInstance() { if(instance == null) { instance = new Singleton(); } return instance; } } 위와 같은 싱글톤 객체가 있을 때 다음과 같은 코드로 싱글톤이 멀티쓰레드 환경에서 단일객체를 보장받을수 없음을 보일 수 있다. package com.devjones.web.singleton; public class Main extends Thread { public static v..
[자바] builder 패턴 package builder; public abstract class Builder { public abstract void makeTitle(String title); public abstract void makeString(String str); public abstract void makeItems(String[] items); public abstract void close(); } package builder; public class Director { private Builder builder; public Director(Builder builder) { this.builder = builder; } public void construct() { builder.makeTitle("Greeti..
[자바] 장식자 패턴 package decorator; /** * 복수 행으로 구성되는 문자열을 표시하기 위한 추상 클래스. * @author dev-jones * */ public abstract class Display { /** * 각각 가로의 문자수와 세로의 문자수를 얻기 위한 메소드 */ public abstract int getColumns(); public abstract int getRows(); /** * 입력받은 row의 문자열을 리턴 * @param row * @return */ public abstract String getRowText(int row); public final void show() { for(int i = 0; i < getRows(); i++) { System.out.println(g..