프로그램을 개발하다 보면 크게 두 가지 목적에 '공유'를 고려하게 된다. 하나는 논리적인 관점에서 공유가 필요한 경우고, 다른 하나는 구현 측면에서 컴퓨터 자원을 효율적으로 사용하기 위해 공유가 필요한 경우다. 전자의 대표적인 예로는 데이터베이스나 파일 등의 공유에서처럼 동일한 데이터나 자원을 공유하는 경우를 들 수 있고, 후자의 대표적인 예로는 동일한 값이나 데이터에 대해 포인터 변수 등을 통해 공유를 수행하는 경우를 들 수 있다. 여기서 공유를 수행하는 두 가지 목적 중 논리적 관점에 따른 공유는 보통 논리 모델에 기반해서 공유될 객체가 별도로 정의되기 때문에 이 객체를 잘 사용하는 형태로만 설계를 하면 공유에 따른 문제는 쉽게 해결될 수 있다. 반면, 컴퓨터 자원 사용 효율화를 위한 구현 관점에서의..