본문 바로가기
프로그래밍/자바(Java)

자바(Java)란? 자바의 특징

by imfireguy 2020. 10. 2.
반응형

자바(Java)란? 자바의 특징

 

목차

 - 자바(Java)의 역사

 - 자바(Java)의 철학

 - 자바(Java)의 특징

 

자바의 내용을 살펴보던 중 위키백과에 좋은 내용이 많아서 참고하고 추가로 의견을 적어 봅니다.

 

자바(Java)의 역사

자바 언어는 1991년 6월 셋톱 프로젝트를 위해 제임스 고슬링(James Gosling)과 연구원들이 만들었습니다.

 

이 언어는 원래 제임스 고슬링의 사무실 밖에 있던 오크 나무를 따다 오크(Oak), 혹은 그린(Green) 이라고도 불렀으나, 단어 리스트 중 무작위로 뽑은 자바(Java)를 선택했다. 고슬링의 목표는 C/C++ 스타일의 언어와 가상 머신을 구현하는 것이었습니다.

 

첫 공개 자바 버전은 1995년의 자바 1.0이었습니다.

한 번 쓰고 어느 곳에도 실행 "Write Once, Run Anywhere"하는 것을 약속하였고 인기 플랫폼에 무료 런타임을 제공하였습니다.

 

이 플랫폼은 꽤 안정성을 지녔고 보안 시스템은 여러 설정을 통해 네트워크 및 파일 접근을 통제할 수 있었습니다.

 

대부분의 브라우저들은 곧 자바 애플릿(Java Applet)을 웹 페이지 안에서 실행할 수 있었고 자바의 인기는 급상승했습니다.

 

자바 2(JDK 1.2 ~ 1.4)의 출현으로 여러 다양한 플랫폼에서 사용할 수 있는 설정(Configuration)들을 만들었습니다.

예를 들어 J2EE는 엔터프라이즈 애플리케이션을 실행할 수 있고, J2ME는 모바일 애플리케이션을 실행할 수 있다.

 

J2SE는 스탠더드 에디션으로 지정되었다. 2006년에 마케팅용으로 Java EE, Java ME, Java SE 순서대로 명칭을 바꾸었다.

썬 마이크로시스템즈는 1997년 ISO/IEC JTC1 표준화 그룹, 그리고 나중에는 ECMA International 그룹과 접촉하여 정식 승인을 받으려 했으나 곧 이 프로세스에서 철수했습니다. 

 

자바는 사실상 (de facto)의 표준이며 자바 커뮤니티 프로세스(Java Community Process)를 통해 관리되고 있습니다. 썬 마이크로시스템즈는 자바의 대부분을 무료로 배포하였으나 오픈이 아닌 사유 소프트웨어였습니다.

 

썬 마이크로시스템즈는 자바 엔터프라이즈 시스템 같은 특정 라이선스를 팔아서 수입을 올렸습니다.

썬(SUN) 사는 자사의 개발용(소프트웨어 개발 키트 (SDK))과 개발용의 일부인 실행용(자바 런타임 환경, JRE)을 구분한다. 실행용에는 컴파일러, 유틸리티 및 여러 개발용 헤더 파일이 포함되어 있지 않습니다.

2006년 11월 13일 썬 마이크로시스템즈는 대부분은 자바를 GPL 라이선스로 소스를 오픈하였으며 2007년 5월 8일 이 과정을 마쳤다. 썬 마이크로시스템즈가 권한을 가지고 있지 않은 대부분의 코어 부분을 오픈하였다. 2009년 4월 20일 제작사인 썬 마이크로시스템즈가 오라클과 인수 합병됨에 따라 자바에 대한 권리 및 유지보수 또한 오라클로 넘어가게 되었다.  

자바(Java)의 철학

1. 객체 지향 방법론을 사용해야 한다.


2. 같은 프로그램(바이트코드)이 여러 운영 체제(마이크로프로세서)에서 실행될 수 있어야 한다.


3. 컴퓨터 네트워크 접근 기능이 기본으로 탑재되어 있어야 한다.


4. 원격 코드를 안전하게 실행할 수 있어야 한다.


5. 다른 객체 지향 언어들의 좋은 부분만 가지고 와서 사용하기 편해야 한다.

 

자바는 초기 설계부터 객체 지향 언어(객체 지향 프로그래밍)로 설계되었습니다. 

C가 C++로 진화한 것과는 차이가 있다. 그리고 같은 코드로 어떤 마이크로프로세서에서나 실행되기를 원했습니다.

 

따라서 자바만의 실행 코드인 바이트코드라는 중간 코드를 컴파일러에 의해 생성합니다.

그리고 자바 가상 머신(JVM)에 의해 해석되어 실행된다. 따라서 C/C++ 코드로 작성되어 생성된 코드보다 일대일 상황이면 실행 속도가 느립니다.

 

그러나 장점은 같은 코드로 다양한 플랫폼이나 운영 체제에서 실행될 수 있다는 점이다. 

 

자바(Java)의 특징

자바(Java)는 썬 마이크로시스템즈의 제임스 고슬링(James Gosling)과 다른 연구원들이 개발한 객체 지향적 프로그래밍 언어이다. 1991년 그린 프로젝트(Green Project)라는 이름으로 시작해 1995년에 발표했습니다.

 

처음에는 가전제품 내에 탑재해 동작하는 프로그램을 위해 개발했지만 현재 웹 애플리케이션 개발에 가장 많이 사용하는 언어 가운데 하나이고, 모바일 기기용 소프트웨어 개발에도 널리 사용하고 있습니다.

