새소식

반응형
개발 (Development)/┣Java

자바를 사용해야 하는 이유 (자바의 특징, 장단점)

  • -
반응형

1. Introduction

자바는 1995년 제임스 고슬링에 의해 개발된 프로그래밍 언어이다. 지금까지 18번째 버전이 출시될 정도로 오랫동안 사용되고 유지보수가 되어온 대표적인 언어이다. 현재 오라클에 인수되어 설치하려면 오라클 홈페이지에 가서 다운받아야 한다.

자바


2. Features

자바의 특징이라고 하면 가장먼저 Java Virtual Machine (JVM)이라고 볼 수 있다. 일반적으로 코드의 작동 과정코드작성 - 어셈블리어 변환 - 기계어 변환 - 실행파일 생성으로 진행 (e.g. C, C++)된다. 여기서 원시 코드를 어셈블리어로 바꿔주는 것을 컴파일러라고 하는데, 컴파일 역시 여러 과정으로 나뉜다.

컴파일 과정에서 원시 코드를 분석한 뒤 생성되는 것을 Intermediate Code (중간 코드, 바이트코드)라고 하는데, 자바는 한번 빌드하면 실행파일을 생성하는 것이 아니라, 저 중간 코드를 만드는 것에서 멈춘다.

이후, 로컬 머신에 설치되어 있는 JVM에서 저 중간코드를 해석해서 실행한다. 이것은 플랫폼에 독립성에 영향을 미치게 되는데, 예를 들어, 윈도우 환경에서 작성된 C 코드로 만든 exe 실행파일은 Mac OS 기반 머신에서는 실행될 수 없다. 하지만, 윈도우 환경에서 작성된 자바의 코드는 중간 언어로 변환되어 Mac OS에 전달되어도 Mac OS에 설치된 JVM이 이 중간 언어를 해석하여 실행할 수 있다는 것이다!


3. Pros

자바의 장점은 앞서 언급한 플랫폼 독립언어라는 것이다. 이것은 다중 플랫폼 환경에서 작업할 때 큰 장점으로 작용한다.

자바는 개발할 때 부터 객체지향을 따르도록 설계되었다. Primitive type (원시 타입) 개념이 있어 완벽한 객체지향이라고 부르기는 좀 뭐하지만, 메인 함수까지 클래스에 포함되도록 만든 엄연한 객체지향 언어이다. 이는 저레벨 언어인 C에서 객체지향 기능을 붙여 만든 C++과는 확연한 차이점을 보여준다.

Garbage Collector (GC)의 존재로 인해 개발자가 메모리 관리를 해줄 필요가 없으며, 메모리 관리를 할 필요가 없으므로 포인터 개념도 없다. 프리미티브 변수를 제외한 모든 변수가 참조변수로 사용된다.

C++ 배우다가 자바 배우면 진짜 신세계가 펼쳐진다. 객체지향 언어다 보니 개념적으로 이해하기 쉽고, C 기본 / C++ / STL 3권은 공부해야 하는 C++과는 달리 보통 한 권으로 끝나는 편이다. 심지어는 조그만한 핸디북도 있을 정도.

또한 왠지 모르게, 한국에서 특히 수요가 많다. 커뮤니티에서는 그렇게 자바 욕하면서도 개발자로 취업할 때 자바 모르면 사람 취급 안 하는 수준.. 

모바일에서 강세를 보인다. 이전에는 안드로이드 개발에 자바 안드로이드가 쓰였고 지금은 보통 Kotlin을 많이 사용한다. 코틀린 역시 JVM을 사용하는 자바 계열 언어이다. Xamarin같이 C-like한 언어도 있지만, 코틀린보다 어렵다.

컴공에서 소프트웨어 쪽하는 사람들은 연구한 기법을 자바 코드로 실험하는 경우가 많다. 데이터 셋이 풀려있어서 그런가.. 덕분에 관련 개발 툴도 다양하다.


4. Pros

느리다. 원래 같으면 환경에 종속적인 언어가 가질 수 있는 장점 (e.g. 메모리 가용성) 등을 활용하지 않고 코드를 해석하기 때문에 환경의 도움을 받기 힘들다. 또한, GC가 존재하기 때문에 GC가 돌아갈 때는 필연적으로 프로그램 속도가 느려진다. 

성능은 C#, 개발성은 Python에게 밀리는 추세. 특히, 인공지능 개발 플랫폼에 대해 파이썬이 압도적인 지분을 가지고 있어 앞으로도 격차가 벌어질 것으로 보인다.

이견이 갈리는 편이지만 Try~Catch문을 강제하는 것도 문제점으로 꼽힌다. 어차피 안할 사람은 안 하는데, 저걸 안 해주면 컴파일조차 안돼서 있으나 마나한 기능. 심지어 저것 때문에 가독성도 구려진다.

이에 대해 포프님이 올려주신 영상이 있으니 참고 바람.

 

 

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.