이세개발
article thumbnail
Published 2023. 4. 16. 22:03
이것이java다 1.2 자바란? legacy
1. 자바 소개
        1995년도에 처음 썬 마이크로 시스템즈에서 자바 언어를 발표한 후, 지금까지 자바는 성공한 프로그래밍 언어로서 전세계적으로 다양한 분야에서  사용되고있다.

 

  1991년 가전제품에서 사용할 목적인 오크(Oak)언어에서부터 시작되었고

  그후 인터넷의 등장과 함께 인터넷에서 실행되는 프로그래밍 언어로 사용되었고, 이름도 자바로 변경되었다.

  2010년 오라클에서 썬을 인수하여 Java 개발,관리,배포 주관하게 되었다.

 

1995년~ 1999년까지는 윈도우 프로그램 개발이 주류였기 때문에 C++언어에 비해서 자바는 아주 열세였지만. 1999년도 이후 인터넷 활성이되면서 웹 애플리케이션 구축용 언어로 자바가 급 부상했다. 그 이유는 기업체 및 공공기관의 다양한 서버 운영체제에서 단 한번의 작성으로 모든곳에서 실행 가능한 언어는 자바뿐이였기 때문이다.

 

현재는 스마트폰을 비롯해서 각종 장비,데스크톱등에서 실행되는 애플리케이션, 그리고 금융, 공공, 대기업등의 엔터프라이즈환경에서 실행되는 서버 애플리케이션을 개발하는 중추적인 언어로 자리매김하고 있다.

 

 

2. 자바의 특징

 

1) 이식성이 높다.

 

이식성이란 서로 다른 실행 환경을 가진 시스템간에 프로그램을 옮겨 실행할수 있는것을 말한다.

 

대부분의 프로그램들은 MS윈도우에 최적화되어 있기 때문에 유닉스나 리눅스에서 실행하려면 프로그램 소스 파일을 수정한 후, 재컴파일을 거쳐야 한다.

하지만 자바언어로 개발된 프로그램은 소스파일을 수정하지 않아도 , JRE(자바 실행 환경) 이 설치되어 있는 모든 운영체제에서 실행 가능하다.

 

 

 

2)객체 지향 언어이다.

 

프로그램을 개발하는 기법중에 하나인데 , 부품에 해당하는 객체들을 먼저 만들고 이것들을 하나씩 조립 및 연결해서 전체 프로그램을 완성하는 기법을 객체지향 프로그래밍(OOP : Object Oriented Programming) 이라고 한다. 이때 사용되는 언어를 객체 지향 언어라고 한다.

 

 

 

자바는 100% 객체 지향 언어이다. 객체를 만들기 위해 설계도인 클래스를 작성해야 하고, 객체와 객체를 연결하여 목적에 맞는 프로그램을 만들어 낸다.

자바는 아무리 작은 프로그램이라도 객체를 만들어 사용한다. 처음부터 객체를 고려하여 설계되었기 떄문에 객체 지향 언어가 가져야 할 캡술화.상속,다형성 기능을 완벽하게 지원하고 있다.

 

*캡슐화 : 만일의 상황 (타인이 외부에서 조작) 을 대비해서 외부에서 특정 속성이나 메서드를 사용자가 사용할 수 없도록 숨겨놓은 것

*상속 : 객체지향프로그래밍의 상속은 현실과반대로 부모가 자식에게 상속을 해주는것이아닌 자식이 부모를 선택해서 물려받는것

*다형성 : 같은 타입이지만 실행 결과가 다양한 객체를 대입(이용)할 수 있는 성질

 

 

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

 

자바는 객체지향 프로그래밍이 소프트웨어 개발의 주요 패러다임이였던 1990년대에 디자인되었다.

객체 지향 프로그래밍이 나오기 전부터 Lisp 또는 Scheme와 같은 함수적 프로그래밍 언어들이 있었는데, 학계를 제외하고는 현업에서 큰 호응을 얻지 못했다.

최근들어 함수적 프로그래밍이 다시 부각되고있는데, 대용량 데이터의 병렬 처리 그리고이벤트 지향 프로그래밍을 위해 적합하기 떄문이다.

자바는 함수적 프로그래밍을 위해 람다식(Lambda Expressions)을 자바 8부터 지원한다.

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

 

 

 

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

 

C++은 메모리에 생성된 객체를 제거하기 위해 개발자가 직접 코드를 작성해야 한다. 만약 이 작업을 성실하게 해주지 않으면, 프로그램은 불완전해지고 갑자기 다운되는 현상을 겪게 된다.

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

