수다닷컴

  • 해외여행
    • 괌
    • 태국
    • 유럽
    • 일본
    • 필리핀
    • 미국
    • 중국
    • 기타여행
    • 싱가폴
  • 건강
    • 다이어트
    • 당뇨
    • 헬스
    • 건강음식
    • 건강기타
  • 컴퓨터
    • 프로그램 개발일반
    • C언어
    • 비주얼베이직
  • 결혼생활
    • 출산/육아
    • 결혼준비
    • 엄마이야기방
  • 일상생활
    • 면접
    • 취업
    • 진로선택
  • 교육
    • 교육일반
    • 아이교육
    • 토익
    • 해외연수
    • 영어
  • 취미생활
    • 음악
    • 자전거
    • 수영
    • 바이크
    • 축구
  • 기타
    • 강아지
    • 제주도여행
    • 국내여행
    • 기타일상
    • 애플
    • 휴대폰관련
  • 프로그램 개발일반
  • C언어
  • 비주얼베이직

java AWT Image 로드시 방법론과 그 효율성에 대해 여쭤보고자 합니다

행복녀

2023.04.01



안녕하세요. java프로그래밍을 열심히 공부하고있는 학생입니다.^^

현재 java awt로 스도쿠 게임을 만들고 있는데 image 로드시 방법론과 그효율성에 대해 여쭤보고자 합니다.java awt로 그래픽 처리를 하는데 있어서 사용되는 메소드는 아래와 같은 것을 사용하고 있습니다.

imagecell_1= toolkit.getdefaulttoolkit().getimage(.\\img\\cell\\cell1.jpg);
g.drawimage(cell_1, x, y, null);

여기서 효율성에 대한 궁금증이 생겼습니다.

제 스도쿠프로그램에서셀을 표현할때1~9 숫자가 쓰여진 이미지와,각각 3색으로 셀의 표현만총 9*3 = 27장의의 이미지 파일을 로드해야합니다.이 로드한 셀을 9*9 = 81개를 그려줘야 하며, network로 최대5인 플레이를 할 경우 81*5 = 405개의 셀이미지를 그려줘야합니다.

제가 c언어나 c++언어로 그래픽 처리를 공부할때 이미지를 얻어오는 과정은 file을 접근해서 파일의 데이터를 가져오고, 그것을 저장하는 꽤나 많은 연산을 하는과정을 거치고 있습니다.

java에서 표현은1줄이지만 내부적으로 엄청많은 작업량을 요구하고 있을 것 같다는 개인적인 생각입니다.

그렇기때문에 이미지를 그려줄때마다 계속 image 로드를 호출하는 것을 피해야 할 것 같다는 생각이 문득 들었습니다. repaint호출때마다 최대 405번의 image로드를 실행하는 연산은 불필요할 것 같아서 입니다.

이 연산량을 피하고자 여러 image 객체를 필드로 정의하고, 생성자에 image를 로드하는 것을 생각해봤습니다. 이는 처음 81번의 image 로드연산만 하면 이후에 draw메소드만 호출하면 됩니다.

하지만 생각해보니 image객체 하나에100*100 jpg 파일을 로드했을때 메모리에 잡히는 사용량을 생각해보니 이것또한 비효율 같아서 이렇게 질문을 올려 여쭤보고자합니다.

생각해보면 변수에 파일 데이터를 모두 기록할 필요없이, 내부pointer를 이용해서 주소만 참조하고 있음 되는거 아닌가 싶기도하고, 그렇게 생각하니, 디스크는 메모리보다 느린데, 이미지를 호출할때마다 디스크에 접근해서 읽어오면 이것또한 성능에 문제가 있지 않을까 생각하면서 자꾸 닭이 먼저냐 알이먼저냐 생각이 들고 있습니다.

제 생각으로는최선의 방법은 자주 사용되는 이미지는 미리 생성하고, 자주 사용되지 않는 이미지는 필요할때 마다 로드하는 방법이 최선일꺼라 생각하고는 있습니다.

항상 느끼지만, 이러한 확률분포 까지 생각하고 프로그래밍 하는 것과 연산량과 메모리 사용량의trade off상관관계는정말 머리아프게 하네요^^;;

일단이미지를 로드할때, 필드에 이미지객체를 모두 생성하고, 생성자에 모든 이미지를 객체에 집어놓고필요한 이미지를바로바로 객체를 호출해서사용하는 방법과 필요할때마다 필요한 이미지를 로드해서 그리는 방법 중 효율성은 무엇이 좋을까요?

많은 분들의 프로그래밍 스타일을 참고하고싶습니다. 알려주시면 감사하겠습니다.

02

신청하기





COMMENT

