336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
MacroDescription

$(RemoteMachine)

Set to the value of the Remote Machine property on the Debug property page. SeeChanging Project Settings for a C/C++ Debug Configuration for more information.

$(References)

A semicolon delimited list of references added to the project.

$(ConfigurationName)

The name of the current project configuration (for example, "Debug").

$(PlatformName)

The name of current project platform (for example, "Win32").

$(Inherit)

Specifies the order in which inherited properties appear in the command line composed by the project build system. By default, inherited properties appear at the end of the current property.1

$(NoInherit)

Causes any properties that would otherwise be inherited, to not be inherited. To also prevent evaluation at the sibling level, use $(StopEvaluating). The use of$(NoInherit) causes any occurrences of $(Inherit) to be ignored for the same property.1

$(StopEvaluating)

Immediately stops the evaluation of a macro in the evaluation chain. Any values that appear after $(StopEvaluating) will not appear in the evaluated value of the macro. If$(StopEvaluating) precedes $(Inherit), the inherited value at the current location in the evaluation chain will not be concatenated to the macro value. $(StopEvaluating)is a superset of the functionality of $(NoInherit).

$(ParentName)

Name of the item containing this project item. This will be the parent folder name, or project name.

$(RootNameSpace)

The namespace, if any, containing the application.

$(IntDir)

Path to the directory specified for intermediate files relative to the project directory. This resolves to the value for the Intermediate Directory property.

$(OutDir)

Path to the output file directory, relative to the project directory. This resolves to the value for the Output Directory property.

$(DevEnvDir)

The installation directory of Visual Studio .NET (defined as drive + path); includes the trailing backslash '\'.

$(InputDir)

The directory of the input file (defined as drive + path); includes the trailing backslash '\'. If the project is the input, then this macro is equivalent to $(ProjectDir).

$(InputPath)

The absolute path name of the input file (defined as drive + path + base name + file extension). If the project is the input, then this macro is equivalent to $(ProjectPath).

$(InputName)

The base name of the input file. If the project is the input, then this macro is equivalent to $(ProjectName).

$(InputFileName)

The file name of the input file (defined as base name + file extension). If the project is the input, then this macro is equivalent to $(ProjectFileName).

$(InputExt)

The file extension of the input file. It includes the '.' before the file extension. If the project is the input, then this macro is equivalent to $(ProjectExt).

$(ProjectDir)

The directory of the project (defined as drive + path); includes the trailing backslash '\'.

$(ProjectPath)

The absolute path name of the project (defined as drive + path + base name + file extension).

$(ProjectName)

The base name of the project.

$(ProjectFileName)

The file name of the project (defined as base name + file extension).

$(ProjectExt)

The file extension of the project. It includes the '.' before the file extension.

$(SolutionDir)

The directory of the solution (defined as drive + path); includes the trailing backslash '\'.

$(SolutionPath)

The absolute path name of the solution (defined as drive + path + base name + file extension).

$(SolutionName)

The base name of the solution.

$(SolutionFileName)

The file name of the solution (defined as base name + file extension).

$(SolutionExt)

The file extension of the solution. It includes the '.' before the file extension.

$(TargetDir)

The directory of the primary output file for the build (defined as drive + path); includes the trailing backslash '\'.

$(TargetPath)

The absolute path name of the primary output file for the build (defined as drive + path + base name + file extension).

$(TargetName)

The base name of the primary output file for the build.

$(TargetFileName)

The file name of the primary output file for the build (defined as base name + file extension).

$(TargetExt)

The file extension of the primary output file for the build. It includes the '.' before the file extension.

$(VSInstallDir)

The directory into which you installed Visual Studio .NET.

$(VCInstallDir)

The directory into which you installed Visual C++ .NET.

$(FrameworkDir)

The directory into which the .NET Framework was installed.

$(FrameworkVersion)

The version of the .NET Framework used by Visual Studio. Combined with $(FrameworkDir), the full path to the version of the .NET Framework use by Visual Studio.

$(FrameworkSDKDir)

The directory into which you installed the .NET Framework SDK. The .NET Framework SDK could have been installed as part of Visual Studio .NET or separately.

$(WebDeployPath)

The relative path from the web deployment root to where the project outputs belong. Returns the same value as RelativePath.

$(WebDeployRoot)

The absolute path to the location of <localhost>. For example, c:\inetpub\wwwroot.

$(SafeParentName)

