프로그래밍/JAVA

1. Java Programming Language

COPAN 2019. 6. 16. 12:26
728x90

1.1 자바란?

  • 썬 마이크로시스템즈에서 1996년 1월 개발한 객체지향형 프로그래밍 언어

자바의 특징 

  • 운영체제 (Operating System, 플랫폼)에 독립적
  • 운영체제의 종류에 관계없이 실행 가능
  • 객체지향개념 + 기존의 다른 프로그램밍언어 장점 채택

1.2 자바의 역사

  • 1991년 썬의 엔지니어들에 의해서 고안된 오크(Oak)라는 언어에서부터 시작

        - 제임스 고슬링, 아서 밴호프, 썬의 엔지니어들의 원래 목표는 가전제품에 탑재될 소프트웨어를 만드는 것

        - C++의 장점을 도입하고 단점을 보완한 새로운 언어를 개발

        - Oak는 가전제품, PDA와 같은 소형기기에 사용 목적

  • 여러종류의 운영체제를 사용하는 컴퓨터들이 통신하는 인너넷이 등장

        - 운영체제에 독립적인  Oak가 이에 적합하다고 판단

        - Oak를 인터넷에 적합하도록 개발 방향을 바꾸면서 이름을 Java로 변경

  • 1995년 자바로 개발한 웹즈라우저 '핫 자바(Hot java)'발표
  • 1996년 1월 정식 버전 발표
  • 자바로 작성된 애플릿(Applet)은 당시 정적인 웹페이지에 사운드와 애니메이션 등의 멀티미디적인 요소들을 제공할 수 있는 유일한 방법

       -인기와 많은 사용자층을 보유할 수 있었다.

  •  보안상의 이유로 최신 웹브라우져에서 애플릿을 더 이상 지원하지 않게 됨
  • 현재 서버 쪽 프로그래밍을 위한 서블릿 (Servlet)과 JSP(Java Server Pages)가 더 많이 사용된다
  • 구글의 스마트폰 운영체제인 안드로이드에서 Java를 사용
  • 자바의 원래 목표 였던 소규모 가전제품과 대규모 기업환경을 위한 소프트웨어 개발 분야에 활발히 사용될 것으로 전망

1.3 자바언의 특징

 1.운영체제에 독립적이다.

'한번 작성하면, 어디서나 실행된다.(Write once, run anywhere)'

  • 기존의 언어는 한 운영체제에 맞게 개발된 프로그램을 다른 종류의 운영체제에 적용하기 힘들다.
  • 자바에서는 일종의 에물레이터인 자바가상머신(JVM)을 통해서 가능
    • 자바 응용프로그램은 운영체제나 하드웨어가 아닌 JVM하고만 통신하고 JVM이 자바 응용프로그램 전달받은 명령을 해당 운영체제가 이해할 수 있도록 변환하여 전달
  • 자바로 작성된 프로그램은 운영체제 독립적이지만 JVM은 운영체제에 종속적이서 썬에서는 여러 운영체제에 설치할 수 있는 서로 다른 버전의 JVM을 제공

 2. 객체지향언이다.

객체지향 프로그래밍언어(object- oriented pro-gramming language) 중의 하나

  • 객체지향개념의 특징
    • 상속, 캡슐화, 다형성, 재사용성, 유지보수의 용이성
  • 순수한 객체지향언어라는 평가를 받고 있음

3. 비교적 배우기 쉽다.

  • 자바의 연산자와 구문은 C++에서, 객체지향관련 구문은 스몰톡(small talk) 객체지향언에서 가져왔다.
    • 이들 언어의 장점을 취하면서 복잡하고 불필요한 부분으 과감히 제거하여 단순화함으로서 쉽게 배울 수 있
    • 간결하고 이해하기 쉬운 코드를 작성 
  • 객체지향 프로그래밍의 저변확대에 크게 기여
    • 객체지향언의 특징인 재사용성과 유지보수의 용이성 등의 많은 장점에도 불구하고 배우기가 어렵기 때문에 많은 사용자층을 확보하지 못했으나 자바의 간결하면서도 명료한 객체지향적 설계는 사용자들이 객체지향개념을 보다 쉽게 이해하고 활용할 수 있도록 했다.

4. 자동 메모리 관리(Garbage Collection)

  • 자바로 작성된 프로그램이 실행되면, 가지비컬렉터(garbage collector)가 자동적으로 메모리를 관리한다.

5. 네트워크와 분산처리를 지원한다. 

  •  다양한 네트워크 프로그래밍 라이브러리(Java API)를 통해 비교적 짧은 시간에 네트워크 과련 프로그램을 쉽게 개발 할 수 있도록 지원

6.멀티쓰레드를 지원한다.

일반적 멀티쓰레드(multi-thread)의 지원은 상요되는 운영체제에 따라 구현방법, 처리방식이 다르다.

  • 자바에서 개발되는 멀티쓰레드 프로그램은 시스템과는 관계없이 구현가능
  • 관련된 라이브러리(Java API)가 제공되므로 구현이 쉽다.
  • 여러 쓰레드에 대한 스케줄링(scheduling)을 자바 인터프리터가 담당 

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

  • 자바로 작성된 애플리케이션은 여러 개의 클래스로 구성
  • 동적 로딩을 지원
    • 실행  시에 모든 클래스가 로딩되지 않고 필요한 시점에 클래스를 로딩하여 사용할 수 있다는 장점이 있다. 
  • 일부 클래스가 변경되어도 전체 애플리케이션을 다시 컴파일하지 않아됨
  • 애플리케션의 변경사항이 발생해도 비교적 적은 작업만으로도 처리할 수 있는 유연한 애플리케이션을 작성할 수 있다.

1.4 JAM(Java Virtual Machine)

JAM은 Java virtual machine 줄인 것 

  • '자바를 실행하기 위한 가상 컴퓨터'
    • 가상 컴퓨터(Virtual computer)소프트웨어로 구현된 컴퓨터
    • '컴퓨터 속의 컴퓨터'
  • 자바로 작성된 애플리케이션은 모두 JAM에서만 실행

Java 애플리케이션JVM↔OS(windows)↔컴퓨터(하드웨어)

일반 애플리케이션        ↔OS(windows)↔컴퓨터(하드웨어)

비교

  • 일반 애플리케이션은 OS와 맞붙어 있어 OS에 종속적
  • Java 애플리케이션은 JAM만 상호작용을 하기에 OS와 하드웨어에 독립적
    • 단, JVM은 해당 OS에 종속적이기에 해당 OS에 실행가능한 JAM이 필요

Java 단점

  • 일반 애플리케션에 비해서 속도가 느리다
  • JIT컴파일러와 향상된 최적화 기술로 속도의 격차를 많이 줄였다.
    • JIT컴파일러 : 바이트코드(컴파일된 자바코드)를 하드웨어의 기계어로 바로 변환해준다.