댓글을 입력해주세요. 비속어와 욕설은 삼가해주세요.

  • 갅쥐누뉨

    전 이런거 아예 만들줄 모릅니다. awt로 잘 안쓴다는 말을 듣곤...걍 그쪽은 수업 듣곤..다 잊어버렸다는...;; 이럼 안되는데..ㅋㅋ

  • 달달한캔디

    많은 정보 감사합니다. 간단하게 네트워크 대전 스도쿠 게임만들려다가 이런것까지 물어보게되고 ^^;
    하핫;; 수다님, 찬님, 사이트수다님 앞에서 저는 부족한게 많아 보이네요.
    앞으로 더 열심히 공부해야겠습니다 ^^b

  • 꽃햇님

    repaint시 효율을 말하는거면.. 기본 컴포넌트든지 이미지든지 그려주는 것은 픽셀이기 때문에 상관없습니다.(그냥 그게그거) 하지만, 이미지를 로딩을 자주하면 문제가 되겠지요.. 이걸 해결하려면, 이미지 객체를 힙에 하나만 생성하는 겁니다.(싱글톤 패턴) 조건은 이미지 하나하나 변경이 일어나지 않고 단지 호출만 하는 것이라고 가정한다면.. 이미 잘 알고 있듯이 물리적인 곳에서 데이터를 가져오는 것보다 메모리에서 가져오는 것이 어마어마하게 속도 차이를

  • 미국녀

    그림을 그려주는것 자체는 오래 걸리지 않을꺼라 예상되는데.
    Disk에서 이미지를 읽어 오는 I/O가 더 느리지 않을까요?

    27장의 이미지를 매번 읽어 들이는것이 아니라,
    한번 읽고 flush 하지 않으면 Disk I/O가 별로 없을것으로 보이는데...
    27장만 메모리에 올리고 있어 보세요. ㅎ.

    그리고 Toolkit말고 ImageIO.read()로 읽어 들여 보세요.
    아마도 ImageIO.read로 읽어 들이면,
    그 내부적으로 Disk Cache를

  • 옆집꼬마야

    본문에 있는것처럼 적절히 타협하는게 좋을듯 싶네요.
    자주쓰이는건 미리 로딩해놓고, 한번쓰이고 버리는-_-; 거 같은건 flush하세요.

    임베디드환경이 아닌이상 이미지 81개쯤은 걍 로딩해도 될거 같은데요.

번호 제 목 글쓴이 날짜
2699547 [급]레이어보다 object태그가 우선순위가 되는 문제 (5) DevilsTears 2025-06-27
2699518 javaScript중복체크 하는법좀.. 알려주세요 (3) 비 2025-06-26
2699495 이런 탭메뉴를 뭐라고 해야 하는지 모르겠네요 (1) 들빛 2025-06-26
2699380 메뉴가 계단식으로 나타나요.. ㅠ.ㅠ (5) 스릉흔다 2025-06-25
2699354 영문 웹폰트 관련 질문입니다!!! (1) 치킨마루 2025-06-25
2699329 윈도우 미디어 플레이어 URL 질문!!! (1) 제철 2025-06-25
2699296 동영상 배경 질문드려요!!!!!!!!!!!!!! 핫파랑 2025-06-24
2699214 position:fixed 에 대한 질문입니다.. (7) 사이 2025-06-24
2699183 제이쿼리 이미지 슬라이드 위치값 수정 초엘 2025-06-23
2699153 테마[ADORABLE]에서 페이지생성시 하위페이지는 2개밖에 안되나요? 흰여울 2025-06-23
2699129 네이버 블로그 또는 사이트의 글을 불러오기 갤원 2025-06-23
2699070 탭메뉴처럼 셀렉트 박스를 이용해서 내용을 출력할 수 있는 방법이 있을까요. (3) 큰꽃늘 2025-06-22
2699016 인터넷이 안되는 환경에서 validator설치방법 (3) 은송이 2025-06-22
2698988 대체 C++ 6.0 exe 아이콘은 어떻게 넣는건가요? 외국녀 2025-06-22
2698960 음성파일을 embed로 작업했는데..웹 표준코딩으로 변경하려면 어떻게 해야하나요? (1) 잎새 2025-06-21
2698932 메뉴목록 풍선창 만들기 html (2) 하늘이 2025-06-21
2698901 http://www.zeitgeistbot.com/ 이 사이트처럼 움직이는 효과를 무엇이라고 하나요? 누림 2025-06-21
2698876 table width값 크로스브라우징에 대한 문의 (2) 볼수록매력 2025-06-21
2698849 c언어 질문. (3) 아름나 2025-06-20
2698823 setInterval 이벤트 제거 하려면... 가온길 2025-06-20
<<  이전  1 2 3 4 5 6 7 8 9 10  다음  >>

수다닷컴 | 여러분과 함께하는 수다토크 커뮤니티 수다닷컴에 오신것을 환영합니다.
사업자등록번호 : 117-07-92748 상호 : 진달래여행사 대표자 : 명현재 서울시 강서구 방화동 890번지 푸르지오 107동 306호
copyright 2011 게시글 삭제 및 기타 문의 : clairacademy@naver.com