👨💻사실 Java는 저에게 그나마 가장 익숙한 언어입니다.
기본적인 문법에 대해선 많이 아는 편이라고 생각하지만 더 나은 개발자가 되려면 더욱 완벽하게 공부해 볼 필요도 있다는 생각이 들었습니다.
이 시리즈에선 앞으로 자바공부는 이번 시간에 끝낸다는 생각으로 Java에 대해서 공부해보려고 합니다!💪
Programming Language에는 인터프리터언어와 컴파일러 언어가 존재 합니다.
먼저 이 두가지에 대해서 알아보겠습니다.🧐
컴파일과 인터프리터
- 인터프리터 언어
먼저 인터프리터 언어에 대해서 알아보겠습니다.
대표적인 인터프리터언어로는
Python, JavaScript, Ruby가 있습니다.
인터프리터 언어는 코드를
한 줄씩
읽어 내려가며 실행하는 방식입니다.
💡<특징>💡
1. 컴파일하는 과정이 없기 때문에 컴파일 시간이 없습니다.
2. 실행시마다 인터프리트 과정이 필요하기 때문에 비교적으로 실행 속도가 느립니다.
3. 하지만 코드 변경시 빌드 없이 바로 실행이 가능하다는 장점이 있습니다.
- 컴파일 언어
소스코드를 기계어로 컴파일해서 실행파일을 만들어 실행하는 방식입니다.
대표적인 컴파일언어로는 C, C++, Java가 있습니다.
컴파일 언어는 코드를 한 번에 기계어로 변환하여 실행 파일을 만듭니다.
컴파일 언어는 컴파일 단계와 실행 단계가 각각 분리되어 있으며, 컴파일은 단 한번만 수행합니다.
💡<특징>💡
1. 런타임 상황에서는 이미 기계어로 모든 소스코드가 변환되어 있기 때문에(컴파일) 인터프리터에 비해 빠르게 실행할 수 있습니다.
2. 한 번에 모든 코드를 컴파일 하기 때문에 실행전에 오류를 파악할 수 있습니다.
3. 코드를 수정하면 다시 컴파일 과정을 거쳐야합니다.
✍정리✍
컴파일 언어와 인터프리터 언어 중 어느것이 낫다 라기 보단 상황에 따라 더욱 유용한 것을 쓴다 라는 느낌으로 알아두는것이 중요할것같습니다.
만드는 프로그램의 크기가 방대하다고 했을 때
수정한 코드에 대해 확인하려면 인터프리터언어가 더 어울릴듯 합니다.
하지만 속도가 더욱 중요한 상황에선 컴파일러방식이 더욱 유용하다고 할 수 있습니다.
이렇게 상황에 따라서 필요한 방식이 다르다고 이해하는 것이 중요합니다.
그렇다면 Java는 컴파일 언어일까 아니면 인터프리터 언어일까?
컴파일 언어에 가깝지만 인터프리터적인 요소도 있다 라고 말하고 싶습니다.
이 말을 이해하기 위해선 JVM에 대해서 이해할 필요가 있습니다.
JVM

자바 소스 코드는 운영체제로 부터 독립적입니다.
원래는 운영체제마다 따로 코딩을 해야하는데 JVM으로 이 번거로움을 해결하였습니다.
JVM은 이 외에도 메모리관리, GC(가비지 컬렉션), 스레드 관리 등의 작업을 해줍니다.
컴퓨터 공학과 학생이라면 1학년 때 배우는 C언어 포인터에서 많이 좌절하기도 합니다. 물론 저도 그랬습니다.
하지만 JVM에서 메모리에 대한 관리를 해주기 때문에 메모리에 대해 고려하지 않고 개발할 수 있다는 특징도 있습니다!

자바 컴파일러가 소스 코드(.java)를 자바 바이트 코드(.class)로 컴파일하고, 자바 인터프리터는 바이트 코드를 기계어가 이해할 수 있는 기계코드로 변환(convert)하거나 번역(translate)하는 과정을 거칩니다.
소스코드를 바이트 코드로 컴파일 -> 바이트 코드를 기계코드로 인터프리트 이 두 과정을 거친다고 볼 수 있기 때문에
컴파일 언어에 가깝지만 인터프리터적인 요소도 있다 라고 말하고 싶습니다.🙂
👩💻실습👩💻

Java파일을 컴파일, 실행해보겠습니다.

컴파일 한 뒤 .class 파일이 생성된 것을 확인할 수 있습니다!👏👏
이 .class 파일이 또 기계어로 번역되어 마지막으로 코드의 실행결과가 나오는 과정을 거칩니다.
OOP (Objected-Oriented Programming)
자바는 객체지향 프로그래밍입니다.
자바 소스 코드를 작성할 때 클래스 단위로 작성합니다.
클래스(class)는 객체를 만들기 위한 설계도입니다.
필드와 메서드에 대한 설계를 포함하고 있습니다.
필드(Field)는 객체의 속성입니다. 객체가 갖는 공통된 성격의 값이라고 할 수 있습니다.
메서드(Method)는 객체의 동작을 말합니다. 객체가 갖는 공통된 함수라고 할 수 있습니다.
👍배운점👍
항상 Intelli J를 써 오면서 빌드 시 생기는 out 패키지를 봐 왔지만
저게 왜 무엇이고 왜 생기는지에 대해 궁금함을 가지지 않았다는 것이 후회됩니다.😭
앞으로는 사소한것도 궁금해 할 줄 아는 사람이 되고 싶습니다.💪
또한 컴파일언어와 인터프리터언어의 특징에 대해서 정확하게 몰랐지만 이번 기회를 통해 두가지의 특징을 정확히 알게 되었고 JVM에 대해서 더욱 구체적으로 알 수 있게 되었습니다!🎉
'🧮Programming > Java' 카테고리의 다른 글
| [Java] 패키지와 접근 제한자 (0) | 2024.02.06 |
|---|---|
| [Java] 객체와 클래스 (0) | 2024.02.06 |
| [Java] 배열(Array) (0) | 2024.02.05 |
| [Java] 참조 타입 (1) | 2024.02.04 |
| [Java] Java기초 문법 (0) | 2024.02.04 |