본문 바로가기

프로그래밍 언어/Java 자바

[Java 자바] 1. Java의 기본 정보 및 특징

반응형

Java란?

  • Java는 프로그래밍 언어 중 하나이고 1995년에 Sun Microsystems(James Gosling 필두로)에서 개발되었습니다. 
    • 2009년에 오라클(Oracle)이 인수.
  • C와 C++ 언어의 단점을 보완하고자 만들었습니다. 
    • C와 C++는 다른 CPU 특성에 따라 코드를 따로 맞춰 컴파일 해야 합니다. 모든 CPU에 대해 만드려면 개발자에게 많은 시간과 비용이 요구됩니다.
  • Java 관련 최신 정보는 https://dev.java/ 여기서 확인 가능하니 Java 개발자를 목표로 한다면 꼭 한번씩 확인해봅시다. 

Java의 특징

  • 객체 지향 프로그래밍 언어입니다. (Object-oriented Programming | OOP)
    • 프로그램은 코드와 데이터로 구성. 
    • 절차 지향 (Process-oriented): 코드를 중심으로 하는 프로그래밍 기법.
    • 객체 지향 (Object-oriented): 데이터를 중심으로 하는 프로그래밍 기법.
  • 플랫폼 독립 언어입니다. (Platform Independent)
    • Java 코드는 다양한 플랫폼(Windows, macOS, Linux 등등)에서 동작할 수 있습니다.
    • 컴파일러가 Java 코드를 컴파일하면 byte코드로 변환시킵니다. 그리고 이 byte코드가 다양한 플랫폼에서 구동할 수 있도록 합니다. 
    • C 프로그래밍에서 기초타입 int 데이터는 32-bit 체제에서는 2 bytes, 64-bit 체제에서는 4 bytes의 메모리를 차지하지만, Java 프로그래밍에서는 32-bit든, 64-bit든 동일하게 4 bytes의 메모리를 차지합니다. 따라서 개발자에게 byte overflow나 slicing 의 자유를 줍니다.  
    • Write Once, Run Anywhere (WORA)라고도 표현을 한다. 한번 작성하면 어디서든(플랫폼) 구동. 
  • 가비지 컬렉션를 통한 메모리 관리. (Garbage Collection | GC)
    • 가비지 컬렉션(GC)은 런타임(프로그램 실행 중)에 메모리 상에서 사용(참조)되지 않고 있는 객체를 자동으로 식별하고 메모리 할당 해제를 해줍니다.
    • C언어 같은 경우 free(), C++언어 같은 경우 delete() 함수로 개발자가 수동으로 해제를 해줘야하지만 Java는 GC가 자동으로 해주어 메모리 관리가 수월합니다.
  • 보안에 강합니다. (Secure)
    • Java는 이러한 특성들로 인해 네트워크분산 환경에서 사용되고 있습니다.  
      • 직접적인 포인터(Pointer) 사용 X
      • 보안 관리자 (Security Manager): 로컬 디스크 읽기 및 쓰기와 같이 클래스가 액세스할 수 있는 자원을 결정해줍니다.
      • Java 프로그램은 가상 머신(Java Virtual Machine | JVM)내에서 동작합니다.
      • Java 런타임 환경 (Java Run-time Environment | JRE)은 Java 클래스를 동적으로 JVM에 올릴 수 있는 클래스 로더를 포함하고 있습니다. 이는 로컬에 존재하고 있는 패키지와 네트워크에서 가져온 패키지를 분리하여 보안을 향상 시킬 수 있습니다.
  • 멀티스레드 (Multi-threaded) 기능을 가집니다.
    • 스레드(Thread)는 하나의 프로그램 실행 흐름이고 프로세스 내부에 존재합니다. 프로세스는 최소 하나 이상의 스레드를 가지고 있습니다. 
    • Java는 멀티스레딩 기능을 제공합니다. 따라서 프로그램이 둘 이상의 작업을 동시에 실행하여 CPU 효율 최대로 사용할 수 있도록 도와줍니다. 
  • 동적 로딩 (Dynamic Loading)을 합니다.
    • 정적 로딩 (Static Loading): 실행하기 전에 메인 메모리에 프로그램 전체를 올리는 과정.
    • 동적 로딩 (Dynamic Loading): 루틴(routine)들은 호출 되기 전까지 메인 메모리에 올리지 않고 디스크에 저장해놓습니다. 디스크에 재호출이 가능한 형식으로 저장하여 필요할 때만 호출하여 사용할 수 있고 새 루틴들이 바로 메인 메모리에 올라가지 않아도 되며 방대한 코드를 다룰 때 효율적으로 다룰 수 있습니다.
    • 루틴 (routine): 사용자 프로그램과 입출력 작업의 실행을 위한 코드의 단위. 메인 루틴 (Main routine)과 서브 루틴 (Sub-routine)으로 나뉩니다. 
반응형