PreparedStatement helps optimize repeated query execution.
Instead of declaring the entire SQL string such as SELECT * FROM CITY WHERE COUNTRY = 'KOREA' AND POPULATION > 10000,
it separates the static SQL structure SELECT * FROM CITY WHERE COUNTRY = ? AND POPULATION > ? from the dynamic parameters.
By doing this, it makes it possible to reason about code execution in a multithreaded environment, even in the face of optimizations performed by the dynamic compiler, the processor(s), and the caches.
최적화 기법은 컴파일 타임의 reordering이 될수도 있고, 변수의 저장 공간에 CPU cache가 쓰일수도 있음.. Effective Java에서는 전자만을 오히려 이야기. 'OpenJDK 서버 VM이 실제로 적용하는 끌어올리기(hoisting)라는 최적화 기법이다.'
- JDK 구현체에서 결과적으로 thread 별 working memory에서 CPU cache를 쓸 수도 있지만, 그것이 명세로서 보장된다는 권위 있는 자료를 찾지는 못함
Effective Java의 Item 52에서는 이런 성격의 클래스를 'Value classes’라고 했다.
Java Persistence with Hibernate 에서는 Value type으로 칭했다.
이런 현상 때문에 VO라는 용어에 불만을 표하고 Valjo라는 새로운 용어를 도입하자는 주장도 있다.
The term "value object" gets confusing in Java circles with various different interpretations. ( http://blog.joda.org/2014/03/valjos-value-java-objects.html 중에서 )
ttp://martinfowler.com/eaaCatalog/domainModel.html[Domain Model] 정도로 칭하는 수도 있다.
- 본문 문장 안에서 줄표를 쓰지 않는다.
- 삽입구는 괄호로 바꾼다:
관계형 스키마 — 외래 키, JOIN — 를→관계형 스키마(외래 키, JOIN)를 - 문장 연결은 두 문장으로 나눈다:
~와 비슷하다 — 지역 변수가 ~→~와 비슷하다. 지역 변수가 ~ - 용어 해설 목록은 콜론으로 바꾼다:
**용어** — 설명이다.→**용어**: 설명이다.
- 삽입구는 괄호로 바꾼다:
- 장·절 제목과 목차에서도 쓰지 않는다. "제목 — 부제"는 "제목: 부제"로 바꾼다.
- 제목에 이미 콜론이 있으면(예:
output: 'export') 콜론이 겹치지 않게 문구를 다듬는다.
- 제목에 이미 콜론이 있으면(예:
- 실제 설정 파일이나 출력을 인용한 문자열(예: go-quality 서브에이전트의
PASS — ...)과 코드 블록 안 내용은 원문 그대로 둔다.