C 언어, C++ 언어와 같이 Java프로그래밍 언어이다. 하지만 Java는 단지 언어를 뜻하는 것이 아니다.
( 후에 배울 Java VM (실행기), 인터프리트(컴파일러와 비슷하나 다른 것) 같은것도 Java의 범주에 속한다. )

우리는 현대에 프로그래머들에 의하여 중요 프로그래밍 방법론으로 사용되는 Java를 배울것이다. 중요 프로그래밍 방법론으로 택하였다는 말의 의미는 대표적인 프로그래밍 언어로 사용되고 있다는 뜻이다. 이렇게 Java는 현대의 소프트웨어 개발을 위한 여러 유명한 언어들 중에 하나이다.

 

대표적인 언어인 만큼 Java는 여러 분야에서 사용되어지고 있다.
아래 예를 보면
매우 다양하게 사용되고 있다는 것을 알 수 있다.

인터넷 & 웹 개발

모바일 소프트웨어 (안드로이드)

임베디드 소프트웨어

엔터프라이즈 소프트웨어

Java가 작성할 수 있는 프로그램의 인터페이스들은 DOS 에서와 같은 CUI나 마우스와 아이콘을 이용하여 직관적으로 사용가능한 GUI 모두 다 가능하다.

– CUI (Character User Interface) 애플리케이션
– GUI (Graphical User Interface) 애플리케이션


위와 같이 모든 인터페이스의 프로그램들을 작성할 수 있으며,
특정한 몇 개의 Java 프로그램들을 설명하자면,


– Java 애플릿(applet : application) - '클라이언트'에서 실행
Web 브라우저 상에서 동작하는 프로그램으로, HTML 안에서 '애플릿'을 지정하면 Web 서버로부터 자동적으로 다운로드 되어 클라이언트의 Web 브라우저 상에서 동작한다(실행된다).

'서버'에서 다운로드 [Java, HTML] > '클라이언트'에서 실행



– Java 서블릿(servlet : server) - '서버'에서 실행
Web 브라우저 상에서 동작하는 프로그램으로, 서버에서 실행되고, 실행 결과를 Web 페이지로 클라이언트에게 보내준다. 서버에서 동작하는 Java 서블릿과 비슷한 프로그램으로 CGI가 있지만, Java 서블릿이 더 효율적이기 때문에, 서블릿의 이용이 증가하고 있다.

'클라이언트''서버'에게 요청 > '서버'에서 실행 [Java] > 결과'클라이언트'에게 전송 [HTML]



– JSP (Java Server Page)
HTML 문서와 Java 프로그램을 조합하여 동적인 Web페이지를 간단하게 만들 수 있습니다. JSP는 서버에서 실행되고, 그 결과를 클라이언트에게 보내준다. HTML 문서 속에 Java 코드를 삽입하는 형태로 작성한다.

'서버'에서 실행 [Java 코드를 삽입한 HTML]결과를 '클라이언트'에게 전송 [HTML] 



– Java 빈즈(Beans)
Java로 작성되어진 프로그램을 부품(컴포넌트)으로써 다루는 것이다. 이 부품들을 조합하여 애플리케이션을 간단하게 만들어 낼 수 있다.

Java Beans 의 사용 목적

- 프로젝트의 능률적인 진행을 위해 아래 2 개의 부분을 '분리'하는 것을 뜻한다

1. '디자이너가 작업하는 화면 View 부분' [ = 프레젠테이션 (웹 디자이너 측) 부분 ]
2. '프로그래머가 작업하는 로직(model)부분' [ = 비지니스 로직 (개발자 측) 부분 ]

이렇게 함으로써 웹의 내용으로부터 웹 표현을 분리함으로써 동적인 웹 페이지 제작을 위한 개발관리에 있어 명확한 작업의 분리가 가능하다. 또한 동일한 기능이 페이지 구성이 달라서 반복적으로 사용되어지는 경우가 있을 경우에도 웹페이지를 효율적으로 작성, 수정하려면 반복적으로 사용되는 코드를 재사용 할 수 있어야 한다. 빈은 이와 같은 효율적인 코딩작업을 가능하게 한다. 목적을 간단하게 정리하면 아래와 같다.

