해결된 질문
작성
·
19
1
안녕하세요. 좋은 강의 감사합니다.
값 객체에 대한 내용을 듣고 궁금했던 점이 있었는데, 섹션 4 퀴즈를 풀면서 해소되는 동시에 새로운 질문이 생겼습니다.
값 객체를 사용하는 메소드를 과도하게 호출하여 OOM(Out of Memory)이 발생할 것으로 예상되는 경우, 이를 어떻게 회피할 수 있는지 궁금합니다.
아직 강의를 전부 듣지 않아서 이후에 나올 내용일 수도 있겠지만, 지금 드는 생각으로는 Map을 이용해 내부적으로 캐시를 구현하여 메모리 사용량을 줄이는 방법이 떠오르는데, 이 접근법이 맞을지 궁금합니다.
답변 2
1
Yojae Jang님 안녕하세요.
제가 오늘 아침부터 계속 강의를 하느라 이제서야 답글을 남기네요.
답변이 늦어져서 죄송합니다.
값 객체는 기본적으로 크기고 작고, 일시적으로 사용한 후에 곧바로 메모리를 해제하는 방식으로 사용됩니다.
따라서 일반적인 백엔드 환경에서는 의도적으로 엄청난 양의 값 객체를 생성한 후에 참조를 계속 유지해서 가비지 컬렉터에 넘겨지지 않도록 하지 않는 이상 값 객체로 인해 OOM이 발생할 확률은 거의 없다고 보셔도 무방합니다.
JDK에 포함된 많은 클래스들이 값 객체 방식으로 구현되어 있음에도 OOM을 고민하지 않고 쓰는 것처럼 직접 만든 값 객체라고 하더라도 OOM에 대한 걱정없이 편하게 사용하셔도 괜찮습니다.
물론 일반적인 환경이 아니라 메모리가 아주 작은 환경에서 실행해야 하거나 게임의 그래픽 구성 요소처럼 크기가 매우 큰 객체들이 대량으로 생성되는 경우도 있을 수 있습니다.
이 경우에는 값 객체를 매번 생성하는 대신 Flyweight 패턴(https://refactoring.guru/ko/design-patterns/flyweight, https://gameprogrammingpatterns.com/flyweight.html)을 이용해서 여러 객체들 사이에서 동일한 객체를 공유하는 방법을 사용할 수 있습니다.
여러 객체 사이에 동일한 객체를 공유하는 대신 한 시점에 하나의 객체에 의해서만 독점적으로 사용된다면 Object Pool 패턴(https://gameprogrammingpatterns.com/object-pool.html)을 사용할 수도 있습니다.
위 방법들은 전체적으로 코드를 복잡하게 만들기 때문에 정말 OOM이 발생할 수 있는 꼭 필요한 상황에서만 사용하시는게 좋을 것 같아요. 🙂
답변이 되었는지 모르겠네요.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다. Yojae Jang님!
값 객체 사용 시, 메모리 문제와 관련된 질문에 대해 깊이 있는 고민이 느껴집니다. 객체지향 설계에서는 값 객체(Value Object)를 많이 사용하게 되는데, 이러한 패턴을 사용할 때 성능과 메모리 관리를 고려하는 것은 중요한 과제입니다.
값 객체는 불변성이 보장되며, 경우에 따라 많이 생성되고 사라지는 특성이 있습니다. OOM(Out of Memory) 문제가 발생할 수 있는 경우는 주로 과도한 객체 생성이 지속적으로 반복될 때입니다. 이를 해결할 수 있는 몇 가지 방법을 짚어보겠습니다.
캐싱:
Map
같은 컬렉션을 사용해서 캐시 구현이 가능합니다. 이는 Flyweight 패턴의 한 예로 봐도 좋습니다.적절한 범위의 객체 수명 관리:
객체 풀링(Object Pooling):
질문하신 부분과 관련하여 기존의 답변이 유익할 수 있습니다:
- ORM을 사용한 설계 시 값 객체의 장단점
위 링크에서는 ORM 환경에서의 값 객체 사용 시 메모리 관리와 관련된 논의가 이루어졌습니다. 이 내용을 통해 이해를 더욱 깊게 하실 수 있을 것이라 생각합니다.
강의를 통해 배운 내용을 실무에 어떻게 적용할지 고민하시는 모습이 아주 인상깊습니다. 추가적으로 궁금한 점이 있다면 언제든지 질문해 주세요. 지식공유자님께서 곧 더욱 자세한 답변을 해주실 것입니다.
저는 질문자님의 이해를 돕고자 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적인 질문이 있으시면 언제든지 말씀해 주세요!
이건 저도 궁금하기는 하네요.
AI가 달아놓은 답변 안에 404 오류가 발생하는 링크가 들어있는 경우가 종종 보이던데 제목으로 봐서는 제 강의는 아니고 다른 강의의 답변인 것 같은데 삭제가 된 것인지 궁금하네요.
ORM을 사용한 설계 시 값 객체의 장단점
링크의 페이지가 404 인데 어떤 페이지 였을까요?