자바 Class 만들때 어떤식으로 만들어야 좋은건지 너무 헷갈려요 ㅠㅠ

안녕하세요 현재 인강보면서 공부중인데 객체 부분 공부하면서 궁금한게 생겨서 질문 올립니다

예를 들어 자판기를 만든다고 치면 저는 자판기 Class, 상품 Class, 자판기 돈통 Class, 자판기 잔돈 돌려주는 돈통 Class를 만들고 상품 , 돈통, 잔동통을 전부 자판기 안에 넣어주고 만들었어요

근데 만들고나서 이해가 안되는부분이 만약 사람이 자판기를 이용한다고 한다면 사람이라는

객체를 만들어서 자판기를 사용하게끔 만들고 싶은데 사람이 자판기 객체를 참조하게 만들면

그 사람은 자판기에서 상품을 뽑고도 자판기를 계속 바라보고 있게 되는거잖아요

그래서 자판기 이용을 끝나면 사람 객체 참조변수에 null을 넣어서 연결을 끊고 싶은데

그러면 사람 객체는 heap에 계속 남아있게 되나요? 그럼 사람을 많이 만들면 안좋아지는건지

메모리가 커서 아무 상관없는지 아니면 제가 잘못이해하고 있는건지 궁금해요 ㅠㅠ

사람들이 나중이 더 어렵다는데 벌써 막혀서 위에처럼 하는게 제대로 하고 있는게 맞는지도

몰라서 글 올립니다. 마지막으로 객체 관련 연습은 그냥 구글에 쳐가면서 다른 사람이 만든거

따라하는것도 좋은 방법인지 궁금해요

    2개의 답변이 있어요!

    • 자바에는 통칭 GC 라는 시스템이 자동으로 사용되지않는것들을 내부에서 처리해줍니다.

      소켓 등 시스템상 대기가 정상인 경우도 있는것들은 그렇지않지만

      쓸모없는 객체나 사용하지않는것이 명확한 것들은 알아서 GC가 걸러줍니다.

      자세한건 아래 URL 첨부 드리오니 확인해보세요^^

      https://ko.wikipedia.org/wiki/%EC%93%B0%EB%A0%88%EA%B8%B0_%EC%88%98%EC%A7%91_(%EC%BB%B4%ED%93%A8%ED%84%B0_%EA%B3%BC%ED%95%99)

    • 실세계의 객체를 클래스로 모델링하는 과정에서 어려움을 겪고 계시는 것 같네요

      자판기는 여러개가 있을 수 있습니다. 사람도 여러명이 있을 수 있습니다.

      사람이 자판기를 하나만 쓸 수 있는 것도 아니고, 자판기 하나가 사람 한 명만 받는 것도 아닙니다.

      자판기와 사람은 서로에게 종속되거나 하는 관계가 없습니다. 모두 클래스로 만드시면 됩니다.

      (자판기 클래스로 자판기 A, 자판기 B 등의 자판기 객체를 만들 수 있겠죠?)

      저는 자판기의 구조를 잘 몰라서 돈통에 대해 제가 제대로 이해하고 있는 게 맞는지 잘 모르겠지만

      잔돈을 돌려주는 돈통의 클래스가 따로 있어서는 안 됩니다.

      자판기별로 돈통 객체 중 하나가 잔돈을 돌려주는 돈통인 것이죠.

      상품 클래스도 자판기 클래스 안에 넣었다고 하셨는데,

      상품 1이 자판기 A에만 있을 수 있고, 자판기 B에는 상품 1이 있을 수 없다면 그렇게 되는 게 맞습니다.

      하지만 상품 1이 자판기 B에도 들어갈 수 있고, 어디 다른 데 있는 상품 2도 들어갈 수 있고... 그러면

      상품 클래스가 자판기 클래스 안에 있다면 겹치는 상품이 있어도 상품 객체를 따로 만들어야 합니다.

      정말 이런 걸 의도하신 게 아니라면, 상품 클래스는 자판기 클래스 밖으로 빼는 것이 좋습니다.

      사람 객체가 heap에 남아있는지... 메모리 문제에 대해서는 GC에 대해서 검색해 보시는 게 좋을 것 같네요