본문 바로가기

토론(지식 엿보기)/JAVA or jQuery or PHP 기초

(JAVA 입문) 1. JAVA란?

오늘부터 JAVA를 공부하면서 정리도 하고 또한 필요하신 분들에게도 나누어드리고자 블로그에 게시합니다. 저는 절차지향 언어에 익숙한 사람이라 객체(Object)가 도데체 무엇인지 몰라 시도는 했으나 객체지향 언어[각주:1]를 쓰면서 절차지향 언어의 프로그래밍을 했던 사람입니다. 그렇지만 시대가 변하듯이 지금은 객체지향 프로그래밍이 절실히 필요한 때라 늦었더라도 공부해보려 합니다. 비록 저의 필요에 따라 정리하는 것이지만 되도록 많은 분들에게 도움이 되었으면 한는 마음으로 게시해 드립니다.


저도 그랬지만 자바와 자바스크립트(JavaScript)를 비슷한 언어로 생각하시는 분이 있을 것입니다. 자바 언어를 사용하여 웹페이지를 제작하고 유지,관리,보수 하는 일을 하고 자바스크립트는 웹페이지 동작을 담당하는 언어입니다. 따라서 언어 제작자도 다르고 언어도 완전히 다릅니다. 다만 웹에서 동작한다는 공통점은 있습니다. 자바는 컴파일[각주:2] 언어이고 자바스크립트는 인터넷 브라우저[각주:3]가 읽고 하나 하나씩 실행시켜 동작시키는 방식으로 동작하기 때문에 속도면에서 자바가 빠르며, 자바는 객체지향적인 언어이기 때문에 문법을 정확히 지켜주어야하지만 자바스크립트는 브라우저에서 바로 실행되기 때문에 언어도 자바에 비해 단순한 편이고 문법 체크도 자바에 비해 느슨할 수 밖에 없는 특성을 지니고 있습니다.


원래 자바스크립트는 넷스케이프 커뮤니케이션즈 코퍼레이션의 브렌던 아이크(Brendan Eich)가 처음에는 모카(Mocha)라는 이름으로, 나중에는 라이브스크립트(LiveScript)라는 이름으로 개발하였으며, 최종적으로 자바스크립트가 되었습니다. 자바스크립트가 썬 마이크로시스템즈의 자바와 구문(syntax)이 유사한 점도 있지만, 이는 사실 두 언어 모두 C 언어의 기본 구문에 바탕을 뒀기 때문이고, 자바와 자바스크립트는 직접적인 관련성이 없습니다. (출처 : ko.wikipedia.org)


그렇다면 왜 자바(JAVA)가 좋은 것인가? 라는 근본적인 질문에 어떻게 대답해야 할까요? 물론, 객체지향 언아이기에 그 장점들을 열거하실 수는 있지만, 그 정도의 대답을 원하는 것은 아닙니다. 컴퓨터는 종류도 많고 CPU도 많고 게다가 OS[각주:4]도 많은데, 같은 사양의 컴퓨터라도 OS가 달라지면 그에 따라 언어도 즉 컴파일러[각주:5]도 달라져야 합니다. 그렇기 때문에 같은 프로그램 소스를 사용하더라도 컴퓨터마다 그리고 OS마다 달라지는 것이 있어서 그것을 맞추어 주는 작업을 하고 난 뒤에야 그 컴퓨터에서 동작하게 됩니다. 이러한 폐단 때문에 OS가 다르더라도 모든 컴퓨터에 같은 소스를 쓸 수 있는 언어를 만들게 되었는데, 그것이 바로 JAVA라는 언어입니다. 이 JAVA는 JVM이나 JRE위에 실행되게 되어있으며, CPU와 OS가 달라 다르게 표현 되는 부분은 JVM이나 JRE가 그 컴퓨터와 OS 그리고 그 하드웨어에 맞게 돌아가게 해 주기 때문에 똑 같은 JAVA를 어떤 컴퓨터에서 개발하든 어느 컴퓨터에서도 실행될 수 있기 때문에 발표 당시에 혁신적인 언어가 되었습니다.


1. JAVA란?

1-1. 객체지향 프로그래밍의 유래

객체지향 프로그래밍의 출발은 1960년대 중반에 유행한 시뮬레이션 언어 SIMULA 67에서 유래했다고 알려져있습니다. 이 SIMULA 67은 NR(NCC-Norwegian Computing Center의 약자.)의 조한 달(Ole-Johan dahl)과 크리스틴(Kristen Nygaard)이 만든 것으로 클래스 개념을 처음으로 도입한 언어로 유명합니다.


1-1-1. 제작회사인 java.com/ko에서 알려주는 자바에 대한 정보

JAVA 기술이란 무엇이고 필요한 이유는 무엇입니까?

