용어

자바(Java, programming language)란 무엇일까?

won5683 2024. 9. 22. 01:05
반응형

자바는 1995년에 출시된 고급 객체지향 프로그래밍 언어로, 선 마이크로시스템즈(Sun Microsystems)에서 개발하였으며, 이후 오라클 코퍼레이션(Oracle Corporation)에 인수되었습니다. 자바는 기업 규모의 애플리케이션, 모바일 앱, 웹 앱, 데스크탑 앱, 게임 등을 만드는 데 널리 사용됩니다.

자바의 객체지향 특성
자바는 기본적으로 객체지향 프로그래밍(OOP) 언어로, 이는 소프트웨어 설계를 함수나 논리보다는 데이터(객체)를 중심으로 구성한다는 것을 의미합니다. 자바는 객체를 정의하는 클래스를 사용하며, 각 객체는 클래스의 인스턴스를 나타냅니다. 이러한 모듈화된 구조는 코드의 재사용성, 확장성, 유지보수성을 향상시킵니다. 

 

자바의 핵심 객체지향 원칙에는 캡슐화(객체 내부를 숨기고 필요한 기능만 노출), 상속(기존 클래스를 확장해 새로운 기능 추가), 다형성(객체의 데이터 타입에 따라 다른 방식으로 처리 가능), 추상화(복잡한 구현 세부 사항을 숨김)가 포함됩니다. 객체지향 프로그래밍은 대규모 시스템을 더 쉽게 관리하고 업데이트할 수 있게 하며 코드의 재사용성을 촉진합니다.

플랫폼 독립성
자바의 가장 큰 장점 중 하나는 플랫폼 독립성입니다. 자바 코드를 작성하고 컴파일하면, 그 출력물은 특정 기계에 의존하지 않습니다. 대신 자바 코드는 바이트코드로 컴파일되며, 이 바이트코드는 자바 가상 머신(JVM)이 설치된 모든 장치에서 실행될 수 있습니다.

 

이는 “한 번 작성하면, 어디서나 실행된다”(WORA)는 자바의 모토로 요약됩니다. JVM은 대부분의 운영 체제에서 사용 가능하여 자바 애플리케이션이 다양한 플랫폼에서 수정 없이 배포될 수 있게 합니다.

 

이 기능은 자바를 여러 장치에서 애플리케이션을 실행해야 하는 기업 환경에서 이상적인 언어로 만듭니다.

견고성
자바는 자동 메모리 관리와 예외 처리 기능을 통해 신뢰성과 견고성을 강조합니다. 자바는 내장된 가비지 컬렉터를 사용하여 메모리를 자동으로 관리하므로, 개발자가 수동으로 메모리를 해제할 필요가 없습니다(C나 C++처럼). 

 

자바는 또한 강력한 예외 처리 시스템을 제공하여 런타임 오류를 감지하고 프로그램이 예기치 않은 문제를 우아하게 처리할 수 있도록 합니다. 

 

게다가 자바는 강타입 언어이므로 데이터 타입을 명시적으로 선언해야 하며, 이는 많은 종류의 버그 발생 가능성을 줄여줍니다. 이러한 안전성 및 신뢰성 중시는 자바가 중요한 애플리케이션에 적합한 언어가 되는 이유입니다.

자바의 멀티스레딩
자바는 멀티스레딩을 기본적으로 지원하여 프로그램 내에서 여러 스레드(프로세스의 가장 작은 단위)를 동시에 실행할 수 있게 합니다. 이는 자바 애플리케이션이 여러 작업을 동시에 수행하여 복잡하거나 시간이 많이 걸리는 프로세스의 성능과 응답성을 향상시킬 수 있음을 의미합니다. 

 

자바의 java.lang.Thread 클래스를 통해 스레드를 생성하고 제어할 수 있습니다. 멀티스레드 애플리케이션을 작성할 수 있는 기능 덕분에 자바는 대규모, 성능 집약적인 애플리케이션(예: 게임 엔진, 웹 서버, 실시간 시스템)에 적합합니다. 

 

또한 자바는 여러 스레드가 공유 자원에 접근할 때 발생하는 문제(경쟁 조건)를 방지하기 위한 동기화 메커니즘도 제공합니다.

자바의 보안 기능
자바는 보안을 고려하여 설계되었으며, 특히 네트워크 환경에서 강력한 선택입니다. 자바의 주요 보안 기능 중 하나는 자바 샌드박스로, 이는 웹 브라우저 내에서 실행되는 자바 애플릿(작은 자바 프로그램)이 파일 시스템에 접근하는 등 잠재적으로 위험한 작업을 수행하지 못하도록 제한합니다.

 

