스트림 자원은 만든 계층이 닫기 책임을 소유한다

빌린 스트림이나 FileDescriptor를 임의로 닫으면 다른 사용자의 자원까지 무효화할 수 있습니다.

프로세스·호출자파일/소켓 수명 소유
factorystream 생성·전달
consumerowned면 try-with-resources
borrowed stream사용만 하고 닫지 않음
close소유자에게 한 번

핵심: API 경계마다 owned와 borrowed를 구분하고 가장 바깥 소유자만 close합니다.