Java란?
1995년 썬 마이크로시스템즈에서 발표한 프로그래밍 언어이다.
C++에 비해 메모리와 CPU를 많이 사용해 윈도우 프로그래밍 언어로 부적합했지만, 인터넷이 활성화되며 웹 애플리케이션 구축 언어로 급부상
초기의 자바는 가전 제품에 탑재할 언어로 개발되었지만, 현재는 엔터프라이즈 기업환경에서 실행되는 서버 애플리케이션을 개발하는 중추적인 언어
❓ 프로그래밍 언어란?
사람이 컴퓨터에 명령을 내릴 때에도 언어가 필요하지만 컴퓨터가 이해할 수 있는 언어는 기계어(machine language)이다. 0과 1로 이루어진 이진 코드이기 때문에 사람이 이해하기 어렵기 때문에 사람의 언어와 기계어의 다리 역할을 하는 프로그래밍 언어가 필요하다!
프로그래밍 언어는 고급 언어와 저급 언어로 구분된다.
저급 언어는 기계어에 가까운 언어로 사람이 쉽게 이해하기 어렵고 까다롭다. 어셈블리어가 여기에 속한다.
고급 언어는 사람이 쉽게 이해할 수 있는 언어지만 컴퓨터가 바로 이해할 수 없기 때문에 컴파일(compile)과정을 통해 기계어로 변환해 컴퓨터가 사용한다. 이 언어로 작성된 내용을 소스(source), 소스가 컴파일러(compiler)라는 소프트웨어에 의해 기계어로 변환된 후 컴퓨터에서 실행된다.
일반적으로 프로그래밍 언어라고 말하는 언어들이 여기 속한다(자바, C, C++ 등).
자바의 특징
1️⃣ 높은 이식성
이식성이란? 서로 다른 실행 환경의 시스템 간에 프로그램을 옮겨 실행할 수 있는 것!
윈도우에서 실행하는 프로그램이 리눅스에서도 실행할 수 있다면 이식성이 높다
다른 실행 환경에서 실행하려면 대부분의 프로그램은 소스 파일을 수정하고, 재 컴파일 과정을 거쳐야 하지만 자바로 개발된 프로그램은 JRE(Java Runtime Environment)가 실행된 모든 운영체제에서 실행이 가능하다.
2️⃣ 객체 지향 언어(OOP, Object Oriented Programming)
프로그램을 개발하는 기법. 부품에 해당하는 객체를 먼저 만들어 하나씩 조립해 전체 프로그램을 완성하는 기법이다
자바는 100% 객체지향 언어로, 처음부터 객체를 고려해 설계되었기 때문에 캡슐화, 상속, 다형성을 완벽하게 지원한다
3️⃣ 함수형 스타일 코딩
최근 함수형 프로그래밍(Functional programming)이 대용량 데이터의 병렬 처리와 이벤트 지향 프로그래밍에 적합하기때문에 다시 부각되고 있는데, 자바는 이를 위해 람다식(Lambda Expressin)을 자바 8부터 지원한다.
람다식을 사용하면 필터링, 매핑, 집계 등의 처리가 쉽고 코드가 간결해진다는 장점이 존재한다.
4️⃣ Garbage Collector
C++은 메모리에 생성된 객체를 개발자가 직접 코드를 작성해 제거해야 하지만 자바는 메모리를 직접 관리한다. 객체를 생성할 때 자동으로 메모리 영역을 찾아 할당하고, 사용이 끝나면 Garbage Collector를 실행해 자동으로 사용하지 않는 객체를 제거해준다.
개발자는 메모리 관리 대신 코드 작성에 집중할 수 있다는 장점이 존재한다
5️⃣ 다양한 애플리케이션을 개발 가능
자바는 다양한 운영체제에서 실행되는 프로그램을 개발 할 수 있다. 콘솔 프로그램, 서버용 웹 애플리케이션, 안드로이드 앱 등 모든 곳에서 실행되는 프로그램을 개발할 수 있다
6️⃣ 멀티 스레드(Multi-Thread)
하나의 프로그램이 동시에 여러 작업을 처리하거나 대용량 작업을 빠르게 처리하기 위해 병렬처리를 하려면 멀티 스레드 프로그래밍이 필요하다. 자바는 스레드 생성 및 제어와 관련된 라이브러리 API를 제공하기 때문에 실행되는 운영체제와 관련없이 멀티 스레드를 쉽게 구현 가능하다
7️⃣ 동적 로딩(Dynamic Loading)
자바 애플리케이션은 여러 객체가 서로 연결되어 실행되는데 객체는 클래스로부터 생성된다. 애플리케이션이 실행될 때 모든 객체가 생성되지 않고, 객체가 필요한 시점에 클래스를 동적 로딩해 객체를 생성한다.
유지보수가 발생해도 해당 클래스만 수정하면 되기 때문에 전체를 컴파일 하지 않아도 되기 때문에 쉽고 빠르게 진행이 가능하다
8️⃣ 오픈소스(Open Source) 라이브러리
자바는 오픈소스 언어기 때문에 자바에서 사용하는 라이브러리 또한 오픈소스가 많다
고급 기능을 작성하려면 시간과 노력이 많이 소요되지만 검증된 오픈소스를 사용하면 개발 기간을 단축하고 안정성이 높은 애플리케이션을 쉽게 개발할 수 있다는 장점이 존재한다
📚 Reference
신용권, 『이것이 자바다』, 한빛미디어(2015)
'Programming > Java' 카테고리의 다른 글
[Java] Arrays.sort(), Collections.Sort() 속도 비교 (0) | 2021.03.04 |
---|---|
[Java] 어노테이션(Annotation) (0) | 2021.03.01 |
[Java] Pattern, Matcher Class 사용법과 메소드 정리 (8) | 2021.01.21 |
[Java] 정규식 문법 정리(Regex) (2) | 2021.01.20 |
[Java] JVM, JDK, JRE의 차이 (0) | 2021.01.01 |