728x90
반응형
자바(Java)는 객체 지향적이며, 이식성이 뛰어나고, 안정성과 보안성이 높은 프로그래밍 언어입니다.
자바의 역사
자바의 역사는 1991년에 썬 엔지니어들에 의해 고안된 오크(Oak)라는 언어에서 시작되었습니다.
자바의 원래 목표는 가전제품에 탑재될 소프트웨어를 만드는 것이었습니다.
자바란
자바는 객체 지향 프로그래밍 언어로 대규모 소프트웨어 개발을 하고 있습니다.
자바는 주로 서버 프로그래밍, 안드로이드 앱 개발, 웹 프로그래밍, 게임 개발, 빅데이터 등 다양한 분야에서 사용됩니다.
자바로 소프트웨어를 개발할 때의 가장 이점 중 하나는 이식성입니다.
자바는 다양한 운영체제와 하드웨어에서 동작하며, 가상 머신(Virtual Machine)을 사용하여 이식성이 높은 언어입니다.
자바의 주요 목표는 "한 번 작성하면 어디에서나 실행할 수 있다"입니다.
C와 자바의 차이점
C언어는 순차적으로 읽어가는 절차 지향적인 언어이고, Java는 클래스를 사용하고 설계적인 측면이 강조되는 객체지향 언어입니다. 그리고 C는 작성된 프로그램이 특정 OS와 아키텍처에 맞게 컴파일되기 때문에 실행 속도가 Java보다 빠른 반면, Java는 한 번 작성하면 어디서든 실행이 가능하다는 원칙을 가져, Java로 작성된 프로그램은 JVM 위에서 인터프리터 방식으로 실행되어 비교적 속도가 느립니다. 그리고 C는 메모리를 직접 관리해야 하고, Java에서는 가비지 컬렉션이라는 매커니즘이 자동으로 불필요한 메모리를 제거해 줍니다.
자바언어의 특징
- 이식성[운영체제 독립성]
- 자바 실행환경이 설치되어 있는 모든 운영체제에서 실행이 가능합니다.
- 자바는 운영체제나 하드웨어가 아닌 JVM 하고만 통신하고, JVM이 자바 응용 프로그램으로부터 전달받은 명령을 해당 운영체제가 이해할 수 있도록 변환하여 전달합니다.
- 자바로 작성된 프로그램은 운영체제에 독립적이지만, JVM은 운영체제에 종속적이어서 썬에서는 여러 운영체제에서 설치할 수 있는 서로 다른 버전의 JVM을 제공하고 있습니다.
- 객체지향 프로그래밍 (OOP)
- 자바는 객체지향개념의 특징인 상속, 캡슐화, 다형성이 잘 적용된 순수한 객체지향 언어입니다.
- 객체지향 프로그래밍이란, 프로그램을 개발하는 기법으로 부품에 해당하는 객체들을 만들고, 하나씩 조립하여 전체 프로그램을 완성하는 것을 말합니다.
- 객체를 생성하기 위해 클래스라는 설계도를 작성하고, 객체 간의 상호작용으로 목적에 맞는 프로그램을 구현합니다.
- 객체지향 언어는 코드의 재사용성, 유지 보수성, 확장성 등의 장점을 제공합니다.
- 자동 메모리 관리 (Garbage Collection)
- 자바로 작성된 프로그램이 실행되면, 가비지 컬렉터가 자동적으로 메모리를 관리해 주기 때문에 프로그래머는 메모리를 따로 관리하지 않아도 됩니다.
- 객체 생성 시 자동으로 메모리 영역을 찾아서 할당하고, 사용이 완료되면 가비지 컬렉터를 실행시켜 자동으로 사용하지 않는 객체를 제거합니다.
- 가비지 컬렉터가 없다면 프로그래머가 사용하지 않는 메모리를 체크하고 반환하는 일을 수동적으로 처리해야 합니다.
- 멀티스레딩 지원 (Multithreading)
- 자바는 멀티스레드 프로그래밍을 지원합니다. 멀티스레드를 사용하여 자원을 효율적으로 활용하고, 동시성 프로그래밍을 가능하게 합니다.
- 운영체제에 따라 멀티 스레드를 구현하는 방법이 다르지만, 자바는 스레드 생성 및 제어와 관련된 라이브러리 API를 제공하므로 운영체제와 상관없이 멀티 스레드를 쉽게 구현할 수 있습니다.
- 그리고 여러 스레드에 대한 스케쥴링을 자바 인터프리터가 담당하게 됩니다.
- 동적 로딩 (Dynamic Loading)
- 자바는 동적 로딩을 지원하기 때문에 실행 시에 모든 클래스가 로딩되지 않고 필요한 시점에 클래스를 로딩하여 사용할 수 있다는 장점이 있습니다.
- 그 외에도 일부 클래스가 변경되어도 전체 애플리케이션을 다시 컴파일하지 않아도 되며, 애플리케이션의 변경사항이 발생해도 비교적 적은 작업만으로도 처리할 수 있는 유연한 애플리케이션을 작성할 수 있습니다.
- 동적 로딩을 사용하여 필요한 클래스만 로딩하고, 메모리를 효율적으로 사용할 수 있습니다.
- 컴파일 언어, 인터프리터 언어
- 자바는 컴파일 언어와 인터프리터 언어의 특성을 모두 갖고 있습니다.
- 컴파일 단계에서 자바는 전체 코드를 한 번에 번역하여 이진 파일인. class 클래스 파일로 만듭니다.
- 이 클래스 파일은 시스템에 무관한 이진 파일로, 자바가 컴파일 언어에 가까운 속도와 시스템 독립성을 얻게 해 줍니다.
- 자바 런타임은 자바 가상 머신(JVM)의 자바 인터프리터를 이용하여 클래스 파일을 한 줄씩 인터프리트 하면서 실행합니다.
- 이 과정에서 자바 인터프리터는 자바 바이트 코드로 작성된 실행 프로그램을 한 줄씩 읽으며 컴퓨터가 이해할 수 있는 2진 코드로 번역한 후 실행시킵니다.
- 분산 네트워크
- 자바에는 TCP/IP 라이브러리가 기본적으로 포함되어 있고, HTTP 프로토콜을 지원합니다.
- 풍부한 오픈소스 라이브러리
- 자바는 프로그램에서 사용하는 오픈소스 라이브러리의 양이 풍부합니다.
- 검증된 오픈소스 라이브러리를 사용하면 프로그램을 다시 컴파일할 필요가 없다.
자바의 단점
- 속도 문제
- C나 C++과 같은 네이티브 언어에 비해 자바의 속도가 느릴 수 있습니다.
- 자바는 JVM(Java Virtual Machine)에서 실행되기 때문에, 코드의 실행 시간이 길어질 수 있습니다.
- 바이트 코드를 기계어로 변환해 주는 JIT컴파일러와 같은 기술 적용으로 JVM 기능이 향상되어 속도문제가 개선되었습니다.
- 메모리 관리
- 자바는 가비지 컬렉션(Garbage Collection)을 사용하여 자동으로 메모리를 관리합니다.
- 하지만, 가비지 컬렉션으로 인해 실행 시간이 느려질 수 있고, 메모리 누수 등의 문제가 발생할 수 있습니다.
- 복잡한 구조
- 자바는 객체 지향 언어이기 때문에, 초기 학습 시 복잡한 구조를 이해해야 합니다.
- 또한, 다른 언어보다 코드 길이가 길어지는 경향이 있어서, 개발자가 코드를 작성하는 시간이 더 오래 걸릴 수 있습니다.
- 자바는 예외 처리가 잘 되어있지만, 개발자가 직접 예외처리를 설정해 주어야 번거로움이 있습니다.
- 자원 소모
- 자바는 자원을 많이 소모할 수 있습니다.
- 특히, GUI(Graphical User Interface)와 같은 그래픽 처리 작업에서는 자원 소모가 크게 증가할 수 있습니다.
728x90
반응형
'Java[자바] > Basic[기본]' 카테고리의 다른 글
자바 코드에서 주의할 점(2) (0) | 2023.03.28 |
---|---|
자바 코드에서 주의할 점(1) (0) | 2023.03.27 |