자바의 장단점을 알아보자.

2024. 11. 19. 13:48·프로그래밍 언어/Java
728x90

자바의 장점

1. 플랫폼 독립성 – “Write Once, Run Anywhere”

자바의 가장 큰 장점은 플랫폼 독립성이다. 자바로 작성된 프로그램은 JVM(Java Virtual Machine) 덕분에 한 번만 작성하면 다양한 운영 체제에서 실행 가능하다.

 

  • 자바 컴파일러(javac)는 소스 코드를 바이트코드(.class 파일)로 변환한다.
  • 이 바이트코드는 특정 OS에 종속되지 않고, JVM이 바이트코드를 각 OS에서 실행 가능한 기계어로 변환한다.

 

2. 다양한 라이브러리와 커뮤니티 지원

자바는 오랜 역사를 가진 언어로, 방대한 표준 라이브러리와 Spring, Hibernate, Apache Commons 등 강력한 오픈 소스 프레임워크가 풍부하다.

 

  • 네트워킹, 데이터베이스, 파일 처리 등 대부분의 기능을 표준 라이브러리로 간단히 구현할 수 있다.
  • 커뮤니티 지원이 강력하여 문제를 검색하거나 해결 방법을 찾기 쉽다.

 

3. 메모리 관리 – Garbage Collection

C/C++은 메모리를 직접 할당(malloc)하고 해제(free)해야 하는데, 자바는 Garbage Collector(GC)를 통해 프로그래머가 메모리를 수동으로 관리할 필요 없이 더 이상 참조되지 않는 객체를 자동으로 정리한다.

  • 메모리 누수를 줄이고, 안정성을 높인다.
  • 개발자가 메모리 관리에 신경 쓰지 않아도 된다.
  • 자바의 메모리는 JVM의 관리 하에 명확히 Heap과 Stack 등으로 구조화되어 있다.
    • Heap: 객체와 클래스의 인스턴스를 저장. GC가 관리.
    • Stack: 메서드 호출과 지역 변수를 저장. 메서드 실행이 끝나면 자동 해제.
  • 이런 구조 때문에 메모리 관련 오류(버퍼 오버플로우 등)가 적다.

 

4. 멀티스레드와 동시성 지원

자바는 멀티스레드 프로그래밍을 지원하며, Thread 클래스와 Executor 프레임워크를 통해 복잡한 동시성 문제를 쉽게 해결할 수 있다.

 

  • 서버 애플리케이션에서 효율적인 요청 처리를 구현할 수 있다.
  • 자바 8에서는 CompletableFuture와 같은 비동기 프로그래밍 도구를 제공하여 성능을 더욱 향상시킨다.
    • 참고 : Java CompletableFuture로 비동기 적용하기

 


자바의 단점

1. 런타임 성능 문제 – JVM의 오버헤드

자바는 JVM에서 실행되므로, 네이티브 언어(C, C++)에 비해 실행 속도가 느리다. 이는 JVM이 바이트코드를 기계어로 변환하는 추가 작업을 수행하기 때문이다.

해결 방법:

  • JIT(Just-In-Time) 컴파일러와 같은 기술을 활용하여 성능을 최적화한다.
  • 애플리케이션의 성능 병목 지점을 파악하고, 최적화된 라이브러리를 사용한다.

 

2. Verbose(장황한) 문법 – 코드가 길어지는 경향

자바는 명시적인 문법을 요구하기 때문에, 다른 언어(예: Python)에 비해 코드가 길어지는 경향이 있다.

해결 방법:

  • 최신 자바(버전 8 이상)에서는 람다 표현식과 스트림 API를 도입하여 코드 간결성을 높였다.
    • 람다 표현식: 반복적인 익명 클래스 코드를 줄일 수 있다.
  • 반복적인 코드를 줄이기 위해 Lombok 같은 도구를 사용할 수 있다.
    • Lombok: getter, setter 등 반복 코드를 자동 생성해 준다.

 

3. 메모리 사용량이 많음

자바 애플리케이션은 JVM 위에서 실행되므로, 네이티브 애플리케이션보다 메모리 사용량이 많다. 특히 대규모 서버 애플리케이션에서 메모리 소비가 심각해질 수 있다. GC와 같은 자동화 기능은 메모리 누수를 줄이는 대신, 추가적인 메모리 자원이 필요하다. C/C++과의 비교하면 네이티브 언어에 비해 메모리 사용량이 많다.

 

해결 방법:

  • 메모리 효율이 높은 구조와 알고리즘을 사용한다.
  • JVM 튜닝을 통해 GC 동작을 최적화한다.
 

 

 

 

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'프로그래밍 언어 > Java' 카테고리의 다른 글

비동기와 동기(Thread, synchronized, CompletableFuture)  (1) 2024.11.22
String, StringBuffer, StringBuilder? – 문자열 처리의 모든 것  (0) 2024.11.19
캡슐화와 은닉화의 차이 - 객체지향 프로그래밍(OOP)의 기본 원칙  (0) 2024.11.19
예외 처리 (Exception Handling) – 안정적인 코드를 작성하는 법  (4) 2024.11.18
자바 람다와 스트림 – 효율적인 코드 작성  (2) 2024.11.09
'프로그래밍 언어/Java' 카테고리의 다른 글
  • 비동기와 동기(Thread, synchronized, CompletableFuture)
  • String, StringBuffer, StringBuilder? – 문자열 처리의 모든 것
  • 캡슐화와 은닉화의 차이 - 객체지향 프로그래밍(OOP)의 기본 원칙
  • 예외 처리 (Exception Handling) – 안정적인 코드를 작성하는 법
pink_salt
pink_salt
유익함을 주는 개발자가 되도록 keep going
  • pink_salt
    KeepGoingForever
    pink_salt
  • 전체
    오늘
    어제
    • 분류 전체보기 (117)
      • Project (7)
      • WEB study (3)
        • WEB(Springboot) (10)
        • Git, GitLab (13)
        • Clean code (1)
        • FrontEnd (3)
      • Study (21)
        • Algorithm (19)
        • 면접 준비 (2)
      • Cloud Computing (2)
        • AWS (2)
      • 프로그래밍 언어 (35)
        • Java (29)
        • Python (0)
        • javascript (6)
      • 운영체제 (0)
        • Linux (0)
      • Database (4)
        • MongoDB (8)
        • SQL (8)
      • 애플리케이션 개발 (1)
        • Android (1)
      • AI (1)
        • Deeplearning (1)
        • machinelearning (0)
      • Daily (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Git
    Database
    오블완
    대외활동
    개념
    git branch
    코딩이러닝
    SWEA
    MongoDB
    자바
    BFS
    SW
    python
    언어
    티스토리챌린지
    무료IT교육
    IT교육
    codepresso
    gitlab
    코딩강의
    백준
    spring boot
    코드프레소
    빅오표기법
    Query
    객체지향
    dp
    mysql
    무료코딩교육
    Java
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
pink_salt
자바의 장단점을 알아보자.
상단으로

티스토리툴바