본문으로 바로가기

자바의 역사와 자바에 대하여 java

category IT 프로그래밍 2017. 12. 25. 21:11




Java의 역사
1995년 자바의 아버지라고 불리는 제임스 고슬링과 그의 동료들에 의해서 시작된 프로젝트다. Java는 원래 가전제품을 제어하기 위한 언어로 고안되었지만 웹의 등장으로 엄청난 성공을 거두면서 주류 언어가 되었다. 역사에 대한 더 자세한 내용은 직접 찾아보자.

자바의 역사
Java의 현재
한국에서는 정부나 기업의 시스템 통합 프로젝트가 대부분 자바로 구현되기 때문에 자바는 기업용 시장에서 두각을 나타내고 있다.


자바에서 소프트웨어를 개발하는 방법에는 응용 프로그램과 애플릿의 두 가지 방법이 있다. 응용 프로그램은 이제까지 소프트웨어를 개발해왔던 것처럼 MS-DOS, 유닉스, 마이크로소프트 윈도와 같은 운영 체제에서 실행하기 위해 만드는 소프트웨어를 말한다. 애플릿은 운영 체제에서 실행되는 것이 아니라 웹 브라우저 안에서 실행되는 소프트웨어이다. 따라서 웹 브라우저에서는 자바 응용 프로그램을 실행할 수 없고, 자바 애플릿으로 프로그램을 만들어야 한다. 하지만 자바 응용 프로그램으로 작성하면 MS-DOS, 유닉스, 마이크로소프트 윈도와 같은 운영 체제의 화면 프롬프트에서 자바 응용 프로그램을 실행할 수 있다.









시스템 통합이란? System Integration의 약자로 기관이나 기업의 업무 관리를 소프트웨어화하는 것을 의미한다. 예를 들어 병원에 대한 SI라고 한다면 환자의 상태와 의료진의 상태에 따라서 효율적으로 진료가 이루어지게 한다거나, 제조 공정이라고 한다면 생산설비의 상태를 시스템적으로 관리하는 것이 있을 것이다. 아래는 국내에 대표적인 SI 업체인 삼성 SDS에서 하는 일에 대한 소개이다. http://www.sds.samsung.co.kr/bizintro/service/overview.jsp
모바일 플랫폼인 안드로이드가 대성공을 거두면서 자바의 수요가 급증했다. 현재(2013년 말) 모바일 시장에서 안드로이드의 점유율이 80%를 넘은 상황이다. 더불어서 자바의 중요성은 더욱 커지는 중이라고 할 수 있다.


Java의 특징
기술 진보는 '절망의 성숙'을 통해서 이루어진다. 자바 이전에도 많은 언어들가 있었다. 이들 선배 언어들은 그 언어가 소속된 시대의 문제를 해결하기 위해서 고안되었다. 마침내 이들 언어들가 문제를 해결했을 때 이 언어들은 새로운 문제에 직면하게 된다. 문제들은 점점 처치 곤란한 절망이 되고 그 절망이 충분히 성숙했을 때 비로소 새로운 도약지점이 보이기 시작한다. 자바라는 언어를 온전하게 이해하기 위해서는 자바 이전 세대의 기술들이 초래한 절망을 이해해야 할 것이다.



하지만 자바는 이제 새로운 언어가 아니다. 주류 언어이자 고전언어의 반열로 추대되는 분위기다. 자바의 시대가 왔지만, 정작 지금 시점에서 자바를 배우는 사람들은 지금의 자바를 있게 한 그 절망을 경험하지 못한 세대일 가능성이 크다. (최소한 필자가 그렇다.) 그래서 필자는 지금 이 시점에서 역사적 맥락에서만 파악될 수 있는 자바의 상대적인 특성은 언급하지 않는 것이 좋겠다고 생각했다. 이러한 내용은 자바의 특징 링크를 참고하자. 또한, 객체지향처럼 단편적인 설명만으로는 오히려 혼란만을 초래할 수 있는 개념도 지금 소개하지 않을 것이다. 이러한 개념은 구체적인 코드를 보면서 설명해야 불필요하게 철학적으로 빠지지 않는다. 그렇게 빼다보니까 가상머신이 남았다. 그런데 가상머신의 핵심적인 가치라고 할 수 있는 '동일한 프로그램이 운영체제 가리지 않고 실행된다는 특성'은 C나 C++과 같은 기존의 언어에서는 혁명적인 발상이지만, 오늘날 대세가 되고 있는 고급언어들(Python, Ruby, PHP, JavaScript)의 관점에서는 그렇게 대단한 것이 아닐 수 있다. 그래서 필자는 지금 자바의 특성을 언급하지 않을 생각이다. 그러고보니까 정작 지금 단계에서 자바의 특징을 이야기 할 것이 남아있지 않다. 차차로 알아가도록 하자. 





