티스토리 뷰

프로그래밍 언어

  프로그래밍 언어란 사람이 컴퓨터로 실행하고자 하는 프로그램을 작성하는 언어이다. 컴퓨터가 이해할 수 있는 언어는 0과 1의 2진수 체계의 기계어(machine language)이다. 하지만 사람이 이 기계어를 이해하기 힘들기 때문에 만들어낸 언어가 바로 어셈블리어다. 어셈블리어(assembly language)는 기계어 명령을 이해하기 쉬운 상징적 언어(니모닉 기호, mnemonic symbol)로 일대일로 대응시킨 언어다. 니모닉 기호는 ADD, SUB, MOVE등과 같이 간단하면서 직관적이다. 다만, 복잡한 프로그래밍에는 한계가 있어 사람이 이해하기 쉽고 복잡한 작업, 자료구조, 알고리즘을 표현하기 위해 고급언어가 고안되었다. 고급언어는 초기에는 C언어와 같은 절차지향언어 형태를 거쳐 C++과 JAVA, C#등의 객체지향언어로 진화하였다.


프로그래밍 과정

  프로그래밍을 하는 과정은 다음과 같다. 처음에는 프로그래밍 언어로 작성된 텍스트 파일인 소스(Source)를 작성한다. 이 때, 고급언어로 작성된 소스는 컴파일(compile)이라는 과정을 통해 컴퓨터가 처리할 수 있는 기계어로 변환한다. 컴파일을 담당하는 소프트웨어를 컴파일러(compiler)라고 하며 각 언어마다 컴파일러의 종류가 다르다. 자바의 소스 프로그램의 확장자는 .java이고, 컴파일러에 의해 .class파일이 생성되며 자바가상머신(java virtual machine, JVM) 위에서 작동하게 된다.


Java의 역사와 특징

  1991년  선마이크로시스템즈의 제임스 고슬링(James Gosling) 가전제품에 사용할 소프트웨어를 개발할 목적으로 그린프로젝트를 시작했다. 다양한 플랫폼에서 호환되어야 하며 작은 양의 메모리를 필요로 하는 내장형 시스템을 충족해야했다. 그래서 플랫폼 독립적(platform independent)이며 메모리사용량이 적은 새로운 언어 오크(OAK)를 출시하였고, 이후 1995년 인터넷과 웹의 엄청난 발전으로 인해 인터넷 환경에 적합하도록 변형한 자바(Java)를 발표하였다. 2009년 이후 오라클이 선마이크로시스템즈를 인수하여 자바를 제공하고 있다.

  자바는 이전의 프로그래밍 언어와 달리 플랫폼으로부터 독립적이다. 운영체제와 하드웨어에 상관없이 한번 작성된 코드는 모든 플랫폼에서 바로 실행이 가능하다. 이러한 특징을 WORA(Write Once Run Anywhere)라고 한다. 자바의 플랫폼 독립성은 바이트코드(byte code)와 JVM(Java Virtual Machine)의 특징 때문이다. java소스를 컴파일 하면 바이트 코드로 이루어진 클래스파일이 생성되는데 CPU의 종류에 상관없는 바이너리 코드이며 JVM에 의해 해석되고 실행된다. JVM은 서로 다른 플랫폼에서 자바로 작성된 프로그램이 실행되는 동일한 환경을 제공하는 소프트웨어다. 단, JVM은 플랫폼마다 서로 다른 형태로 작성되어 플랫폼 종속적이다.
  기존의 C/C++ 프로그램은 여러 소스파일(.c)을 나누어 작성하고, 컴파일 과정을 통해 목적파일(.obj)을 생성하며, 링크 과정을 통해 목적파일(.obj)들을 연결하여 실행파일(.exe)를 만든다. 링크과정에서는 프로그램내에서 호출된 모든 함수의 코드를 라이브러리에서 꺼내 실행파일(.exe)에 삽입하기 때문에 실행에 필요한 모든 코드가 들어있고 용량이 크며, 컴퓨터의 메모리가 적을경우 실행되지 않을 수 있다.
  Java 프로그램도 마찬가지로 여러 소스파일(.java)를 작성하고 컴파일하여 클래스 파일생성하지만 링크의 과정은 생략된다. 자바 프로그램은 JVM에서 먼저 하나의 클래스 파일부터 실행을 시작하고 다른 클래스파일이 필요할때마다 동적으로 로딩하여 적은 메모리로도 실행이 가능하게 한다.


오픈소스

  오픈소스(open source)는 누구나 액세스할 수 있도록 소스코드를 무상공개한 것이다. 단, 제공자의 권리는 보장되어 있다.
<장점>
·공개된 오픈소스를 참조하여 개발시간 및 비용이 단축된다.
  ·공개된 소프트웨어를 많은 인원이 참여 개량하여 우수한 품질의 소프트웨어 개발이 가능하다.
<단점>
  ·무단으로 상용화하여 사용할 경우 저작권 문제가 발생할 수 있다.
  ·다양한 개량 버전의 소프트웨어로 인한 호환성 문제가 발생한다.
<사례>  Linux, Java, OpenOffice, OpenSolaris, Moxilla, Apache, GNU, WebKit 등
  http://sourceforge.net
  ▲오픈소스 사이트

JDK와 JRE

  JDK(Java Development Kit)는 자바 프로그램을 개발하기위한 총체적인 개발환경을 말한다. 컴파일러, 클래스 라이브러리, 샘플소스, JRE 등을 포함한다. 여기서 JRE(Java Runtime Environment)는 자바 응용프로그램 실행에 필요한 소프트웨어다. JRE는 자바 가상머신을 포함하기 때문에 개발자들이 아닌 자바프로그램을 사용하는 일반사용자들은 JRE만 따로 다운받아 사용하면 된다.
  http://www.oracle.com/technetwork/java/index.html
  ▲JDK와 JRE다운 (오라클 사이트)
  JDK는 용도에 따라 서로 다른 배포판으로 제공된다.
Java SE (Standard Edition): 자바 표준 배포판- 데스크톱 응용프로그램, 서버 응용프로그램 개발환경
Java Me (Micro Edition): 모바일용 배포판- 휴대폰, PDA, 셋톱박스 등
Java EE (Enterprise Edition): 기업용 배포판- 다중 사용자, 대규모 기업응용프로그램 개발환경


자바 API

패키지(package)는 서로 관련된 자바 클래스들을 묶어서 관리하는 폴더 같은 존재다. 자바API(Application Programming Interface)란 프로그램의 주요 기능들을 미리 작성해 둔 패키지이며 JDK에 포함되어있기 때문에 이를 활용하면 다양한 프로그램을 쉽게 작성할 수 있다.
  http://docs.oracle.com/javase/8/docs/api/
  ▲온라인 도큐먼트: 자바에서 사용하는 모든 패키지, 클래스에 관한 설명도 볼 수 있음