1) JSP 페이지의 로직 부분을 분리해서 코드를 재사용함으로 프로그램의 효율을 높이는 것.
2) 프로그램의 모듈화 (컴포넌트 : component)는 코드를 재사용하므로 프로그램의 작성기간이 단축되고, 이미 실제 시스템에 사용했던 코드를 사용하므로 코드의 안정성이 보장되서 유지 보수가 쉽다.

현재 개발되었거나 되고 있는 프로그램들은 모두 MVC(Model-View-Controller) 기법에 의해 개발되어 지고 있다.

+ MVC 기법은 프로그램을 모델(Model), 뷰(View), 컨트롤러(Controller)로 나누어 개발하는데
- Model : 모델은 로직을 가지고 있는 부분으로 DB와 연동 하는 부분이며,
- View : 뷰는 사용자에게 제공하는 화면으로 UI(User Interface)에 해당하고,
- Controller : 컨트롤러는 뷰와 모델사이에서 흐름을 제어한다.

자세한 내용 및 그림자료 (MVC 2 패턴) : http://www.cyworld.com/aspire1127/5309794  ]

JSP 페이지에 화면 표출부분과 로직들이 혼재한 형태의 코드는 재사용이 어렵다. 이런 '혼재함으로 인한 복잡한 구성'들을 가능한 피하고, JSP 페이지의 로직 부분을 분리해서 코드를 재 사용함으로 프로그램의 효율을 높이는 것이 Java Beans를 사용하는 목적이다.

 

 

위에서 많은 이용 예들을 살펴보았다. 그렇다면 왜? 이렇게 많은 프로그램에 사용되고, 현대에 Java가 대표 프로그래밍 언어가 된것일까? 어떠한 장점들이 있는지 'Java의 특징'을 중심으로 살펴보자.

  

 

1.     단순, 다루기가 쉬운 언어사양을 지니고 있다.

 

사실 Java의 표기법은 기본적인 C C++의 표기법과 별로 다를게 없다.

'C 언어'는 매우 세세한 부분까지 제어를 할 수 있다는 것이 장점이라면 장점이지만, 그만큼 다루기가 어렵고, 익숙해지기가 상대적으로 어렵다는 특징이 있다. 그러나 이 'Java'는 포인터의 개념이 없는 등 세세한 부분까지 신경 쓰지 않아도 될 정도로 굉장히 다루기가 쉽다.

 

 

2.     실행 파일 수준의 호환성 : 운영체제에 독립적 / 멀티 OS

 

기존의 프로그램은 OS를 통해 들어와 Runtime으로 들어오게 되고, 다시 나가는 과정으로 된다. 즉, 그 프로그램이 대응하는 기본 운영체제 상에서만 동작하기 때문에, OS가 다르면 프로그램이 실행이 되지 않는 경향이 있다. Java 프로그램은 Java VM 이라는 실행 환경만 있으면 어디서든지 실행할 수 있다.

[ Java 프로그램을 실행하기 위해서는 JRE (Java Runtime Environment)라는 실행환경 프로그램이 필요 ]

Java Virtual Machine (JVM) 은 OS 위의 가상 OS이다. 이 때문에, 어느 프로그램을 JVM을 통해 실행할때 운영체제에는 독립적이라는 장점이 있으나, JVM (가상 OS) 이 기존의 OS와 상호 교환을 하고 다시 프로그램과 JVM이 서로 상호 교환을 하기 때문에, 성능 면에 있어서 약간은 저하가 발생할 수 있다. 하지만 H/W의 개발 속도가 매우 빠르기 때문에, '성능 저하'라는 특성은 따로 단점으로 작용하지는 않는다.

기존의 OS와 가상 OS인 JVM 이 상호 작용한다는 소리는 Java Virtual Machine (JVM) 은 H/W 에 탑재되어있는 S/W 의 개념으로, JVM을 설치할 때 H/W의 종류에 맞추어 설치해주어야한다는 것을 뜻한다. 그래서 Java 개발 툴을 다운 받을 때 여러 OS 군에서 자신에게 맞는 OS 버전의 Java 툴을 설치하여야한다.

