Lazy Initialization(초기화 지연)?

- 초기화를 바로 하는 것이 아닌 최초 필요한 시점에 초기화가 이루어지고,

이후에는 생성된 객체를 참조하게 되는 것

 

#1. Lazy Initialization은 필드 값을 사용하기 전까지는 계산하는 것을 원치 않고,

실제로 값을 사용하는 시점에서 계산하고자 할 때 유용 

 

#2. 객체 초기화는 첫 요청이 일어나느 시점에 이루어짐

 

#3. 싱글턴 패턴의 유형을 따르므로 멀티스레드 프로그램 작성시에는 동기화에 신경을 써야 한다.

그렇지 않으면 의도치 않은 결과를 가져 올 수 있다.

 

언제 사용하는 것이 좋은가?

- 정의된 필드가 많은 경우 사용되지 않는 상황이나,

초기화를 빨리 수행하고 부가 작업을 뒤로 미루고 싶을 때 적합하다.

 

언제 사용하지 않는 것이 좋은가?

- 최적화를 통해 성능 저하를 해결해야 하는 상황이 아니라면 초기화의 지연을 사용하지 않아야 한다.

  어떤 경우에는 초기화의 지연 기법이 디버깅을 어렵게 할 수 있다.

'Programming > C++ Modern' 카테고리의 다른 글

Precompiled Header  (0) 2019.09.05

Precompiled Header(미리 컴파일된 헤더)?

- Visual Studio에서 새 프로젝트를 만들 때 .pch.h라는 미리 컴파일된 헤더 파일이 프로젝트에 추가 된다.

(2017 버전 이하 버전에서는 파일을 stdafx.h라고 한다)

 

2017이상 버전

 

이 파일의 목적은 빌드 프로세스의 속도를 높이는 것다.

 

C / C++ 언어에서 헤더 파일은 C 전처리기에 의해 자동적으로 소스 코드를 포함하게 된다.

그런데 일부 헤더 파일의 경우 방대한 크기의 소스 코드를 포함 할 수 있고,

이런 코드들을 매번 컴파일하면 컴파일 시간이 매우 길어지게 된다.

그래서 자주 바뀌지 않는 기본적인 라이브러리들의 경우에 컴파일 시간을 줄이고자

컴파일러가 사전에 헤더 파일들을 미리 컴파일 해 놓고 쓸 수 있게 한다.

 

Precompiled Header를 사용할 경우 Precompiled Header로 지정한 헤더 파일 및 소스 코드는

컴파일시에 컴파일 되지 않고 pch의 결과물을 가져다 사용하게 되는 것이다.

 

프로젝트 속성 > C / C++ > 미리 컴파일된 헤더 항목에서 사용 여부를 선택할 수 있다.

빈프로젝트에서는 이것이 사용 안함으로 체크 되어 있는데, 이 경우 매번 전체 헤더파일을 재빌드 하게 되므로

사용 안함으로 체크되어 있다면 아래와 같이 만들기를 선택해서 pch를 만들어 주고

Precompiled Header 사용하기를 선택하면 사용 할 수 있게 된다.

pch는 한 번 미리 빌드를 해 놓고 그 다음부터는 재빌드를 하지 않은 상태로 사용하는 모듈들이 되야 하므로,

pch에는 프로젝트 진행 중에 값이 거의 바뀌지 않는 외부 라이브러리나 전역 변수 등의 내용을 포함시키면 된다.

이렇게 하면 매번 재빌드 하지 않고 컴파일 시간을 많이 줄일 수 있다.

 

주의점

미리 컴파일된 헤더에 포함된 파일이 수정이 일어나면 미리 컴파일된 헤더도 새로 만들게 된다.

이렇게 되면 미리 컴파일된 헤더를 사용하는 의미가 없어지게 된다.

그래서 어떤 헤더 파일을 미리 컴파일 시켜야 해야 할까?...

MSDN을 보면 다음 사항에 미리 컴파일된 헤더 파일 사용을 권장하고 있다.

 

■ 자주 바뀌지 않고 크기가 큰 코드 본문을 항상 사용

 프로그램이 여러개의 모듈로 구성되어 있으며,

모든 모듈이 포함 파일의 표준 집합 및 동일한 컴파일 옵션을 사용

이 경우 모든 포함 파일을 미리 컴파일해서 하나의 미리 컴파일된 헤더로 만들 수 있다.

'Programming > C++ Modern' 카테고리의 다른 글

Lazy Initialization  (0) 2019.09.09

+ Recent posts