The name of the immediate parent in valid name format. For example, a form is the parent of a .resx file.

$(SafeInputName)

The name of the file as a valid class name, minus file extension.

$(SafeRootNamespace)

The namespace name in which the project wizards will add code. This namespace name will only contain characters that would be permitted in a valid C++ identifier.

$(FxCopDir)

The path to the fxcop.cmd file. The fxcop.cmd file is not installed with all Visual C++ editions.


출처 : https://msdn.microsoft.com/en-us/library/c02as0cs(v=vs.80).aspx

Posted by 역시인생한방
,

Singleton Pattern

Programming/Etc 2015. 11. 2. 17:01
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

5. 싱글턴 패턴

  • 싱글턴패턴은 인스턴스가 하나 뿐인 특별한 객체를 만들 수 있게 해주는 패턴이다.
  • 어떤 용도로 쓰는 건가?
    • 스레드 풀이라던가, 캐시, 대화상자, 사용자설정, 디바이스드라이버 등등 객체가 전체프로그램에서 오직 하나만 생성되어야 하는 경우에 사용한다.
  • 그럼 전역변수로 static 으로 선언해서 사용하면 되지 않느냐?
    전역 변수로 객체를 생성하면 어플리케이션이 실행 될 때 객체가 생성될 것이다.(P208 맨밑줄)
    그 객체가 자원을 많이 차지 한다면 사용도 되기전에, 괜히 자원만 차지한다. 사용하지 않는다면 아무 쓸 데 없는 객체가 되겠지.

고전적인 싱글턴 패턴 구현법

  • 조심하세요.. 이 코드에 문제가 있다는 것을 알게 될 것입니다.
public class Singleton {
  
  //private으로 Sinleton클래스의 유일한 인스턴스를 저장하기 위한 정적 변수를 선언
  private static Singleton uniqueInstance;

  //생성자를 private로 선언했기 때문에 Singleton에서만 클래스를 만들 수 있다.
  private Singleton() {}

  //클래스의 인스턴스를 만들어서 리턴해 준다.
  public static Singleton getInstance() {
    if(uniqueInstance == null) {
      uniqueInstance = new Singleton();
    }
    return uniqueInstance;
  }

}

싱글턴 패턴의 정의

  • 싱글턴 패턴은 해당 클래스의 인스턴스가 하나만 만들어진다,
  • 어디서든지 그 인스턴스에 접근할 수 있도록 한다.
  • 클래스에서 자신의 단 하나뿐인 인스턴스를 관리하도록 만들면 된다.

멀티스레딩 문제 해결 방법

  • getInstance()를 동기화시키기만 하면 멀티스레딩과 관련된 문제가 간단하게 해결된다.
public class Singleton {
  private static Singleton uniqueInstance;
  // 기타 인스턴스 변수
  private Singleton() {}
  
  //synchronized 키워드만 추가하면 두 스레드가 이 메소드를 동시에 실행시키는 일은 일어나지 않게 된다.
  public static synchronized Singleton getInstance() {
    if (uniqueInstance == null) {
       uniqueInstance = new Singleton();
    }
    return uniqueInstance;
  }
// 기타 메소드
}
  • 이렇게 하면 문제가 해결되긴 하겠지만, 동기화를하면 속도 문제가 생기지 않나?
    동기화는 불필요한 오버헤드만 증가시킬 수 있다.

더 효율적인 방법은 없을까요?

1. getInstance()의 속도가 그리 중요하지 않다면 그냥 내비 둔다.

  • 메소드를 동기화하면 성능이 100배 정도 저하된다는 것은 기억해 두자
  • 만약 getInstance( )가 애플리케이션에서 병목으로 작용한다면 다른 방법을 생각해봐야 한다.

2. 인스턴스를 필요할 때 생성하지 말고, 처음부터 만들어 버린다.

public class Singleton {
  private static Singleton uniqueInstance = new Singleton();

  private Singleton() {}

  public static Singleton getInstance() {
    return uniqueInstance;
  }
}
  • 이런 접근법을 사용하면 클래스가 로딩될 때 JVM에서 Singleton의 유일한 인스턴스를 생성해 준다.

3. DCL(Double-Checking Locking)을 써서 getInstance()에서 동기화되는 부분을 줄인다.

  • DCL(Double-Checking Locking)을 사용하면, 일단 인스턴스가 생성되어 있는지 확인한 다음, 생성되어 있지 않았을 때만 동기화를 할 수 있다.
  • volatile 키워드를 사용하여 멀티스레딩을 쓰더라도 uniqueInstance 변수가 Singleton 인스턴스로 초기화 되는 과정이 올바르게 할 수 있다.
  • DCL은 자바 1.4 이전 버전에서는 쓸 수 없다
