*intellij 단축키
ctrl+Alt+F7 : 해당 class or method or variable이 전체 프로젝트의 어느 곳에서 사용되고 있는 지 보여준다.
JVM
- 컴파일러를 이용하여 .java 파일을 컴파일하면 .class 파일이 생긴다. 이렇게 되면 우리가 작성한 자바 코드(.java)는 바이트 코드, 즉 이진수로 이루어진 파일(.class)로 바뀐다.
- 우리가 사용하는 자바는 정의 되어있는 표준 스펙을 토대로 오라클, 아마존 등의 여러 회사에서 이를 구현하여 만들어진다.
- Intellij, eclipse와 같은 통합개발환경(IDE)를 사용하면 컴파일, 실행과 같은 과정을 사용자가 직접 수행할 필요 없이 실행버튼만 누르면 자동으로 이루어지기 때문에 편리하다.
🤔 JVM, 자바 가상 머신
자바를 배우다보면 초반에 꼭 나오는 이야기가 있다. 바로 JVM이다.
처음 이 개념을 접했을 때는 머리로는 이해가 가는데 ... 응 뭔가 머리로만 이해가 가고...ㅜㅜ
특히 " JVM 덕분에 운영체제에 종속적이지 않은 개발을 할 수 있게 되었다. " 라는 이야기가 100% 이해 가지 않았다. 내가 바보였던건가?
본론으로 돌아와서, JVM이란 무엇이고 어디에 쓸모가 있는고? 를 이해해보자.
일반적인 프로그램을 생각해보면 window용 프로그램, Linux용 프로그램, mac용 프로그램을 제각각 따로 개발해야한다. 이것은 운영체제별로 사용하는 OS 명령어가 다르기 때문이 발생하는 일이다. ( ls, cat 같은 리눅스 명령어가 윈도우 OS에서는 사용할 수 없는 것을 예시로 떠올려볼 수 있다.)
그렇다면 자바를 사용하여 프로그램을 개발하는 개발자의 경우 어떨까? 운영체제마다 프로그램을 각각 개발해야할까?
대답은 "아니요!"이다.
위에서 우리가 작성한 소스코드(.java 파일)는 실행버튼을 누르면 두 가지 단계를 거치게 된다고 언급하였다.
1. 컴파일러가 .java파일을 컴파일하여 .class 파일 생성
2. 생성된 .class 파일을 JVM에서 실행
(3. 끄읏)
즉 .class 파일이 호스트(내 컴퓨터)의 자바 가상 머신에서 실행되어야 프로그램이 돌아가는 것이다.
우리는 이 점을 이용한다. 어차피 컴파일된 파일은 JVM을 통해 실행되니, 자바 언어로 자바 문법에 맞게 개발만 하면 각 운영체제에 맞는 JVM이 이를 실행시키도록 하는 것이다! 물론, 운영체제 환경에 맞는 JVM, 즉 자바는 운영체제에 맞게 인간이 직접 다운로드 받아야한다.
더 알아보기
컴파일러(번역기)
- 특정 프로그래밍 언어로 쓰여 있는 문서를 다른 프로그래밍 언어로 옮기는 언어 번역 프로그램
- 컴파일러는 고급 프로그래밍 언어로 쓰여져 있는 파일을 실행 프로그램으로 만들기 위해 저급 프로그래밍 언어(예, 어셈블리 언어, object 코드, machine code)로 바꾸는 데 사용된다.
- 번역 전의 파일을 소스코드 또는 원시코드라고 부르고, 번역 후의 파일을 목적코드라고 부른다.
🤔 설명대로라면 마치 원시코드는 고급 언어로만 쓰여진 파일을 지칭하는 것 같이 보인다.
그런데 검색을 해보았을 때, 원시 코드는 프로그래밍 언어로 작성된 텍스트 파일이라고 했다. 프로그래밍 언어는 고급언어와 저급 언어가 있으므로 저급언어로 작성된 코드도 포함될텐데... 잘못 검색한건가? 싶었다.
⚡설명만 읽었다면 [원시코드 = 고급언어로만 쓰여진 파일 지칭] 라고 이해할 수도 있다. 하지만 그게 아니다.
원시코드는 고급언어와 저급언어를 둘 다 포함하는 개념인 "프로그래밍 언어"로 쓰여진 파일을 지칭하는 게 맞다.
컴파일 이전 파일이 고급 언어로 작성되어 있으므로 원시코드라고 부를 수 있는 것이다.
원시 코드(=소스코드)
- 프로그래밍 언어로 작성된 텍스트 파일
- 일반적으로 고급 언어로 작성된 텍스트를 말한다.
자바 바이트 코드
자바 가상 머신이 이해할 수 있는 언어로 변환된 자바 소스 코드를 의미합니다.
자바 컴파일러에 의해 변환되는 코드의 명령어 크기가 1바이트라서 자바 바이트 코드라고 불리고 있습니다.
이러한 자바 바이트 코드의 확장자는 .class입니다.
출처_ TCP School
Instruction
- opcode + operand
기계어
- CPU의 종류에 따라서 서로 다른 코드를 갖게 된다.
- 이진수로 이루어져 있음
어셈블리어
- 연산자(opcode)와 피연산자(operand)로 이루어진 명령어를 사람이 알아보기 쉬운 언어로 일대일 매핑 시킨 것
- 기계어보다 이해하기 쉽고 더 추상적이다.
- 고급언어보다 이해하기 어렵고 덜 추상적이다.
- CPU의 종류에 따라 어셈블리어도 달라진다. 기계어가 CPU의 종류에 따라 달라지기 때문이다.
예시
mov al, 061h
mov와 같은 명령어는 니모닉 기호라고 부른다.
어셈블러
- 어셈블리어로 작성된 파일을 기계어 파일로 바꿈
reference
https://hi-guten-tag.tistory.com/224
[컴퓨터 구조] Assembly Language (컴퓨터의 언어 - 어셈블리어)
앞의 글을 읽으시면 이해에 도움이 됩니다. 2022.09.23 - [Computer Science/컴퓨터 구조] - [컴퓨터 구조] Introduction to Computre Architecture (컴퓨터 구조의 소개) [컴퓨터 구조] Introduction to Computer Architecture (컴
hi-guten-tag.tistory.com
'JAVA' 카테고리의 다른 글
변수 (0) | 2024.11.12 |
---|---|
오버라이딩 (0) | 2024.07.03 |
Optional (0) | 2023.08.03 |
abstract class (0) | 2023.07.10 |