사랑꾼이야 2023. 4. 9. 23:04
반응형

이 내용은 엘레강트 오브젝트 를 읽으면서 정리한 내용을 포함하고 있습니다.

  • RAIL
  • Java의 RAIL
  • 정리

RAIL

  • 리소스 획득은 초기화
  • C++에 존재하는 매우 강력한 기법
  • 가비지 컬렉션을 이용해서 객체를 제거하는 Java에서는 사라진 개념

핵심은 객체가 살아있는 동안에만 리소스를 확보하는 것이다.

Java의 RAIL

  • 가비지 컬렉션
    • 객체가 더 이상 사용되지 않을 때 객체를 제거하는 작업을 백그라운드로 진행
    • 기술적으로 Java에서는 main() 메서드의 실행이 종료된 이후에도 객체 t가 계속 살아 있을 수 있다.
    • main() 메서드가 종료된 후에는 더 이상 객체가 필요하지 않지만, Java는 객체를 즉시 파괴하지 않는다.
    • 대신 객체가 오랜 시간 메소리에 머무를 수 있는데, 이런 객체를 가비지 라고 부른다.
    • 새로운 객체를 보관하는 데 필요한 메모리가 부족한 경우에만 가비지 컬렉터가 객체를 제거한다.
  • RAIL과 유사한 Java7에서의 기능
    • try-with-resources 기법 사용
int main() [
    try (Text t = new Text("/tmp/text.txt")) {
        t.content();
    }
]
  • 이 방법을 사용하기 위해서는 Text 클래스가 Closable 인터페이스를 구현하도록만 하면 된다.

정리

  • 파일, 스트림, 데이터베이스 커넥션 등 실제 리소스를 사용하는 모든 곳에서 RAIL를 사용할 것을 적극 추천한다.
  • Java에서는 AutoCloseable을 사용하면 된다.
반응형