레이블이 프로그래밍인 게시물을 표시합니다. 모든 게시물 표시
레이블이 프로그래밍인 게시물을 표시합니다. 모든 게시물 표시

2012. 9. 19.

Singleton Pattren (싱글톤 패턴) - 디자인패턴

싱글톤 패턴

- 따로 이름도 모르고 사용해 왔던 녀석이 싱글톤패턴이구나...
  추가로 멀티 스레딩시의 문제점을 해결한 부분까지 추가.


public class SingletonPattren {
  /*
  * 클래스를 전역변수에 사용하게되면, 프로그램 실행 시 클래스를 로드하게됨.
  * 클래스의 크기가 클 경우  사용하지 않을 때에도 메모리를 소비함. gc도 될 수 없음.
  *
  *
  * Multi-threading에서 발생하는 문제 해결방법
  * 1.getInstance를 동기화시킴
  *   => 호출시마다 오버헤드 발생
  * 2.무조건 해당 클래스가 생긴다면 정적 초기화(선언부)시 생성
  * 3. DCL(Double-checking locking) 사용 - volatile with class synchronize
  *   => 처음 instance를 생성할 때에만 동기화를 하므로써
  *      getInstance()시 발생하는 오버헤드를 줄일 수 있음
  *
  * - 주의사항
  *  클래스 로더를 두개 이상 사용할 경우는 인스턴스가 여러개 생길 수 있음
  *    => 클래스 로더를 수동으로 지정하여 해결가능
  *  java 1.5 이후부터 제대로 동작(이전 컴파일러는 DCL을 정상적으로 체크하지 못함
  *    => 1.5 이하 버전이라면 2번의 방법을 사용하여 해결가능
  *  java 1.2이전 버전에서는 전역 reference가 없으면 메모리를 해제하는 문제가 있었음
  *    => 싱글턴 레지스트리 사용
  * 
  */

  private volatile static SingletonPattren m_oInstance;

  private SingletonPattren(){
  }

  public static SingletonPattren getInstance(){
    //Lazy instantiation - 게으른 인스턴스 생성
    if (m_oInstance == null)
    {
      synchronized (SingletonPattren.class) {
        //null check 필요
        if (m_oInstance == null)
          m_oInstance = new SingletonPattren();
      }
    }

    return m_oInstance;
  }
}


참고자료 : Head first design pattren - singleton pattren

2011. 4. 4.

[Java]C에서의 Define 대용 in Java

Define 사용법 in java

- Precompiler 사용방법
=> 개인이 만든 PreCompiler임. //#ifdef 형식으로 사용가능
http://titan515.egloos.com/23230

- Ant script and Eclipse plug-in을 사용한 자동화
http://boldinventions.com/index.php?option=com_content&view=article&id=81:javapreprocessorusingeclipse&catid=34:category-electronics-articles&Itemid=53

- VC++ Compiler를 사용한 c style define 사용
http://blog.naver.com/oselo79?Redirect=Log&logNo=120015648901

- ANT script를 사용한 주석 define
http://weblogs.java.net/blog/schaefa/archive/2005/01/how_to_do_condi_1.html

- Interface 를 사용한 호출방법(like reflection)
http://ini-s.blogspot.com/2011/04/javainterface-reflection.html

[Java]Interface를 사용한 reflection 흉내내기

원본(Src) : http://stackoverflow.com/questions/1943021/equivalent-of-define-in-java


Depending on what you are doing (not quite enough information) you could do something like this:


interface Foo
{
void foo();
}

class FakeFoo
implements Foo
{
public void foo()
{
// do nothing
}
}

class RealFoo
{
public void foo()
{
// do something
}
}


and then provide a class to abstract the instantiation:


class FooFactory
{
public static Foo makeFoo()
{
final String name;
final FooClass fooClass;
final Foo foo;

name = System.getProperty("foo.class");
fooClass = Class.forName(name);
foo = (Foo)fooClass.newInstance();

return (foo);
}
}


Then run java with -Dfoo.name=RealFoo|FakeFoo

Ignored the exception handling in the makeFoo method and you can do it other ways... but the idea is the same.

That way you compile both versions of the Foo subclasses and let the developer choose at runtime which they wish to use.

2010. 8. 11.

VS2005 최적화 팁 모음

1. SP1 설치 이후 Intellisence 늦는 문제 관련한 FIX
{{{
(1) 링크 : http://code.msdn.microsoft.com/KB943969/Release/ProjectReleases.aspx?ReleaseId=750
(2) 링크 : http://code.msdn.microsoft.com/KB947315/Release/ProjectReleases.aspx?ReleaseId=872

1번 설치 후 VS가 얼어버리는 경우 2번 설치
}}}


2. SP1에서 빌드가 느려지는 문제 해결 FIX
{{{
(1) http://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=11587
}}}

[다자녀할인] 2자녀 이상 모든 공항 주차장 50% 할인받기 (둘 중 한명은 15세 이하)

다자녀 기준이 2명으로 완화되면서 자녀가 2명만 되어도 공영주차장 50%(지역에 따라 30%인 곳 도 있음) 할인이 가능하고, 전국의 공항주차장도 50% 할인이 가능하다. "다둥이카드" 나 "경기 I Plus 카드"...