학습방법
대신에 초심자에게 자바라는 언어가 어떻게 다가올 수 있는지를 소개하는 것이 좋을 것 같다. 만약 독자가 C를 했다면 자바의 객체지향이 어렵게 느껴질 수 있다. 그 외에는 큰 어려움은 없을 것 같다. C++를 했다면 자바의 객체지향은 C++의 급진적인 객체지향을 좀 더 현실적인 방향으로 다듬은 것처럼 느껴질 수 있을 것 같다. 쉬울 것 같다. 반면에 프로그래밍을 처음 시작하는 분이라면 자바 보다는 차라리 자바스크립트를 먼저 공부하는 것이 추천하고 싶다. 거칠게 표현하면 자바스크립트는 자바 보다 훨씬 쉽다. 그러면서 최근에는 차차로 자바의 경쟁자로 부상하고 있는 중이다. 자바스크립트로 프로그래밍에 대한 감을 조금 익히고 자바에 도전한다면 좀 더 수월할 것 같다. (자바스크립트 강의)




하지만 안드로이드 프로그래밍을 하고 싶다거나, 또는 합류한 직장이 자바를 쓰고 있다면 자바를 해야 한다. 이런 경우는 이를 악물고 도전하는 수 밖에 없다. 물론, 필자는 프로그래밍을 처음 시작하는 입문자를 상정하고 이 수업을 만들 것이다.












자바 프로그램의 동작
자바로 프로그램을 만들기 위해서는 아래와 같은 과정이 필요하다.

코드 작성
컴퓨터가 실행할 수 있는 형태로 코드를 컴파일
컴파일된 프로그램을 실행
용어
Java를 처음 접하면 혼란스러운 경험을 하게 되는데 다양하고 복잡한 버전들 때문이다. 이것들에 대한 정리를 좀 하고 설치를 진행하자.