public class Singleton {
  private volatile static Singleton uniqueInstance;

  private Singleton() {}

  public static Singleton getInstance() {
    if (uniqueInstance == null) {
      //이렇게 하면 처음에만 동기화 된다
      synchronized (Singleton.class) {
        if (uniqueInstance == null) {
          uniqueInstance = new Singleton();
        }
      }
    }
    return uniqueInstance;
  }
}

핵심 정리

  • 어떤 클래스에 싱글턴 패턴을 적용하면 애플리케이션에 그 클래스의 인스턴스가 최대 한 개 까지만 있도록 할 수 있다.
  • 싱글턴 패턴을 이용하면 유일한 인스턴스를 어디서든지 접근할 수 있도록 할 수 있다.
  • 자바에서 싱글턴 패턴을 구현 할 때는 private 생성자와 정적 메소드, 정적 변수를 사용 한다.
  • 다중 스레드를 사용하는 애플리케이션에서는 속도와 자원 문제를 파악해보고 적절한 구현법을 사용해야 한다.
  • DCL을 사용하는 방법은 자바2 버전 5(자바 1.5)보다 전에 나온 버전에서는 쓸 수 없다는 점에 주의.
  • 클래스 로더가 여러 개 있으면 싱글턴이 제대로 작동하지 않고, 여러 개의 인스턴스가 생길 수 있다.


출처 : http://wiki.gurubee.net/pages/viewpage.action?pageId=1507403

Posted by 역시인생한방
,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

 확률을 계산하려면 경우의 수를 헤아려야 한다고 했습니다. 전체의 갯수 n개에서 일부의 r개를 

뽑을 때, 뽑는 순서를 고려해야 하는 지와 고려하지 않아도 되는 지를 구별하는 것은 중요합니다. 

(같은 의미로 r개를 뽑는 것과 r개를 뽑아 일렬로 나열하는 것으로 말하기도 합니다.) 그래서,  

이 둘을 순열과 조합으로 구별합니다. 

 예를 들어, A와B의 2개가 선택되는 경우, 순열에서는 A,B와 B,A가 다르지만,  

 조합에서는 A,B와 B,A가 동일한 경우입니다.    

1. 순열(Permutation) 

  서로다른 n개에서 r(r은 n보다 작거나 같습니다.)개를 택하여 일렬로 나열하는 것으로써, 

 n개에서 r개를 택하는 순열이라고 말합니다. 기호로는  

  

 과 같이 나타내고, 이 계산은 

 

즉, n에서 시작하여 1씩 작아지는 수를 차례로 r개 곱한 것입니다. 

    이것은 n개에서 r개를 선택하는 것을 하나씩, 하나씩 선택해 나갈 때,  

맨처음에는 n개에서 한 개를 선택하고 난 후, (n-1)개 남으므로  

그 다음에는 (n-1)개에서 1개를 선택하는 식으로 r번을 반복하는 것과 같습니다. 

 

  순열이 적용되는 예는 일렬로 세우는 경우, 문자열의 나열, 숫자를 선택하여 자연수를 만드는 것 등이 

이에 해당됩니다.  

 

2. 순열의 계산 

     

 

3. 조합(Combination)

    서로다른 n개에서 순서를 생각하지 않고 r(r은 n보다 작거나 같습니다.)개를 택하는 것으로써,

n개에서 r개를 택하는 조합이라고 말합니다. 기호로는 

 

과 같이 나타내고, 이 계산은 

   

  이 식을 보면, 순서를 고려한 순열의 계산값을 중복되는 정도만큼 나누어 주는 것입니다. 예를들어, 

2개를 선택하는 경우 AB, BA가 동일한 것으로써 2로 나누어야 함을 말하는 것이고, 

3개를 선택하는 경우 6가지(ABC,ACB,BAC,BCA,CAB,CBA)가 동일하므로 3!(=6)로 나누어 주는 것입니다. 

4개를 선택하는 경우에는 4!만큼의 동일한 경우가 생기겠지요.  

 

4. 조합의 계산 

   


출처 : http://blog.naver.com/jklee517/150176219823

Posted by 역시인생한방
,