공부/java2014. 6. 8. 08:50

자바 언어의 주요 특징을 알아 보고자 합니다.

이미 자바의 역사는 오래 되었고, 인터넷에 많은 정보들이 널려 있지만 나름의 생각을 가지고 정리 해보고자 합니다.


자바하면 가장 대표적으로 떠오르는게 Write once, run anywhere 입니다.

자바의 철학이라고 할 수 있을 꺼 같습니다.


개인적으로 저 문장을 좋아 합니다.


어떠한 알 수 없는 이유로 선택 할 수 있는 것들이 제한이 된다면, 그건 매우 잘못 되었다고 생각합니다.


마치 자유를 억압 받는 듯한 느낌마져 듭니다.


이렇게 우리가 충분히 인지 하지 않으면 사람으로써 당연한 기본 권리인 자유를 매우 많은 곳에서 억압 받고 있다고 생각합니다. 우리 주변에는 그러한 것들이 너무 너무 많아서 가끔은 짜증이 날 때도 있지만, 이미 그러한 환경이 만들어진건 어쩔 수 없고 앞으로 나올 많은것들은 그러한 제한이 사라졌으면 하는 바램입니다.


그래서 저는 이러한 문제를 적극적으로 해결하고자 노력한 자바의 철학을 무척이나 좋아 합니다.


웹이라는 개념도 그러한 관점에서 매우 좋아하고요.


이 글을 읽고 계실 여러분들의 생각은 어떠하신지요?


사설이 길었습니다. 그럼 자바의 주요 특징을 간단하게 정리 및 개인적인 의견을 적어 보겠습니다.


영문 위키피디아에는 자바의 페러다임으로 아래와 같이 나열했습니다.

multi-paradigm, object-oriented, structured, imperative, functional, generic, reflective, concurrent


그리고 이러한 글도 보이는군요

출처 : 점프 투 자바

Java: A simple, object-oriented, distributed, interpreted, robust, secure, architecture neutral, portable, high-performance, multithreaded, and dynamic language


자바는 심플하다.

그 당시의 언어들에 비해 상대적이었겠죠. 하지만 요즘은 자바가 심플하다고 말하기 힘들지 않나 생각합니다. 많은 수의 함수형 언어들이 등장하고, 사용도 많이 하게 되면서 자바는 좀 복잡한 언어가 되어버렸다고 생각합니다.


자바는 객체 지향 언어 이다.

자바가 철저한 객체 지향언어라고 하지만, 100% 객체 지향 언어는 아니라고 생각합니다. 거의 100%에 가까운 언어라고 보는게 맞을꺼 같습니다.

이러한 이야기를 할때에 주로 예를 드는건 자바의 대표적인 primitive 타입에 대한 것입니다. 이 타입들은 객체지향하고 거리가 멀다고 생각합니다. 객체 하면 떠올리는 속성과 동작이 없기 때문이죠. 그리고 자바의 객체라면 당연한 Object 를 상속하지도 않습니다. null 도 포함되겠군요.

그래서 전 이렇게 이야가 하고 싶습니다. 자바는 거의 객체 지향 언어 이다.


자바는 플랫폼 독립적이다.

JVM 을 빼놓고 이야기 한다면 플랫폼 독립적이라고 할 수 있습니다.

어차피 JVM 은 플랫폼 독립적이 될 수 없기 때문에 JVM 을 빼고 이야기 해야 한다고 생각합니다.


자바는 안전하다.

자바는 안전했었던거 같다. 라고 하는게 더 맞지 않나 생각됩니다. 안전하다는 자바도 어차피 인간이 만드는것이라 헛점들이 많이 생길 가능성은 얼마든지 있고, 자바의 보안에 문제가 되는 경우도 있었으며, mutable 과 immutable 에 대해서도 느슨한 부분이 있다고 생각됩니다. 단, 자바는 정적인 언어이기 때문에 동적인 언어보다는 안전 할 수 있겠습니다.


자바는 멀티 쓰레드(동시성) 를 지원한다.

뭐.. 제대로 쓰기 시작하면 엄청나게 어렵다는게 함정이지만, 지원하는건 지원하는거니까요.


자바는 동적인 언어이다.

음.. 저는 자바는 정적인 언어인 걸로 알고 있었는데 어찌 된 영문일까요?

아마도 자바의 다양성 때문인것 같습니다. 자바는 인터페이스를 활용하면 인터페이스를 구현한 클래스에 대해서는 동적으로 사용이 될 수 있으니까 아마도 동적인 언어라고 표현하는것 같습니다. 추상 클래스도 한몫 하겠군요.


자바는 강력하다.

자바는 설계가 자연스럽다.

자바는 높은 성능을 보여준다.

자바는 분산 환경을 지원한다.

자바는 portable 하다.

자바는 imperative 하다.

자바는 generic 하다.

자바는 reflective 하다.


쓰다보니 왠지 안티 자바가 된것 같습니다만, 자바는 좋은 언어 입니다. 단지 자바의 특징이라고 하는게 제가 생각하는것들하고 맞지 않는것 뿐이지요.

그리고 최근 폴리그랏 프로그래밍 이라는 책을 읽어 보니 일부 지역은 자바가 서서히 사용이 적어지고 있나봅니다.

뭐, 크게 걱정할 부분은 아닌것 같습니다. 우리나라는 자바 천국 이니까요.


잘못된 내용 및 제가 잘못 이해하고 있는 부분에 대한 지적은 언제든 환영입니다.

'공부 > java' 카테고리의 다른 글

Java List 를 배열로 변환 하는 예제  (0) 2014.09.05
Java FileWriter 예제  (0) 2014.09.05
RejectedExecutionException 해결 방법 알아보기  (0) 2014.09.03
예외  (0) 2014.06.20
POJO  (0) 2014.06.10
Posted by #HanaLee