JVM이 읽는 파일은 일반적으로 우리가 생각하는 .exe 확장자를 지닌 파일이 아니다. Java 프로그램의 실행 파일은 플랫폼에 의존하지 않는 바이트 코드로 만들어 진다. 이를 JVM을 이용하여 바이트 코드를 기종 고유(OS, H/W)의 코드로 변환하고 실행하여, 최종적인 실행 결과를 우리들에게 보여주는 것이다.

이 'OS' 와 '기종'에 독립적이라는 Java의 특징에 의하여 OS, 기종 상관없이 어느 컴퓨터이든, 심지어 냉장고와 같은 가전제품 등에서도 Java VM이 탑재되었다면 Java 프로그램을 실행 가능하다. 

이러한 장점은 [ Java의 모토 : Write Once Run Anywhere, WORA ] 에서 잘 드러난다.

 

 + 자바 가상 머신(Java Virtual Machine, JVM) 


자바 VM : http://ko.wikipedia.org/wiki/Java_Virtual_Machine

자바 의 장점, 회사에서의 경험 : http://blog.naver.com/borahoon?Redirect=Log&logNo=120120434950

자바 의 장점 (약간은 공학논리적) : http://sessionk.tistory.com/15


자바 가상 머신
은 자바 바이트코드를 실행할 수 있는 주체이다. 일반적으로 인터프리터나 JIT 컴파일 방식으로 다른 컴퓨터 위에서 바이트코드를 실행할 수 있도록 구현되나 자바 프로세서처럼 하드웨어와 소프트웨어를 혼합해 구현하는 경우도 있다. (이론적으로는 100% 하드웨어 구현도 가능하나 비효율적이다) 자바 바이트코드는 플랫폼에 독립적이며 모든 자바 가상 머신은 자바 가상 머신 규격에 정의된 대로 자바 바이트코드를 실행한다. 따라서 표준 자바 API까지 동일한 동작을 하도록 구현한 상태에서는 이론적으로 모든 자바 프로그램은 CPU나 운영 체제의 종류와 무관하게 동일하게 동작할 것을 보장한다.

 

 

3.     개발 환경이 충실하다.

 

Java 개발 툴은 Web상에서 무료로 다운로드 할 수 있다. (Eclipse 라는 유명한 무료 Intergrated Development Environment, IDE) 그리고 풍부한 기술을 포함하고 있는 라이브러리들을 표준으로 이용할 수 있어 다양한 스타일의 프로그램을 만들어낼 수 있다.

 

 

4.     객체 지향

 

객체 지향이란 프로그램의 기능을 '그룹'별로 나누고, 이런 '그룹'들의 집합들을 조합하여 프로그램을 작성해 나간다는 개념이다. 객체 지향 언어인 Java를 사용하면 이런 기능을 이용하여 보다 복잡하고 수준 높은 프로그램을 만들 수 있다. '객체 지향'에 대한 자세한 내용은 '2 장'에서 설명하겠다.


 

이렇게 다양한 특징과 장점을 갖춘 Java 언어로 프로그램을 작성하기 위해 우리는 개발 Tool들을 필요로 한다. 프로그래밍의 방향성(무엇에 대한 프로그램을 만들 것인가?)에 맞추어 여러 다양한 Tool들이 있다.

 

Java Development Kits 는 각 개발 목적에 따라 다양한 버전을 제공하여 준다.

- Java Standard Edition (Java SE)
.

클라이언트 지향의 기본적인 환경


- Java Enterprise Edition (Java EE)

큰 규모를 지닌 네트워크 애플리케이션웹 기반 애플리케이션개발을 위한 환경

일반적으로 서버 소프트웨어 개발을 위한 환경


- Java Micro Edition (Java ME)

휴대 전화(cell phones), 무선 호출 수신기(pagers), PDA와 같은 작고, 메모리가 작은 값으로 제한된 기기들의 개발을 위한 환경

 

이렇게 JAVA의 매우 개략적인 특징들과 Development Kits를 살펴보았다. 이 특징들이 개략적이지만, 앞으로 설명할 자세한 모든 특징들의 토대 라는 점에서 제대로 숙지하고 다음 글을 읽는 것을 권한다.

 

Posted by 하늘_