자바의 보안 관리자(Security Manager)는 자바 코드가 접근할 수 있는 시스템 자원을 제어하며, 자바는 암호화 라이브러리와 디지털 서명을 포함하여 안전한 데이터 전송을 지원합니다.

 

또한 바이트코드 검사기는 바이트코드가 JVM에서 실행되기 전에 안전하지 않은 작업을 수행하지 않는지 확인합니다.

고성능
자바는 인터프리터 언어임에도 불구하고 여러 기술을 통해 고성능을 달성합니다. Just-In-Time (JIT) 컴파일은 자바 코드의 일부를 런타임 시에 네이티브 기계어로 컴파일하여 성능을 향상시키며, 반복된 해석을 피할 수 있게 합니다. 

 

또한 JVM은 런타임 데이터를 기반으로 코드를 최적화하는 적응형 최적화 기능을 포함합니다. 자바는 C++과 같은 완전히 컴파일된 언어만큼 빠르지는 않지만, 성능과 이식성 사이의 균형을 맞춥니다. 

 

자바의 성능은 효율적인 메모리 관리와 고급 가비지 컬렉션 알고리즘을 통해 더욱 향상되며, 이는 메모리 누수를 최소화하고 사용 가능한 리소스를 최적화합니다.

동적이고 확장 가능한 특성
자바는 동적이고 확장 가능한 언어로, 기존 시스템을 깨지 않고 변경 및 추가 작업을 수행할 수 있습니다. 자바는 동적 링크 기능을 제공하여 라이브러리가 컴파일 시가 아닌 런타임에 로드될 수 있도록 합니다. 이러한 유연성 덕분에 애플리케이션을 전체적으로 다시 컴파일하지 않고도 쉽게 업데이트하거나 확장할 수 있습니다. 자바

 

 또한 리플렉션(reflection)을 지원하여 프로그램이 런타임에 객체의 구조를 검사하고 수정할 수 있게 합니다. 자바의 확장성은 또한 광범위한 프레임워크 및 라이브러리를 쉽게 통합할 수 있다는 점에서 나타나며, 최소한의 노력으로 자바 애플리케이션에 추가 기능을 제공할 수 있습니다.

Java SE (표준 에디션)
Java SE는 자바의 가장 널리 사용되는 에디션으로, 일반적인 데스크탑, 서버 측, 임베디드 애플리케이션을 개발하는 데 필요한 기본 라이브러리와 도구를 제공합니다. 

 

여기에는 입출력, 네트워킹, 자료 구조, 유틸리티와 같은 기본 라이브러리(예: java.lang, java.util, java.io)가 포함됩니다. Java SE는 또한 자바 개발 키트(JDK)를 제공하며, 여기에는 자바 컴파일러(javac), 런타임 환경(java), 그리고 javadoc과 같은 유틸리티 도구들이 포함되어 있습니다. 

 

Java SE는 다른 자바 에디션의 기초가 되며, 간단한 명령줄 도구에서 복잡한 엔터프라이즈 시스템에 이르기까지 대부분의 자바 애플리케이션의 기본 API로 사용됩니다.

Java EE (엔터프라이즈 에디션)
Java EE는 Java SE를 확장하여 대규모, 분산형, 다중 계층 애플리케이션을 개발하기 위한 API를 제공합니다. 여기에는 웹 개발을 위한 서블릿(Servlet)과 자바 서버 페이지(JSP)와 같은 프레임워크가 포함되며, EJB (Enterprise JavaBeans), JPA (Java Persistence API), 웹 서비스와 같은 엔터프라이즈 수준의 서비스를 지원합니다.

 

Java EE는 주로 금융, 전자상거래, 의료와 같은 대규모, 비즈니스 크리티컬 시스템을 개발하는 데 사용됩니다. Java EE는 트랜잭션 관리, 보안, 메시징과 같은 작업을 처리하기 위한 내장 도구를 제공하여 복잡한 비즈니스 애플리케이션 개발을 간소화합니다.

Java ME (마이크로 에디션)
Java ME는 자원이 제한된 장치(예: 휴대폰, PDA, 임베디드 시스템)용 애플리케이션을 개발하기 위해 설계된 자바 버전입니다. 이는 자바 SE 기능의 하위 집합을 제공하며, 처리 능력과 메모리가 제한된 소형 장치에 최적화되어 있습니다. 

 

Java ME 애플리케이션은 피처폰, 스마트 카드 및 기타 사물 인터넷(IoT) 장치에서 자주 사용됩니다. Java ME는 모바일 애플리케이션 개발을 위한 사용자 인터페이스 요소, 지속적 저장소, 네트워크 연결 기능을 포함하는 라이브러리와 API를 제공합니다. 

 