Java는 Sun Microsystems가 1995년에 처음 출시한 프로그래밍 언어이자 컴퓨팅 플랫폼으로, 수 많은 응용 프로그램 및 웹 사이트가 Java를 설치하지 않으면 작동되지 않으며, 이 수는 매일 늘어나고 있습니다. Java는 빠르고, 안전하며, 안정적입니다. 랩톱에서 데이터 센터, 게임 콘솔에서 과학용 수퍼 컴퓨터, 휴대 전화에서 인터넷에 이르기까지 Java 기술은 어디에나 존재합니다.


Java 다운로드는 무료로 제공됩니까?

예, Java 다운로드는 무료입니다. java.com에서 최신 버전을 다운로드할 수 있습니다.


내장 또는 소비자 장치를 개발하고 있고 Java를 이러한 장치에 포함하려는 경우 Oracle에 문의하면 장치에 Java를 포함하는 방법을 자세히 알려 드립니다.


최신 Java 버전으로 업그레이드해야 하는 이유는 무엇입니까?

최신 Java 버전에는 시스템에서 실행되는 Java 응용 프로그램의 성능, 안전성 및 보안을 향상시키는 중요한 개선 사항이 포함되어 있습니다. 이 무료 업데이트를 설치하면 이후에도 안전하고 효율적인 Java 응용 프로그램의 실행이 보장됩니다.


자세한 기술 정보

Java 소프트웨어를 다운로드하면 무엇이 설치됩니까?

Java 소프트웨어를 다운로드하면 JRE(Java Runtime Environment)가 설치됩니다. JRE는 JVM(Java 가상 시스템), Java 플랫폼 핵심 클래스 및 Java 플랫폼 지원 라이브러리로 구성되어 있습니다. JRE는 Java 소프트웨어의 런타임 부분으로, 웹 브라우저에서 Java 소프트웨어가 실행되는 데 필요합니다.


Java Plug-in 소프트웨어란 무엇입니까?

Java Plug-in 소프트웨어는 JRE(Java Runtime Environment)의 구성 요소입니다. JRE를 사용하면 Java 프로그래밍 언어로 작성된 애플릿을 다양한 브라우저 내에서 실행할 수 있습니다. Java Plug-in 소프트웨어는 독립형 프로그램이 아니므로 개별적으로 설치할 수 없습니다.


Java 가상 시스템과 JVM이라는 용어를 들어 본 적이 있는데, 이것이 Java 소프트웨어입니까?

Java 가상시스템은 웹 상호 작용과 관련된 Java 소프트웨어의 한 측면입니다. Java 가상 시스템은 Java 소프트웨어 다운로드에 포함되어 있으며, Java 응용 프로그램의 실행을 지원합니다.


» Java 기술에 대한 자세한 정보


다음 사항도 살펴보십시오.:


1-2. 객체지향 언어가 필요한 이유와 절차지향 언어와의 차이

  신뢰성 있는 소프트웨어를 쉽게 작성할 수 있어서 비용적/시간적으로 절차지향 언어와 차이를 보인다.

  코드를 재사용하기 쉬워 반복적인 작업이 줄어든다.

  업그레이드가 쉬워 유지보수가 간단하다.

  디버깅이 쉬워 보수 및 관리가 쉬워진다.

 이렇게 열거된 4가지의 특징으로만 생각해도 개발 후 앞으로 있게 될 유지보수비가 줄어들 것임이 분명하여 이 또한 장점으로 여겨질 수 있는데, 이런 것만 생각해도 객체지향 언어를 쓸 충분한 이유가 될 것입니다.


쉽게 말해서 제가 잘 다루는 절차지향 언어는 어떤 틀 안에 있어야만 동작하는 프로그램으로서 그 순서대로 안 하면 동작이 안 되며 어느 한 부분에 탈이 나도 전체의 코드를 수정해야 하는 상황이 벌어지기 쉬워 비싼 비용이 들더라도 그것을 짠 프로그래머에게 유지보를 맡길 수밖에 없는 상황이 벌어지기 쉬우나 객체지향 언어는 어느 틀 안에 들어가서 하는 언어가 아니며 부분 부분 나누어 각각을 프로그래밍한 후 그것을 알고리즘에 따라 순서대로 합치거나 예외적으로 발생하는 일들을 처리할 수 있도록 잘 배치하면 되어 어느 한 부분에 문제가 생기면 그 부분의 프로그램을 수정하고 업그레이드시키면 되므로 프로그램 전체를 수정하는 일이 현저히 줄어들어 유지보수가 편해집니다.


1-3. 객체와 클래스

