인프런 커뮤니티 질문&답변

최성환님의 프로필 이미지
최성환

작성한 질문수

김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음

자바란?

7분쯤에 Bytecode 관련 질문드립니다.

작성

·

378

0

안녕하세요! 제가 Bytecode에 대해서 혼자 찾아보다가 이해가 안되는 부분이 있어서 질문드립니다.

 

  1. Bytecode는 이진법으로 되어있는걸로 알고 있는데 왜 예시로 보여주신거는 16진법 형식으로 되어있나요?
    Screenshot 2024-01-10 at 3.07.27 AM.png
    저는 Bytecode 명령어 에서 binary 부분으로 표기되어있는걸로 나열되어있을거라고 상상했는데 (0010 1010..)
    위에 사진의 예시는 '이진법을 그대로 보여주면 너무 길기 때문에 나름 보기 쉽게 16진법으로 바꿔서 보여준것이다' 정도로 이해하면 되는걸까요?

  2. 인텔레제이 -> view -> show bytecode 메뉴로 보여주는 결과값은 *.class 파일을 역어셈블해서 보여준걸로 이해하면 될까요?

  3. *.class 파일을 직접 뜯었을 때 실제로 바이너리형태의 결과값을 볼 수 있는 방법은 아예 없는걸까요? 구글링해보면 모두 다 "Bytecode는 바이너리이다~" 라고 말만하지 실제로 증거가될만한 이미지가 없어서.. 그냥 머리속으로 상상하고 넘어가야하는건가 궁금합니다.

 

답변 2

4

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 최성환님

  1. Bytecode가 이진법이 아닌 16진법으로 표시되는 이유: 맞습니다, Bytecode는 본질적으로 이진 데이터(0과 1의 시퀀스)입니다. 그러나 이진 데이터를 직접적으로 보는 것은 매우 복잡하고 긴 과정이 됩니다. 따라서 실제로는 더 간결하고 이해하기 쉬운 형태인 16진법(hexadecimal)으로 표시합니다. 16진법은 이진법에 비해 훨씬 더 읽기 쉽고, 더 적은 공간을 차지합니다. 예를 들어, 4비트의 이진수는 하나의 16진수로 표현될 수 있습니다. 이렇게 변환함으로써, Bytecode를 더 쉽게 해석하고 작업할 수 있게 됩니다.

  2. IntelliJ IDEA에서 'View > Show Bytecode' 기능: 이 기능은 .class 파일의 내용을 Bytecode 형태로 보여주는 것입니다. Java 소스코드(.java 파일)는 컴파일되어 Bytecode로 변환되며, 이 변환된 Bytecode가 .class 파일에 저장됩니다. IntelliJ의 'Show Bytecode' 기능은 이 *.class 파일을 역어셈블하여, 개발자가 Bytecode를 볼 수 있도록 해줍니다.

  3. 실제 Bytecode의 바이너리 형태 확인: *.class 파일을 직접 열어보면, 실제로 바이너리 데이터를 볼 수 있습니다. 이는 텍스트 편집기가 아닌 바이너리 파일을 읽을 수 있는 편집기(예: Hex Editor)를 사용해야 합니다. 바이너리 파일을 직접 열어보면, 이진 데이터(0과 1의 시퀀스)가 아니라, 이를 해석할 수 있는 형태의 데이터를 볼 수 있습니다. 보통 이러한 데이터는 16진법으로 표시되어 있어, 개발자가 좀 더 쉽게 내용을 이해하고 분석할 수 있습니다.

그런데 사실 이런 부분은 크게 중요한 내용은 아닙니다.

우리가 개발하는 것은 .java 파일입니다.

.class 파일에 대한 부분은 개발자가 신경쓰기 보다는 자바를 만드는 곳에서 신경써야 하는 부분입니다.

따라서 자바가 만들어주는 .class가 바이트 코드로 만들어져 있다고 생각하고 넘어가셔도 충분합니다.

감사합니다.

0

최성환님의 프로필 이미지
최성환
질문자

안녕하세요 김영한 강사님! 답변 감사합니다!
사실 그냥 가볍게 이해하고 넘어갔어도 됐었는데 뭔가 속시원하게 정리되지 않았어서 혼자 끙끙 앓고있었습니다ㅎㅎ
강사님 덕분에 이제 궁금증을 정리할 수 있게 되었습니다. 감사합니다!!

최성환님의 프로필 이미지
최성환

작성한 질문수

질문하기