231121 TIL #248 게임 개발에 자바를 잘 쓰지 않는 이유

김춘복·2023년 11월 20일
0

TIL : Today I Learned

목록 보기
248/519

Today I Learned

어제 모의 면접에서 게임 개발에 자바를 잘 쓰지 않는 이유에 대해서 질문을 받았는데 제대로 대답을 하지 못했다. 궁금해져서 오늘 TIL에 정리해보려 한다.


게임 개발에 자바를 잘 쓰지 않는 이유

  • 자바로 게임을 아예 만들지 않는 것은 아니다.
    마인크래프트 같이 자바로도 잘 만든 게임이 있긴하고, 안드로이드 어플 같은 경우에는 자바로 만드는 경우가 더러 있긴하다.
    하지만 게임은 일반적으로 C 계열 언어 베이스의 유니티나 언리얼 같은 엔진으로 만든다.

  • 구글링을 해보니 거론되는 여러 이유들이 있었다.
    자바는 성능보다는 범용성에 초점이 맞춰진 언어라는 이유
    (Write Once, Run Anywhere!)
    자바가 코드가 길고 리소스를 많이 먹어 비효율적이라는 이유
    .class 파일이 디컴파일링이 쉬워 다른 언어에 비해 코드를 뜯어보기 쉬워 보안적으로 기피한다는 이유
    가장 핵심처럼 보이는 이유는 지금까지 게임 개발을 C언어 계열로 많이 했기 때문에 레퍼런스 자료들이 C언어 계열에 많다는 이유로 보였다.

  • 하지만 모의 면접에서 질문 하신분의 원하는 답변은 메모리 관리 쪽으로 보여 이에 대해 정리해보고자 한다.

  • 게임은 실시간으로 많은 양의 데이터와 리소스를 처리하므로 메모리 관리가 게임의 성능과 안정성에 직접적인 영향을 미친다.

  • 우선 C나 C++은 OS레벨의 메모리에 직접 접근해 메모리 관리를 저레벨 수준에서 직접 다룰 수 있는 기능을 제공한다. 메모리를 직접 할당하고 반환하는 기능이나 메모리의 라이프사이클을 직접 제어할 수 있다.

  • 자바는 OS의 메모리 영역에 직접 접근하지 않고 JVM 가상머신을 통해 간접적으로 접근한다. 프로그램 실행 시 JVM이 OS에 요청한 사이즈 만큼의 메모리를 할당받는다. (그래서 현재 프로세스에서 메모리 누수가 발생해도 실행중인 것만 죽고 다른 프로세스엔 영향을 끼치지 않는다.)

  • 자바에서는 메모리 관리를 JVM에 일임하여 가비지 컬렉터가 수행한다.

참고사이트


가비지컬렉션(GC)

  • 우선 자바에서 메모리 작동 방식은 Java 기초 #14에 이미 정리해 두었다.

  • 자바는 메모리 관리를 개발자 대신 자동으로 처리하는 가비지 컬렉션 시스템을 사용한다. Heap 영역에서 불필요한 데이터를 자동으로 제거한다. 이로인해 개발자는 직접 메모리 관리를 신경쓰지 않아도 되는 장점이 있지만 게임개발과 같이 성능이 중요한 영역에서는 문제가 될 수도 있다.

  • 가비지컬렉션이 실행되어 불필요한 데이터를 제거하는 동안 작업을 위해 모든 쓰레드를 일시 중단하는데 이를 Stop The World라고 한다. 보통은 아주 짧은 시간동안 발생하지만 만약 많은 양의 메모리를 정리해야한다면 시간이 길어질 수 있다. 실시간 반응성이 중요한 게임에서는 이러한 지연이 사용자 경험에 심각한 영향을 끼칠 수 있다.

  • 그리고 메모리 관리를 자동으로 맡기는 것이기 때문에 메모리 사용을 정밀하게 통제하거나 최적화하는 데 제약이 있다. 메모리 할당과 해제에 대한 직접적인 제어가 어렵기 때문이다.


그 외 (자바의 호환성)

  • 자바는 일반적으로 "Write once, run anywhere"라는 원칙에 따라 설계된 언어로, 한 번 작성된 자바 코드가 JVM이 설치된 모든 플랫폼에서 동일하게 실행된다는 것이다.
    이로인해 자바는 크로스 플랫폼 언어로 여러 운영체제에서 호환성을 보장한다.

  • 하지만 JVM이 해당 플랫폼에서 작동을 해야한다는 전제가 필요하다. Apple의 iOS에서는 JVM을 '기본적으로' 지원하지 않아 자바 어플리케이션을 실행할 수 없다. 물론 크로스플랫폼 툴을 쓰면 실행이 가능은 하지만 성능이나 호환성 이슈가 있다.

  • 그래서 자바는 크로스플랫폼 개발에 유용한 언어이지만 특정 플랫폼(특히 iOS)에서는 제약이 있을 수 있다.

profile
꾸준히 성장하기 위해 매일 log를 남깁니다!

0개의 댓글