자바의 개발자들은 유닉스 기반의 배경을 가지고 있었기 때문에 문법적인 특성은 파스칼이 아닌 C++의 조상인 C 언어와 비슷합니다.

 

자바를 다른 컴파일언어와 구분 짓는 가장 큰 특징은 컴파일된 코드가 플랫폼 독립적이라는 점입니다.

자바 컴파일러는 자바 언어로 작성된 프로그램을 바이트코드라는 특수한 바이너리 형태로 변환합니다.

 

바이트코드를 실행하기 위해서는 JVM(자바 가상 머신, Java Virtual Machine)이라는 특수한 가상 머신이 필요한데, 이 가상 머신은 자바 바이트코드를 어느 플랫폼에서나 동일한 형태로 실행시킵니다.

 

때문에 자바로 개발된 프로그램은 CPU나 운영 체제의 종류에 관계없이 JVM을 설치할 수 있는 시스템에서는 어디서나 실행할 수 있으며, 이 점이 웹 애플리케이션의 특성과 맞아떨어져 폭발적인 인기를 끌게 되었습니다.

 

자바의 철학과 특징을 합쳐서 정리를 해보자면 자바의 특징은 

 

1. 호환성이 높은 언어

 

자바(Java)는 JVM(Java Virtual Machine) 위에서 돌아가기 때문에 운영체제(OS)의 종류에 상관없이 실행되게 됩니다.

예를 들어 C언어의 경우 운영체제의 종류에 따라서 int형의 크기가 달라지기도 하지만 JAVA의 경우 모두 동일한 JVM환경에서 돌아가기 때문에 이런 경우는 없습니다. 

 

즉, 윈도우(windows), 리눅스(linux),  맥(mac) 등에 여러 운영체제(OS)에서 동일하게 실행됩니다.

 

2. 객체지향 프로그래밍(OOP) 

 

객체지향이라는 개념도 후에 시간이 된다면 자세히 포스팅을 해서 알아보겠지만 지금은 간단하게 알아보겠습니다.

객체지향이라는 말은 Object Oriented Programing의 줄임말입니다.

 

간단하게 말해 객체지향 프로그래밍 언어는 하나의 기능을 객체로 만들고, 이러한 객체들을 결합해서 하나의 프로그램을 만든다고 설명할 수 있습니다.

 

이해를 돕기 위해 예를 들어 자동차로 비유를 해보겠습니다.

 

자동차 = 완성된 하나의 프로그램

 

 엔진, 타이어, 휠 등등의 부품 = 객체

 

이렇게 비유를 할 수 있습니다.

 

 

3. 함수적 스타일 코딩을 지원

 

자바는 함수 프로그래밍을 위해 람다식을 자바 8부터 지원하고 있습니다.

람다식을 사용하면 컬렉션의 요소를 필터링, 매핑, 집계 처리하는데 쉬워지고, 코드가 매우 간결해집니다.

 

4. 메모리를 자동으로 관리

 

C언어는 메모리에 생성된 객체를 제거하기 위해 개발자가 직접 코드를 작성해야 합니다. 

만약 이 작업을 잘 처리하지 않으면 프로그램은 불완전해지고 갑자기 다운되는 현상을 겪게 됩니다. 

 

자바는 개발자가 직접 메모리에 접근할 수 없도록 설계되었으며 메모리는 자바가 직접 관리하게 됩니다. 

객체 생성 시 자동적으로 메모리 영역을 찾아서 할당하고, 사용이 완료되면 쓰레기 수집기(Garbage Collector)를 실행시켜 자동적으로 사용하지 않는 객체를 제거시켜줍니다. 

 

따라서 개발자는 메모리 관리의 수고를 덜고, 핵심기능 코드 작성에 집중할 수 있습니다.

 

5. 다양한 애플리케이션 개발가능

 

자바는 JVM을 사용함으로써 윈도, 리눅스, 유닉스 등 다양한 운영체제에서 실행되는 프로그램을 개발할 수 있습니다. 

 

단순한 콘솔 프로그램부터 클라이언트용 윈도우 애플리케이션, 서버용 웹 애플리케이션 그리고 모바일용 안드로이드 앱에 이르기까지 거의 모든 곳에서 실행되는 프로그램을 개발 할 수 있습니다.

 

6. 멀티스레드 구현 가능

 

하나의 프로그램이 동시에 여러 작업을 처리해야 하는 경우와, 대용량 작업을 빨리 처리하기 위해 서브 작업으로 분리해서 병렬 처리하려면 멀티스레드 프로그래밍이 필요합니다.

자바는 쓰레드 생성 및 제어와 관련된 라이브러리 API를 제공하고 있기 때문에 실행되는 운영체제에 관계없이 멀티 스레드를 쉽게 구현 가능합니다.

 

운영체제마다 멀티스레드를 이용하는 API가 다릅니다. 

Java의 경우 Java API를 이용하기 때문에 일관된 생성 및 관리가 가능합니다.

 

 

7. 동적 로딩(Dynamic Loading) 지원

 

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

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

 

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

 

8. 오픈소스 라이브러리(open source library)가 풍부

 

일부 유료화가 진행되었지만 자바는 오픈소스 언어이고 자바를 이용해서 전 세계에서 만들어진 라이브러리들이 굉장히 많습니다.

그래서 애플리케이션을 만들기 위해 오픈소스를 참고한다면 시간비용을 절약할 수 있습니다.

그리고 오픈소스이다가 보니 문제가 생기는 경우 찾아볼 수 있는 레퍼런스들도 많습니다.

반응형

댓글