JAVA는 왜 사용하는 걸까?

sun·2024년 1월 13일
0

java

목록 보기
1/4

JAVA?

  • java는 객체지향 프로그래밍 언어이다.
  • 가상머신인 JVM 위에서 동작하며 다양한 운영체제 및 하드웨어 환경에서 실행될 수 있어 플랫폼에 독립적이다.
  • 가바지 컬렉션을 통해 자동으로 메모리를 관리해주어 개발자가 명시적으로 메모리를 할당하고 해제할 필요가 없다. (C나 C++은 메모리 할당하고 해제할 수 있다)
  • 멀티스레드 프로그래밍을 쉽게 구현할 수 있는 기능을 제공한다.
  • 다양한 표준 라이브러리를 포함하고 있어, 효과적으로 애플리케이션을 개발할 수 있도록 지원한다.
  • 컴파일 언어이다.

컴파일 언어의 장점은?

컴파일 언어와 인터프리터 언어를 비교해보자.

👉 컴파일 언어?

  • 소스코드를 사람이 읽을 수 있는 고급언어로 작성 후 컴파일러를 통해 소스코드 전체를 바이트 코드로 변환하여 실행파일을 생성한 후 실행파일을 실행할 때 기계어로 변환.
  • 기계어로 변환을 해주기에 프로그램은 빠르게 실행됨.
  • 컴파일의 종류와 설계에 따라 플랫폼의 독립성을 가질수도 아닐수도 있음.
  • 컴파일 시에 오류를 검출할 수 있어 런타임 오류가 감소.
  • 소스코드 수정 후에는 다시 컴파일 해야해서 코드를 최적화하는 과정에서 원본 코드 간의 대응이 일치하지 않을 수 있어 디버깅이 어려울 수 있음.
  • 속도가 빠르기 때문에 금융 어플같이 실시간으로 데이터 이동이 있어야 하는 것들은 컴파일 언어, 기계어에 가까울 수록 좋다.

👉 인터프리터 언어?

  • 소스코드를 한 줄씩 읽어들여 바이트 코드로 해석되고 바로 실행.
  • 소스코드는 실행시간에 바로 해석하여 실행파일 생성되지 않음.
  • 실행시간에 소스코드를 해석하므로 컴파일된 코드보다 실행속도가 느림. (Latency 추가)
  • 플랫폼 독립성이 높아 여러 운영체제에서 실행가능.
    하지만 최근 JIT(Just-In-Time) 컴파일과 같은 기술을 통해 인터프리터 언어 성능 향상 시도 있음.
  • 소스코드가 실행시간에 해석되기 때문에 런타임 오류를 조기에 확인하기 어려울 수 있음.
  • 오류가 나타나는 시점이 코드가 실행되는 동안이기 때문에 상대적으로 디버깅이 어려울 수 있음.

👉 그래서 비교해보자면?

  • 인터프리터 언어에 비해 컴파일 언어는 런타임 오류를 감소할 수 있음.
  • 인터프리터 언어에 비해 컴파일 언어는 실행속도가 더 빠름.
  • 인터프리터 언어에 비해 컴파일 언어는 코드 수정 및 실행이 불편함.
  • 인터프리터 언어에 비해 컴파일 언어는 overhead가 적고 Latency도 적음.

🤔 바이트 코드와 기계어는 달라?

바이트코드

  • 중간언어. 특정 컴퓨터 아키텍처에 의존하지 않고 중간 단계에서 사용.
  • 특정 가상머신에서 실행. (JVM, .NET CLR)
  • 고급언어의 코드를 컴파일 한 결과물.

기계어

  • 컴퓨터 하드웨어가 직접 실행하는 이진 형태의 명령어로 특정 컴퓨터 아키텍처에 따라 정의됨.
  • 컴퓨터의 CPU가 이해하고 실행할 수 있는 0과 1로 이루어진 이진 코드.
  • 특정 컴퓨터 아키텍처에 의존적이며, 다른 아키텍처에서는 사용 불가.

❔ Laytency : 하나의 데이터 패킷이 출발지에서 도착지까지 가는 데 걸리는 시간
❔ Overhead : 어떤 처리를 하기 위해 들어가는 간접적인 처리 시간, 메모리
ex) 프로그램의 실행 흐름 도중 동떨어진 위치의 코드를 실행시켜야 할 때 추가적으로 시간,메모리,자원이 사용되는 현상.


profile
Please, Steadily

0개의 댓글