Java

Java 란?

찌르렁 2020. 10. 26. 15:13

                   James Gosling (자바의 아버지)

Java는 James Gosling(제임스 고슬링)과 그의 동료들에 의해서 시작된 그린 프로젝트로 시작하여 개발된 언어이다.

 

Java는 원래 가전제품을 제어하기 위한 언어로 고안되었으나 당시 가전기기는 Java를 동작시킬 만한 메모리나 하드웨어 여건이 마련되지 못하여 무산이 되었다.

 

그러나 1993년 웹 브라우저 시대가 활발해지고 그가 개발해 온 언어가 HTML의 문제점을 보완할 수 있으리라 판단하여 웹과 결합시켰고 1995년 JAVA 1.0을 공개하였다.

 

Java를 보통 JS(JavaScript)와 비슷하다고 생각하는 사람이 있는데 두 언어는 전혀 다른 언어이다. (실제 회사도 서로 다른 회사이다.) JavaScript를 개발한 개발자들이 당시 인기 있던 Java의 이름을 그대로 가져와서 만든 전혀 다른 언어이다. (이름을 베껴서 만든 거다.) Java는 객체지향 프로그래밍 언어로 사용되던 언어이고, JS는 동적 웹페이지 제작을 위해 사용되던 언어였다.

 

그러나 현재는 JS에 동적 효과뿐만 아니라 서버 작업도 할 수 있도록 업그레이드되어 웹 프런트엔드 벡엔드에 모두 사용할 수 있는 언어가 되어 Java 보다 사용성이 높아지고 있다.


Java의 특징

Java의 객체 지향 언어(Object Oriented Programming, OOP)로 OOP의 특징을 가지고 있다. 객체 지향 언어는 "절차"가 아닌 "데이터"를 중심으로 알고리즘을 기술하는 방법으로 객체를 먼저 만들고, 만들어진 객체를 조합해서 전체 프로그램을 완성하는 방법이다. (OOP는 따로 포스팅을 올리겠다.)

 

OOP의 특징은 대표적으로 5가지 특징을 가지고 있다.

 

캡슐화

데이터와 함수를 하나로 묶어서, 재사용성을 증가시키고, 오류 파급 효과를 감소시킨다.
인터페이스가 단순해지며, 객체 간 결합도(coupling)가 낮춘다.

추상성

불필요한 부분을 생략하고 중요한 것에만 중점을 두어 모델화 가능하다.

다형성

같은 함수, 기능에 대해 다른 정의를 통해 각 클래스가 다른 행동을 할 수 있게 해줌
Overloading : 같은 이름을 가진 함수지만 인자가 달라 각기 다른 인자에 따라 함수를 선택해 수행
Overriding : 상위 클래스로부터 상속받은 함수들을 다르게 구현하여 사용

정보 은닉

캡슐화를 통해 다른 객체에게 자신의 정보를 노출시키지 않고 숨길 수 있다.

상속성

상위 클래스의 모든 속성과 연산을 하위 클래스가 물려받아, 상위 클래스에 정의된 속성을 재정의 하지 않아도 된다.
새로운 속성과 연산을 추가하여 사용 가능하다.

 

자바는 또한 이식성이 높은 언어이다. 자바는 자바 가상 머신(JVM)을 사용하여, 독립적으로 동작하여 어느 운영체제에서나 같은 형태로 실행될 수 있어, 운영체제에 상관없이 소스파일을 수정하지 않아도 자바 실행 환경(JRE)이 설치되어 있는 모든 운영체제에서 실행이 가능하다.

 

예를 들어 c언어 같은 경우, 원도우는 .exe(executable) 파일, 유닉스 기반 OS는 a.out(assembler output) 파일로 OS마다 컴파일되어 나오는 파일의 확장자가 다르며, 컴파일된 파일은 다른 OS에서는 실행이 불가하다. 그러나 자바는 컴파일되는 파일을 어느 OS에서라도 실행이 가능하다.

 


Java Edition

자바 언어를 이용하여 콘솔 프로그램, UI 애플리케이션, 서버 애플리케이션, 모바일 앱 등을 개발할 수 있다. 다양한 애플리케이션을 위한 개발도구와 API를 에디션 형태로 구분한다. 자바 Edition은 3가지가 존재한다.

 

JAVA SE(Standard Edition)

자바 기본 에디션
자바 프로그램을 실행시키는 JVM 정의
자바 프로그램들이 공통적으로 사용하는 개발 도구와 API 정의
구현체 : JDK(Java Development Kit)

JAVA EE(Enterprise Edition)

웹 애플리케이션, 웹 서비스, 분산 컴포넌트를 위한 개발 도구와 API 정의
구현체 : WAS(Web Application Server) - Tomcat, WebLogic, Jeus, Jboss 등

JAVA ME(Micro Edition)

임베디드 또는 모바일 장비를 위한 개발도구와 API 정의