본문 바로가기
Java & Kotlin

Java의 특징

by kiwi_wiki 2021. 1. 15.

자바(Java)

객체 지향 프로그래밍 언어 중 하나로 썬 마이크로시스템즈에서 처음 자바 언어를 발표했다. 초기의 자바는 가전 제품에 탑재할 프로그래밍 언어로 개발되었지만, 지금은 스마트폰을 비롯, 각종 장비와 데스크톱에서 실행되는 애플리케이션을 개발하는 중추적인 언어가 되었다.

 

 

특징

이전 버전과의 호환성

수년 전의 코드를 최신 버전의 Java에서도 실행할 수 있다는 점에서 거의 독보적이다. 몇년이 지난 코드라도 JVM에서 실행된다.

 

지속적 개선

플랫폼과 언어의 발전. Java는 2017년(Java 9)부터 6개월마다 새로운 버전이 출시되어 꾸준히 변경되고 개선되어 왔다. 새로운 구문을 실험하고 개발자로부터 피드백을 받은 다음, Java 사용자들을 위한 실용화된 새로운 기능을 표준화한다.

 

이식성이 높은 언어

이식성 : 서로 다른 실행환경을 가진 시스템 간에 프로그램을 옮겨 실행할 수 있는 것

자바 언어로 개발된 프로그램은 소스 파일을 다시 수정하지 않아도, 자바 실행환경(JRE: Java Runtime Environment)이 설치되어 있는 모든 운영체제에서 실행가능하다. 

 

객체 지향 언어

객체지향 프로그래밍(Object Oriented Programming, OOP) : 프로그램을 개발하는 기법으로 부품에 해당하는 객체들을 먼저 만들고, 이것들을 하나씩 조립 및 연결해서 전체 프로그램을 완성하는 기법

자바는 100% 객체지향 언어이다. 객체를 만들기 위해 설계도인 클래스를 작성해야 하며 객체와 객체를 연결해 목적에 맞는 프로그램을 만들어낸다. 자바는 작은 프로그램이라도 객체를 만들어 사용하게 된다.

처음부터 객체를 고려해 설계되었기 때문에 객체지향 언어가 가져야 할 캡슐화, 상속, 다향성 기능을 지원한다.

 

함수적 스타일 코딩 지원

대용량의 데이터 병렬 처리와 이벤트 지향 프로그래밍을 위해 적합하기 때문에 최근 들어 다시 주목받고 있다.

람다식을 자바8 부터 지원함. 람다식을 사용하면 컬렉션의 요소를 필터링, 매핑, 집게처리를 하는 것이 쉬워지고 코드가 간결해진다.

 

메모리 자동 관리

다른 언어와 달리 개발자가 직접 메모리에 접근할 수 없도록 설계되어있으며 메모리는 자바가 직접 관리한다. 객체 생성 시 자동적으로 메모리 영역을 찾아서 할당하고, 사용이 완료되면 쓰레기 수집기 (Garbage Collector)를 실행시켜 자동으로 사용하지 않는 객체를 제거해준다. 

덕분에 개발자는 메모리 관리의 수고를 덜고 코드 작성에 집중할 수 있다.

 

다양한 애플리케이션 개발

윈도우, 리눅스, 유닉스 등 다양한 운영체제(OS)에서 실행되는 프로그램을 개발 할 수 있다. 

 

멀티쓰레드 쉽게 구현 가능

하나의 프로그램이 동시에 여러 작업을 처리해야 하는 경우와 대용량 작업을 빨리 처리하기 위해 서브 작업으로 분리해서 병렬처리하려면 멀티쓰레드 프로그래밍이 필요함. 자바는 쓰레드 생성 및 제어와 관련된 라이브러리 API를 제공하고 있기 때문에 실행되는 운영체제에 관계없이 머리쓰레드를 쉽게 구현 가능하다.

 

동적 로딩(Dynamic Loading) 지원

자바 애플리케이션은 여러개의 객체가 서로 연결되어 실행되는데, 이 객체들은 클래스로부터 생성된다.

애플리케이션이 실행될 때 모든 객체가 생성되지 않고, 객체가 필요한 시점에 클래스를 동적로딩해서 객체를 생성한다.

개발 완료 후 유지보수가 발생하더라도 해당 클래스만 수정하면 되므로 전체 애플리케이션을 다시 컴파일 할 필요가 없으므로 유지보수를 쉽고 빠르게 진행할 있다.

 

오픈 소스 라이브러리가 풍부

오픈소스 언어이므로 자바 프로그램에서 사용하는 라이브러리 또한 오픈소스가 많다. 고급 기능을 구현하는 코드를 직접 작성할 경우 시간과 노력이 필요하고 실행 안정성을 보장할 수 없지만 검증된 오픈소스 라이브러리를 이용하면 개발기간을 단축하며 안정성이 높은 애플리케이션을 쉽게 개발할 수 있다.

 

빌드 도구 및 종속 요소 관리

Maven과 Gradle을 사용하면 애플리케이션을 간편하게 빌드하고 배포할 수 있을 뿐만 아니라 필요한 모든 종속 요소를 포함하여 표준 방식으로 프로젝트를 쉽게 설정할 수 있다.

 

JUnit 및 자동화된 테스트

Java 세계에서 가장 일반적인 자동화된 테스트 프레임워크로서, 모든 언어에 대한 최신 테스트 프레임워크 역시 지금은 당연하게 여겨지는 JUnit의 아이디어를 기반으로 한다. Java 커뮤니티의 자동화된 테스트 문화는 이 하나의 라이브러리 덕분에 성장했다.

 

속도가 느림

한 번의 컴파일링으로 실행 가능한 기계어가 만들어지지 않고 JVM에 의해 기계어로 번역되고 실행하는 과정을 거치기 때문에 완전한 기계어보다는 속도가 느리다. 그러나 바이트 코드를 기계어로 변환해주는 JIT 컴파일러 같은 기술 적용으로 JVM의 기능이 향상되어 속도의 격차가 많이 줄었다.

 

예외처리가 불편

다른 언어들과 달리 프로그램 실행 시 발생할 수 있는 예외(Exception)들을 개발자가 직접 선언하여 처리해야 한다. 그렇지 않으면 컴파일이 되지 않는다.

 

언어 기능

  • Collections API
  • 컬렉션용 factory 메소드
  • Streams API
  • 람다 식
  • Optional
  • java.time
  • 어노테이션
  • var
728x90
반응형

'Java & Kotlin' 카테고리의 다른 글

PriorityQueue (우선순위 큐)  (0) 2023.07.07
Kotlin?  (0) 2022.08.28