Java SE, JDK, JRE
Java SE(Java Platform, Standard Edition)는 자바의 표준안이다. 자바라는 언어가 어떠한 문법적인 구성을 가졌는지와 같은 것들을 정의하고 있다. 이것은 구체적인 소프트웨어가 아니고 그 소프트웨어의 설계도라고 할 수 있다. 소프트웨어에서는 설계도라는 표현 대신에 명세서(spec, specification)이라는 말을 사용한다. 이 명세서에 따라서 Java가 만들어지게 된다. Java SE 7은 버전 7에 대한 명세서이다. 자바는 계속 진화하고 있는 기술이다. 이 명세서는 JCP(Java Community Process, http://jcp.org)라는 조직을 통해서 만들어진다.

JDK(Java Development Kit)는 Java SE의 표준안에 따라서 만들어진 구체적인 소프트웨어다. Java 개발자라면 JDK를 다운받아서 설치해야 한다. 여기에는 Java 프로그램을 실행하면 Java 코드를 컴파일하는 컴파일러와 개발에 필요한 각종 도구 그리고 JRE가 포함되어 있다. 즉 개발자를 위한 자바 버전이다.

JRE(Java Runtime Environment)는 자바가 실제로 동작하는 데 필요한 JVM, 라이브러리, 각종 파일들이 포함되어 있다. 자바로 만들어진 프로그램을 구동하려고 한다면 이것을 설치한다. 일반인을 위한 자바 버전이라고 할 수 있다.

JVM(Java Virtual Machine) JVM은 자바가 실제도 구동하는 환경이다. 자바로 만들어진 소프트웨어는 JVM이라는 가상화된 환경에서 구동되고, 하드웨어나 운영체제에 따라서 달라질 수 있는 호환성의 문제는 운영체제 버전에 따라서 만들어진 JVM이 알아서 해결한다. 즉 하나의 자바 프로그램을 만들면 어떤 환경에서도 실행할 수 있는 것이 바로 JVM의 역할이라고 할 수 있다.

이 관계를 그림으로 나타내면 아래와 같다.












버전
Java 의 버전은 역사적인 이유로 복잡하다. 현재 2013년 12월 기준으로 Java의 정식 명칭은 'Java SE 7'이다. 하지만 이것을 JDK 1.7이라고도 하고, JDK 7이라고도 하므로 혼란이 있다. 자바의 역사에 대해서는 Java version history를 참고한다.

JDK의 분류
자바의 개발환경인 JDK에는 3가지가 있다. 이 중에 가장 중요한 JDK는 Java SE다. Java SE는 Java EE나 Java ME의 기반 환경이기도 하므로 무엇을 하든 간에 Java SE를 JDK를 설치해야 한다. 우리 수업은 Java SE를 다룬다.

Java SE (Standard Edition)
자바의 핵심으로 일반적으로 자바라고 하면 Java SE를 의미한다. 우리 수업은 Java SE에 대한 수업이다.
Java EE (Enterprise Edition)
기업용 시장에서 사용하는 자바 개발환경
Jave Me (Micro Edition)
모바일 개발을 위해서 사용하는 자바 버전
설치
Java를 설치해보자. 우선 가장 기본이 되는 Java SE JDK를 설치한다. 설치 과정에서 혼란스러운 용어가 많이 등장할 것이다.

자바를 설치하는 방법은 운영체제마다 다르다. 운영체제 별로 자바를 설치하는 방법에 대해서 다른 토픽을 통해서 다루고 있기 때문에 자신의 운영체제에 맞는 자바 설치 방법을 찾아서 설치를 진행하자.









객체지향이란

프로그램이 길어지고 복잡해지면 변수(숫자가 들어가는 자리)도 많아지고, 코드 또한 길어져서 해석하는데 시간이 오래 걸립니다. 그래서 프로그램을 짤 때 동일한 목적이나 기능을 하는 변수와 함수들을 각각 하나로 묶어서 object(객체)로 만들고 그 객체들끼리 상호 통신하면서 프로그램 전체가 돌아가도록 코드를 구성했는데, 이것이 바로 객체지향 프로그래밍입니다.

객체지향 프로그래밍을 활용하면 어떤 오류가 발생했을 때 프로그램 전체를 살펴보지 않고 각 객체들을 살펴보면서 수정을 할 수 있습니다. 과거에는 발생한 오류를 찾아내고 수정하는데도 애를 먹었지만, 객체지향 프로그래밍을 활용하면서 훨씬 효율적으로 대처할 수 있게 된 것입니다. 또한 이렇게 함으로서 프로그램의 크기도 줄일 수 있게 되었습니다.


예를 들어, 반 친구들은 모두 이름도 다르고 개성도 다르지만 ‘사람’이라는 동일한 존재들이지요. 여기에서 ‘사람’처럼 하나의 추상화된 클래스가 있고 사람의 속성을 가진 미영이, 영수, 철수 등 각각의 개인들이 있는 것처럼 객체라는 하나의 큰 틀을 만들고 그 속성들을 지닌 존재들을 만들어내는 것이 객체지향 프로그래밍 입니다.

다른 예로 붕어빵을 들어볼까요? 붕어빵 틀이 있고 그 틀을 이용해서 붕어빵을 만들어내지요. 붕어빵 틀의 경우처럼 클래스 코드를 작성해놓고 이 클래스를 틀로 삼아서 객체들을 찍어내는 방법이 바로 객체지향 프로그램인 것입니다.


붕어빵을 만들 때 그 안에는 팥, 초코, 슈크림 등 다른 맛을 집어넣어서 붕어빵을 만들어낼 수 있습니다. 이처럼 객체들을 찍어낼 때 그 안의 데이터 값을 변화시켜 각각 다른 종류로 만들어낼 수 있습니다.

객체지향 프로그래밍은 객체들이 만들어지고 각 객체들끼리 자기의 일을 하면서 다른 객체와 소통하도록 프로그래밍 되어 있어서 실제 사람들이 사는 세상과 비슷한 형태로 모델링 한다는 특징이 있습니다.









Java 의 identifier
식별자라고 번역하며, 클래스명, 메소드명, 멤버변수명 등과 같이 프로그래머가 작성해서 사용하는 단어들이다.
identifier 의 길이는 제한이 없고, 첫글자는 반드시 영문, '_', '$' 으로 시작해야한다.
대,소문자를 구별합니다.
클래스명은 첫글자는 대문자로 나머지는 소문자로 해야 합니다.
멤버변수명, 메소드명, 지역변수명은 첫글자는 소문자로 시작하고 단어 단위는 대문자로 해도 된다. (intKey)



Java 의 Keyword
Java의 keyword는 모두 소문자로 구성된다.
자바시스템에 의해 정의된 용어들이므로 프로그래머가 함부로 identifier로 사용할 수 없다.













data-matched-content-rows-num="3" data-matched-content-columns-num="4" data-matched-content-ui-type="image_card_stacked"

--