1. JAVA의 호환성
해당 운영체제에 Java Virtual Machine(JVM)을 설치하면 자바로 만든 프로그램은 어떤 컴퓨터에서도 완벽히 똑같이 동작합니다. 가상 머신이 각각의 운영체제에 맞춰서 결과적으로 완벽히 똑같이 돌아갈 수 있도록 제작되기 때문입니다. 가상 머신 없는 운영체제라면 아예 자바 프로그램을 사용하지 못하겠지만, 썬 마이크로시스템즈는 주요 OS용의 가상 머신을 발표하고 있고, IBM, 휴렛팩커드 등의 회사는 직접 자사 운영체제용 JDK/JVM을 제작 발표하며, 이들과 상관없이 독립적으로 특화된 성능 향상 기능을 가진 JVM을 만ㄴ들어서 발표하는 회사도 존재했습니다. 그래서 이 부분은 보통 단점으로 꼽히지 않습니다. 오히려 여러 운영체제에 발 벌리는 업체라면 윈도용, 맥용 등을 따로 제작할 필요가 없기 때문입니다.
그러나 다른 크로스 플랫폼 언어들과 마찬가지로 각 플랫폼마다 미묘하게 기능이나 작동에 차이가 있는 부분이 결국에는 존재할 수 밖에 없기 때문에, 이러한 부분을 고려하지 않고 작성된 프로그램을 그대로 다른 데에서 도릴 때에 문제가 발생할 가능성이 존재합니다. JVM의 장점은 그나마 이런 부분들이 다른 언어에 비해서 매우 적은 편이라는 점입니다. 이런 경우에 대부분 크로스 플랫폼으로 작성된 코드가 그러하듯 타깃 플랫폼을 인지하여 특정 플랫폼에서는 다르게 동작하게 하는 식으로 코딩을 하게 됩니다.
C나 C++에서도 크로스 플랫폼 형태로 소스코드를 작성하는 것이 가능하기는 했지만, 개발자가 타겟 플랫폼과 해당 플랫폼용 바이너리 코드를 생성하는 컴파일러에 대해서 잘 이해하고 나서 #define, #if 등 전처리기를 써서 각 타깃 플랫폼에 맞게 동작하도록 코드를 직접 작성해줘야 했습니다. 이와 달리 자바는 단일 소스코드를 컴파일하여 생성된 바이트코드 클래스 파일을 JVM이 존재하는 환경이라면 어디서나 (대부분은) 추가 컴파일이나 수정 작업 없이 그대로 똑같이 실행할 수 있다는 점이 차이점입니다. 기업 입장에서 컴파일한 바이너리가 크로스 플랫폼을 보장해주는 자바는 매력적인 언어였습니다.
JVM위에서 구동 가능한 언어는 자바 외에도 존재하는데, 이 언어들을 사용하면 자바와 동일한 수준의 호환성을 구현할 수 있습니다. 구글에서는 안드로이드 차세대 언어로 밀어주는 코틀린(Kotlin)이 대표적인 케이스입니다. 자바의 개발 주체인 오라클(Oracle)에서는 개발하는 GraalVM이라는 프레임워크도 있습니다. 이 프레임워크에서는 C++도 JVM 위에서 실행하는 것이 가능합니다.
요즘은 하드웨어와 밀접하게 연동되어야 하는 프로그램이 아니라면, 또는 메인 로직은 서버에서 돌아가고 클라이언트에서는 인터페이스만 제공해주면 되는 경우라면 JVM보다는 웹 기술을 이용한 방식이 더 주목받고 있습니다. 아예 어디에서나 동일한 동작을 보증하는 웹 사이트의 형식으로 서비스를 하거나, 네이티브 앱의 UI가 필요한 경우에는 React Native 또는 Flutter 등의 프레임워크를 이용하는 경우가 많습니다. React Native는 웹 개발에서 주로 쓰이는 Javascript를 이용하고, Flutter는 구글에서 웹 프로그래밍 용도로 만든 Dart라는 언어를 이용합니다.
2. JAVA의 안정성
다른 언어에 비해 높은 안정성을 꼽고 있습니다. 우선 C/C++에 안정성 문제가 제기되는 포인터 연산자 및 메모리 직접 접근 함수들을 지원하지 않습니다. 여기에 C++과는 다르게 다중 상속을 허용하지 않습니다. 이는 객체지향의 특성 중 하나인 '상속'의 자유도를 확 떨어트리는 것이기에 언뜻 보기에는 객체지향적 관점에 위배되는 것처럼 보일 수 있으나, 반대로 오히려 이게 더 객체지향적이라고 볼 수도 있습니다. 객체지향의 목적 자체가 재사용을 통한 생산성의 향상과 관리 상의 이점인데, 다중 상속은 잘못 사용할 시 극도로 복잡하게 꼬인 프로그램을 만들 위험성을 갖고 있습니다. 자바는 이러한 현상을 아예 미연에 방지하기 위해 다중 속성을 언어 스펙에서 제거하는 방법을 택했습니다.
3. JAVA의 가독성
고급 프로그래밍 언어가 만들어진 첫째 목적은 '조금 더 인간 친화적인' 코드의 작성을 돕는 데 있습니다.
C++ 탬플릿 프로그래밍의 주 사용 용도인 일반화 프로그래밍도 제네릭이라는 더 쉬운 개념을 도입해서(Java 5부터 지원) 코드의 가독성을 해치지 않고 일반화 프로그래밍을 성공적으로 도입했습니다.
하지만 자바가 로우레벨 언어인 C/C++ 보다 읽기 쉽다고 해서 일반적인 시각에서 보기에 가독성이 좋은 언어는 아닌데, 그 이유는 단점 항목에서 언급된 소스 코드의 길이 문제 때문입니다. 일반적으로 개발자들 사이에서 자바가 가독성이 좋은 언어로 통용되지는 않습니다. Kotlin이 구글에 의해 자바의 대체 언어로 선정된 이유는 Oracle과의 저작권 관련 분쟁 때문도 있지만, 자바 문법의 장황함과 가독성의 불편함에서 기인한 것이기도 하다. 비유를 하자면 자바는 입문 장벽을 낮춘 대신 이런저런 제약을 울타리처럼 둘러친 언어이고, C/C++는 프로그래머에게 자유도를 부여한 대신 입문 장벽을 높여버린 언어라고 할 수 있습니다.
'JAVA' 카테고리의 다른 글
JAVA의 언어적 불편함 (0) | 2020.11.30 |
---|---|
JAVA의 예외 처리와 소스 코드 길이 차이 (0) | 2020.11.30 |
JAVA의 단점 - 속도문제 (0) | 2020.11.29 |
JAVA의 장점 - 래퍼런스와 생산성 (0) | 2020.11.27 |
JAVA의 정의와 활용 (0) | 2020.11.26 |
댓글