객체지향 프로그래밍에서는 작업대상 즉 모든 사물을 객체로 취급하는데, 이 객체는 프로그래밍 코드로 구현한 것을 말하는데 그것을 클래스(Class)라고 부릅니다. 클래스를 사용하기 위해서는 객체변수 선언을 통하여 객체 인스턴스를 생성해야 합니다. 객체지향 언어에는 대표적으로 C++, JAVA 등이 있습니다. 표현은 달라도 C++와 JAVA 등은 C 언어의 표현양식을 따라 기술하기 때문에 쓰이는 명령은 달라도 비슷한 형태를 가지고 있습니다.


class SomeFunMuncho

{
  public:
    int mTempZimboniMacho; // OOP에서는 오직 임시 변수들만 public이어야 한다.
    float *mpTempArrayNumbers;
    int HandleError();
    float getBonyBox(); // 변수에 접근하기 위한 함수

  protected:
    float mtBonyBox;
    int *mtpBonyHands;
    char *tHandsFull();
    int tGetNumbers();


  private:
    float mvJustDoIt;
    char mvFirstName[30];
    int *mvpTotalValue;
    char *vSubmitBars();
    int vGetNumbers();
};

표-1) c++ 코딩(coding) 예


public class Test1 {

  public static void main(String... args) {

    int sum = 0;

    for (int i = 0; i < 1000; i++) {

      if (i % 2 == 0) {

        for (int j = i; j < 1000; j++) {

          if (j % 3 == 0) {

            sum += i + j;

            // .....

          }

        }

        // .....

      }

    }

    System.out.println(sum);

  }

}

표-2) JAVA 코딩 예


1-4. 객체지향언어의 특징


상속. 서브클래스를 생성하기 위해서는 슈퍼클래스로부터 상속을 받아 생성시키게 되는데, 이때 슈퍼클래스는 "부모/상위/베이스" 클래스라고도 불리며, 서브클래스는 "자식/하위/파생" 클래스 등으로 불리기도 하여 각각 3개의 동의어가 더 있습니다.

상속
슈퍼클래스= 부모클래스, 상위클래스, 베이스클래스
서브클래스 = 자식클래스, 하위클래스, 파생클래스

 슈퍼클래스에서 상속되어야만 서브클래스가 생성


객체 간의 메시지 전달. 메소드를 통해 메시지를 전달할 수 있는데, 각 클래스엔 메시지를 처리하기 위한 방법이 기술되어 있다.



코드 재사용. 한 번 만든 코드는 필요한 곳 어디서든 그리고 언제든지 그것을 다시 사용할 수 있다는 뜻인데, 상속과 다른 객체와 함께 객체생성시 다른 객체를 재생성함으로서 그 코드를 재사용한다는 의미입니다.


정보 은닉. 객체를 이용하여 클래스의 정보를 사용하기 때문에 그 클래스의 코드를 알 필요가 없어서 객체를 이용하는 방법만 알면되기 때문에 보안성이 높아지고 그로인해 객체지향언어로 짠 프로그램의 신뢰도가 향상된다고 이해됩니다.


상속을 이용하여 새로운 객체를 생성하는 방식의 프로그래밍을 하기 때문에 자료가 구조적이고 상호 유기적인 특징을 가지게 되며 이러한 구조적이고도 체계적인 구성 때문에 1. 복잡한 프로그램 구축시 쉽고 체계적으로 개발이 가능해져 2. 개발된 프로그램의 유지보수가 용이하여 절차지향 프로그램보다 유지하는데 비용이 적게 드는데, 문제가 생기면 프로그램 전체를 수정하는 것이 아니라 문제가 있는 일부분만 수정하면 되기 때문입니다.


개발된 프로그램의 유지보수가 중요한 이유. 처음부터 모든 사항을 완벽하게 고려하여 개발된 프로그램은 있을 수가 없기 때문입니다. 그렇기에 그때그때 보충하거나 개선이 필요하게 되는데 그때마다 수정을 계속 해 주어야 합니다. 따라서 전체 개발비의 70% 정도를 유지보수 비용에 책정하는 것이 일반적입니다. 그렇기 때문에 유지보수 비용을 줄이는 문제는 중요한 문제가 됩니다. 이러한 이유로 쉽게 유지보수 할 수 있는 객체지향 언어가 필요한 이유입니다.


2. JAVA 언어의 역사와 특징

자바 언어는 1991년 제임스 고슬링(James Gosling)에 의해 상호동작되는 TV를 만들 목적으로 개발되었다고 합니다. 그가 일하던 연구소에 떡갈나무(Oak)가 많아 처음엔 Oak라고 지었는데, Oak가 이미 상표등록이 되어있다는 것을 알게되어 연구원들이 새로운 이름을 만들기 위해 커피샵에서 회의했는데 그때 마셨던 커피의 이름이 자바이었기에 JAVA라 짓게 되었다고 합니다.


