CS/JAVA

JAVA(1)

hyunji1109 2025. 1. 14. 21:53

 

Java
플랫폼 독립적인 객체지향 프로그래밍 언어로, 한 번 작성하면 어디서든 실행할 수 있다.
안정성과 풍부한 라이브러리를 바탕으로 웹, 모바일, 데스크톱 등 다양한 분야에서 활용된다.

 

 

1. JAVA

자바의 특징

  • 플랫폼 독립성
    • 자바 프로그램은 JVM에서 실행되므로 운영체제에 관계없이 작동한다.
      • "Write Once, Run Anywhere"을 목표로 한다.
  • 객체지향 프로그래밍(OOP)
    • 자바는 클래스와 객체를 기반흐로하는 객체지향언어이다. 
    • 객체지향 개념(상속, 캡슐화, 다형성, 추상화)을 완전히 지원한다.
  • 메모리 관리
    • 가비지 컬렉터(Garbage Collector)가 메모리를 자동으로 관리한다.
    • 프로그래머가 직접 메모리를 관리할 필요가 없다.
  • 멀티스레딩 지원
    • 멀티스레드 프로그래밍을 기능을 제공한다.
    • 동시성과 병렬처리를 효율적으로 구현할 수 있다.
  • 풍부한 라이브러리
    • 표준 라이브러리와 오픈 소스 생태계가 강력하다.

 

 

+) 객체지향 프로그래밍(OOP)

자바는 객체지향 프로그래밍의 핵심 개념을 기반으로 설계된다.

  • 상속
    • 기존 클래스의 속성과 메서드를 재사용하면서 확장 가능합니다.
    • class SubClass extends SuperClass
  • 캡슐화
    • 클래스 내부의 데이터(필드)를 외부에서 접근하지 못하도록 보호합니다. 
    • private 필드와 getter/setter 메서드 사용.
  • 다형성
    • 동일한 메서드 이름으로 다양한 동작을 구현합니다.
    • 메서드 오버로딩, 오버라이딩.
  • 추상화
    • 필수적인 정보만 노출하고 불필요한 구현은 숨깁니다.
    • abstract 클래스와 인터페이스.

 

장점

  • 안정성과 신뢰성
    • 대규모 애플리케이션 개발에 적합하다.
  • 보안
    • JVM과 자바 보안 매커니즘으로 실행 환경에서 높은 안정성을 제공한다.
  • 광범위한 생태계
    • Spring, Hibernate, Maven, Gradle 같은 툴과 프레임워크로 생산성이 높다.

 

단점

  • 높은 메모리 사용량
    • JVM으로 인해 메모리 소모가 많아질 수 있다.
  • 상대적으로 느린 실행 속도
    • 인터프리터와 가비지 컬렉션이 실행 속도를 조금 저하시킬 수 있다.

 

자바의 컴파일 과정

① 자바 프로그램이 실행되면 JVM은 OS로부터 프로그램이 필요로 하는 메모리를 할당받는다.

② 자바 파일(.java 파일)이 자바 컴파일러에 의해 자바 바이트코드(.class 파일)로 변환된다.

③ 클래스 로더를 통해 자바 바이트코드(.class 파일)를 JVM으로 필요한 시점에 로딩한다.

④ 해석된 바이트코드는 런타임 데이터 영역에 배치되어 수행이 이루어지게 된다.

⑤ 실행과정 속에서 JVM은 필요로 하면 GC(Garbage Collection)와 같은 관리 작업을 수행한다.

 

 


 

2. JVM (Java Virtual Machine)

자바 프로그램 실행을 위한 가상 환경이다.
자바의 플랫폼 독립성을 가능하게 하는 핵심 요소이다.

 

주요 구성 요소

  • 클래스 로더(Class Loader)
    • 필요한 클래스를 메모리에 로드한다.
  • 바이트코드 검증기(Bytecode Verifier)
    • 바이트코드의 유효성을 검증해 보안을 유지한다.
  • 인터프리터(Interpreter) 및 JIT(Just-In-Time) 컴파일러
    • 바이트코드를 실행하거나 기계어로 변환하여 성능을 최적화한다.
  • 메모리 관리
    • 힙(Heap)과 스택(Stack)을 사용해 메모리를 관리한다.

 

 

3. 가비지 컬렉션 (Garbage Collection)

자바는 메모리 관리를 자동화하여 개발자가 메모리를 해제하지 않는다.
JVM의 가비지 컬렉터가 더 이상 참조되지 않는 객체를 찾아 제거한다.
힙 영역에서 메모리를 정리하여 공간을 확보한다.

 

장점

  • 메모리 누수를 방지한다.
  • 개발 생산성을 높인다.
  • 프로그래머가 직접 메모리 관리를 처리하지 않아도 된다.

 

단점

  • 가비지 컬렉션 과정에서 성능이 잠시 저하된다.

 


 

 

JAVA vs Python

  자바(Java) 파이썬(Python)
언어 유형 정적 타입 언어 (컴파일 시 데이터 타입 체크) 동적 타입 언어 (실행 중 데이터 타입 결정)
속도 컴파일 후 실행되므로 속도가 더 빠름 인터프리터 방식으로 실행되므로 자바보다 느림
플랫폼 독립성 JVM을 통해 어디서나 실행 가능 인터프리터만 설치하면 실행 가능
용도 대규모 엔터프라이즈 애플리케이션
웹 개발
모바일(Android)
데이터 분석
인공지능
웹 개발(Django, Flask)

 

 

JAVA vs C언어

  자바(Java) C언어(C)
언어 유형 객체지향 언어 절차지향 언어
속도 JVM 사용으로 상대적으로 느림 직접 컴파일된 기계어로 빠른 실행 속도
메모리 관리 자동 가비지 컬렉션 수동 메모리 관리 (malloc, free 사용)
플랫폼 독립성 JVM을 통해 어디서나 실행 가능 플랫폼에 종속적 (코드를 플랫폼별로 수정해야 할 수도 있음)
포인터 포인터를 사용하지 않음 (메모리 접근 간접화) 포인터를 사용해 직접 메모리 주소를 조작 가능
용도 웹, 모바일, 엔터프라이즈 애플리케이션 개발 시스템 프로그래밍, 임베디드 시스템, 운영체제 개발