객체 생성 시 자동적으로 메모리 영역을 찾아서 할당하고, 사용이 완료되면 쓰레기 수집기(Grabage Collector)를 실행 시켜 자동적으로 사용하지 않는 객체를 제거시켜 준다. 따라서 개발자는 메모리 관리의 수고스러움을 덜고, 핵심 기능 코드 작성에 집중하기 편하다.

 

 

5) 다양한 애플리케이션을 개발할 수 있다.

 

자바는 윈도우, 리눅스, 유닉스 , 맥 등 다양한 운영체제(OS : Operating System) 에서 실행되는 프로그램을 개발할 수 있다. 단순한 콘솔 프로그램에서 클라이언트용 윈도우 애플리케이션, 서버용 웹 애플리케이션 그리고 모바일용 안드로이드 앱에 이르기 까지 거의 모든곳에서 실행되는 프로그램을 개발할 수 있다. 자바는 다양한 운영체제에서 사용할 수 있는 개발 도구와 API를 묶어 에디션(Edition) 형태로 정의한다.

 

* JAVA SE (Standard Edition) - 기본 에디션 : 자바 JVM(자바가상기계)을 비롯 자바프로그램 개발의 필수적인 도구와 라이브러리 API를 정의. 클라이언트와 서버프로그램에 상관없이 자바 프로그램을 개발하고 실행하기 위해서는 반드시 JAVA SE 구현체인 자바개발 키트 ( JDK : Java Development Kit)을 설치해야 한다.

*JAVA EE (Enterprise Edition) - 서버용 애플리케이션 개발 에디션 : 분산환경(네트워크,인터넷) 에서 서버용 애플리케이션을 개발하기 위한 도구 및 라이브러리 API를 정의  서버용 애플리케이션으로는 Servlet/JSP 를 이용한 웹 애플리케이션, 분산 처리 컴포넌트인 EJB(Enterprise Java Bean) 그리고 XML 웹 서비스 등이 있다.

 

 

6) 멀티 쓰레드를 쉽게 구현할 수 있다.

 

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

프로그램이 실행되는 운영체제에 따라서 멀티 쓰레드를 구현하는 방법이 다르지만, 자바는 쓰레드 생성 및 제어와 관련된 라이브러리 API를 제공하고 있기 때문에 실행되는 운영체제에 상관없이 멀티 쓰레드를 쉽게 구현할 수 있다.

 

7) 동작 로딩(Dynamic Loading)을 지원한다.

 

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

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

또한 개발 완료후 유지보수(수정) 가 발생하더라도 해당 클래스만 수정 하면 되므로 전체 애플리케이션을 다시 컴파일 할 필요가 없다.

따라서 유지보수를 쉽고 빠르게 진행 할 수 있다.

 

8) 막강한 오픈소스 라이브러리가 풍부하다.

 

자바는 오픈소스언어이기 떄문에 자바 프로그램에서 사용하는 라이브러리 또한 오픈소스가 넘쳐난다.

고급 기능을 구현하는 코드를 직접 작성할 경우, 시간과 노력이 필요하고, 실행 안전성을 보장할 수 없지만, 검증된 오픈소스 라이브러리를 사용하면 개발 기간을 단축하면서 안전성이 높은 애플리케이션을 쉽게 개발할 수 있다.

많은 회사들이 자바를 선택하는 이유중에 하나로 자바가 막강하고 풍부한 오픈소스라이브러리가 있기 때문이다.

 

 

 

 

3. 자바 가상 기계 (JVM) : JAVA Virtual Machine

 

운영체제는 자바 프로그램을 바로 실행할 수 없는데, 그 이유는 자바 프로그램은 완전한 기계어가 아닌, 중간 단계의 바이트 코드이기 때문에 이것을 해석하고 실행할 수 있는 가상의 운영체제가 필요하다. 이것이 자바가상 기계 이다.

JVM은 실 운영체제를 대신해서 자바 프로그램을 실행하는 가상의 운영체제인것이다.

그렇기때문에 운영체제가 달라도 동일한 실행결과가 나오도록하여 개발자는 운영체제와 상관없이 자바 프로그램을 개발할수 있게 되는것이다.

하지만 JVM은 운영체제에 종속적이기때문에 사용하는 운영체제에 맞는 JVM을 설치해야되는것과 한번의 컴파일링으로 실행 가능한 기계어가 만들어지지않고 JVM을 한번 거쳐야 하기 때문에 C와 C++의 컴파일 단계에서 만들어지는 완전한 기계어보다 속도가 느리다는 단점을가지고 있지만 기계어로 빠르게변환해주는 JVM내부의 최적화된 JIT 컴파일러와 발전해가는 컴퓨터 하드웨어 성능덕분에 속도의 격차는 많이 나지 않게 되어가고 있다.

 

profile

이세개발

@print(name)

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!