1995년에 C와 C++의 문으로 만들어진 Java v1.0이 최초로 상용화되어 선 마이크로시스템즈(Sun Microsystems)사에서 출시합니다. 그 이후 1998~99년 사이에 Java v2, J2SE v1.2가 나왔고 2006년에 와서 J2SE가 사용목적에 따라 Java SE, Java EE, Java ME로 구분하여 나오게 되었습니다.

사용 목적에 따른 JAVA 구분

구분

Java SE

Java EE

Java ME

사용목적

근간이 되는 기본 버전

분산된 서버 프로그램을 지원

모바일 프로그램 지원

비고

모든 Java 프로그램의 BaseJSP[각주:6]를 이용한 웹프로그래밍
문자열 처리 비즈니스로직

안드로이드앱 개발과 무관
사물인터넷(IoT[각주:7]) 기기에 내장시켜

  기기제어에 사용


3. JAVA 언어가 활용되는 분야

    1. JAVA기반의 그룹웨어 개발
    2. 네트워킹 프로그램 개발
    3. JSP 기반의 웹어플리케이션 개발
    4. 안드로이드앱 개발
    5. 사물인터넷(IoT) 운용

  1. "객체지향 언어"란 작업대상을 객체로 취급하여 처리하는 언어. [본문으로]
  2. Compile. 컴퓨터가 이해할 수 있는 형태로 번역하는 일을 말한다. [본문으로]
  3. Internet Browser. 인터넷 공간에 있는 사이트의 게시물들을 읽거나 게시할 수 있는 컴퓨터 프로그램들을 말하는데 MS익스프롤러/크롬/네비게이터/사파리 등 많이 있다. [본문으로]
  4. Operating System의 약자. 한국어로는 운영체제로 번역하는데, 도스/CP-M/윈도우/리눅스/유닉스/i-OS 등 많은 것이 있다. [본문으로]
  5. Compiler 뒤에 설명됨. [본문으로]
  6. Java Server Pages의 약자, JSP는 HTML내에 자바 코드를 삽입하여 웹 서버에서 동적으로 웹 페이지를 생성하여 웹 브라우저에 돌려주는 언어이다. Java EE 스펙 중 일부로 웹 애플리케이션 서버에서 동작한다.

    자바 서버 페이지는 실행시에는 자바 서블릿으로 변환된 후 실행되므로 서블릿과 거의 유사하다고 볼 수 있다. 하지만, 서블릿과는 달리 HTML 표준에 따라 작성되므로 웹 디자인하기에 편리하다. 1999년 썬 마이크로시스템즈에 의해 배포되었으며 이와 비슷한 구조로 PHP, ASP, ASP.NET 등이 있다.

    아파치 스트럿츠나 자카르타 프로젝트의 JSTL 등의 JSP 태그 라이브러리를 사용하는 경우에는 자바 코딩없이 태그만으로 간략히 기술이 가능하므로 생산성을 높일 수 있다.
    -출처 ko.wikipedia.org [본문으로]
  7. Internet of Things의 약어로 IoT는 각종 사물에 센서와 통신 기능을 내장하여 인터넷에 연결하는 기술. 즉, 무선 통신을 통해 각종 사물을 연결하는 기술을 의미한다.
    인터넷으로 연결된 사물들이 데이터를 주고받아 스스로 분석하고 학습한 정보를 사용자에게 제공하거나 사용자가 이를 원격 조정할 수 있는 인공지능 기술이다.
    여기서 사물이란 가전제품, 모바일 장비, 웨어러블 디바이스 등 다양한 임베디드 시스템이 된다.
    사물인터넷에 연결되는 사물들은 자신을 구별할 수 있는 유일한 아이피를 가지고 인터넷으로 연결되어야 하며, 외부 환경으로부터의 데이터 취득을 위해 센서를 내장할 수 있다.
    모든 사물이 해킹의 대상이 될 수 있어 사물인터넷의 발달과 보안의 발달은 함께 갈 수밖에 없는 구조이다.

    정보 기술 연구 및 자문회사 가트너에 따르면 2009년까지 사물인터넷 기술을 사용하는 사물의 개수는 9억여개였으나 2020년까지 이 수가 260억 개에 이를 것으로 예상된다. 이와 같이 많은 사물이 연결되면 인터넷을 통해 방대한 데이터가 모이게 되는데, 이렇게 모인 데이터는 기존 기술로 분석하기 힘들 정도로 방대해진다. 이것을 빅 데이터라고 부른다. 따라서 빅 데이터를 분석하는 효율적인 알고리즘을 개발하는 기술의 필요성이 사물인터넷의 등장에 따라 함께 대두되고 있다.

    시스코 시스템즈의 조사에 따르면 2013년부터 2022년까지 10년간 사물인터넷이 14조 4천억 달러의 경제적 가치가 있을 것이라고 예상한다.
    -출처 : ko.wikipedia.org [본문으로]