Java에 대해 알아보자.

찬근·2023년 7월 4일
0
post-thumbnail

이 글은 The Java® Language Specification의 Introduction의 내용을 바탕으로 작성되었습니다.

Java?

  1. general-purposed, 동시성 지원, 클래스 기반객체지향 언어
    • 동시성: 프로그램이 여러 작업 또는 스레드를 동시에 실행하고 관리할 수 있는 능력
  2. C와 C++과 관련이 있지만 C와 C++의 몇 가지 측면은 제외, 다른 언어들의 아이디어를 포함
  3. 연구 언어가 아닌 제품 언어
  4. 정적 타입 언어
    • 정적 타입 언어(Statically Typed Language): 컴파일 시점에 변수 타입 지정
      • Java, C, C++
    • 동적 타입 언어 (Dynamically Typed Language): 런타임 시점에 동적으로 타입이 결정됨
      • Python, JavaScript
  5. 비교적 고수준 언어
  6. 가비지 컬렉터를 통한 메모리 자동 관리 기능 제공
    • 명시적인 할당 해제(C의 free 등)의 안전 문제를 피할 수 있음

장점

  1. 플랫폼 독립성(Write OnceRun Anywhere)
    • JVM(Java Virtual Machine) 위에서 실행
    • 운영 체제나 하드웨어에 종속 X
    • 여러 플랫폼에서 동일한 방식으로 실행 가능
  2. 객체 지향 프로그래밍(OOP)
    • 코드의 모듈성, 재사용성, 유지보수성 ↑
    • 코드의 가독성, 확장성 개선 가능
  3. 안전성
    • 타입 검사 → 타입 안정성
    • 메모리 자동 관리, 가비지 컬렉션 → 메모리 누수나 잘못된 메모리 관리로 인한 문제 방지
  4. 멀티스레딩 지원
    • 병렬 처리, 동시성 구현 가능
    • 대규모 애플리케이션, 네트워크 서버 등의 동시 처리가 필요한 환경에서 유용

단점

  1. 성능
    • Java의 바이트코드를 해석하고 실행하는 과정에서 발생하는 오버헤드,가비지 컬렉션 작업에 따른 부담 → 타 언어에 비해 상대적으로 느린 실행 속도
  2. 메모리 사용
    • 가비지 컬렉션 작업 → 일시적인 정지(pause) 발생 가능
    • 가비지 컬렉션 알고리즘의 선택과 튜닝에 따라 메모리 사용량과 성능 간의 트레이드오프 발생 가능
  3. 자원 소비
    • 자바 가상 머신(JVM) 위에서 실행 → 추가적인 시스템 자원 필요
profile
일관성 있는 개발자

0개의 댓글