스마트폰의 대중화로 인해 Java ME의 인기는 감소했지만, 여전히 일부 임베디드 시스템 및 IoT 애플리케이션에서 유효합니다.

JavaFX
JavaFX는 데스크탑 애플리케이션 및 인터넷 애플리케이션에 매력적인 사용자 인터페이스를 구축하는 데 사용되는 현대적이고 풍부한 클라이언트 플랫폼입니다. 

 

이는 이전의 스윙(Swing) 프레임워크에 대한 대안으로, 2D 및 3D 그래픽, 오디오 및 비디오를 지원하는 더 정교한 도구를 제공합니다. JavaFX 애플리케이션은 FXML이라는 XML 기반 언어를 사용하여 빌드되며, CSS와 유사한 스타일시트를 통해 스타일을 지정할 수 있습니다. 

 

JavaFX는 스윙을 대체할 표준 GUI 라이브러리로 설계되었으며, 비디오 게임이나 그래픽 도구와 같이 더 인터랙티브하고 멀티미디어 중심의 사용자 경험이 필요한 애플리케이션에서 자주 사용됩니다.

자바 개발 키트(JDK)
자바 개발 키트(JDK)는 자바 애플리케이션을 개발하는 데 사용되는 개발 환경입니다. JDK에는 자바 코드를 컴파일하고 실행하며 디버깅하는 데 필요한 모든 도구가 포함되어 있습니다.

 

JDK의 가장 중요한 구성 요소는 자바 컴파일러(javac)로, 소스 코드를 바이트코드로 변환하며, 자바 런타임 환경(JRE)으로, 자바 프로그램을 실행하는 데 필요한 라이브러리와 JVM을 제공합니다.

 

JDK는 또한 javadoc과 같은 문서 생성 도구와 자바 클래스와 리소스를 JAR 파일로 패키징하는 jar 유틸리티를 포함합니다. JDK는 다양한 플랫폼에 맞춰 제공되며, 자바의 진정한 플랫폼 독립성을 가능하게 합니다.

자바 런타임 환경(JRE)
자바 런타임 환경(JRE)는 자바 애플리케이션을 실행하기 위해 필요한 JDK의 일부입니다. JRE는 자바 가상 머신(JVM)과 필수 라이브러리를 포함하지만, 컴파일러와 같은 개발 도구는 포함하지 않습니다.

 

JRE는 미리 컴파일된 자바 프로그램을 실행하는 데 필요한 모든 것을 제공하며, 자바를 지원하는 모든 장치나 플랫폼에서 실행될 수 있습니다.

 

사용자들은 일반적으로 자바 애플리케이션을 실행하기 위해 JRE를 설치하며, 개발자는 개발 및 실행을 위해 JDK를 설치합니다. JRE는 자바 애플리케이션이 다양한 운영 체제와 환경에서 일관되게 실행되도록 보장합니다.


자바 가상 머신(JVM)
자바 가상 머신(JVM)은 자바의 플랫폼 독립성의 핵심 구성 요소입니다. 자바 코드는 컴파일되면 바이트코드로 변환되며, 이 바이트코드는 JVM에 의해 해석되어 실행됩니다.

 

JVM은 하드웨어 및 운영 체제의 구체적인 세부 사항을 추상화하여, 자바 애플리케이션이 JVM을 지원하는 모든 플랫폼에서 실행될 수 있게 합니다. 또한, JVM은 자동 메모리 관리(가비지 컬렉션)를 통해 메모리 할당 및 해제를 관리하며, 런타임 최적화 기능(예: JIT 컴파일)을 제공하여 바이트코드를 네이티브 기계어로 변환하여 실행 속도를 높입니다.

 

JVM은 자바 코드가 플랫폼별 요구 사항을 준수하도록 보장하며, 보안 처리도 담당합니다.

자바의 객체지향 원칙
자바의 객체지향 프로그래밍(OOP) 모델은 네 가지 핵심 원칙을 중심으로 구성됩니다: 캡슐화(데이터와 해당 데이터를 조작하는 메서드를 하나로 묶음), 상속(기존 클래스를 기반으로 새로운 클래스를 정의), 다형성(객체를 부모 클래스의 인스턴스로 취급할 수 있으며, 메서드의 동작은 실제 객체에 따라 달라짐), 추상화(외부에 필요한 부분만 노출). 

 

객체지향 프로그래밍은 기존 코드를 재사용할 수 있게 하며, 모듈화가 가능하고 대규모 소프트웨어 시스템의 유지 보수성을 개선합니다. 자바에서는 모든 객체가 클래스의 인스턴스이며, 클래스는 상속을 통해 속성과 행동을 물려받아 계층적 관계를 형성할 수 있습니다.

반응형