본문 바로가기
컴퓨터공학/자바프로그래밍

2. Java의 역사와 특징

by meow0110 2024. 5. 25.

 

■ 인터넷의 발전,탄생과 같은 흐름 속에 있었다 가 중요하다.

■ TCP / IP 가 인터넷 프로토콜의 표준이다.

■ 그리고 WWW의 시작은,  자바같은 프로그래밍 랭귀지의 필요성이 대두되었다.

■ 어떻게하면 효과적으로 사용자에게 서비스할 것인가? 에 대해 고민 >> 점점 Java도 업그레이드 됨.

 

■ 자바는 왜 탄생했는가? 에 대해 말함.

 

■ 초창기 인터넷의 작동 방식 (위쪽 그림)

-문서 : HTML형태다. 

-서버에서 문서 작업을 끝 >> HTML 이 되고 >> 클라이언트에게 옴 >> 클라이언트 Viewer에서 보여줌

 

■ 여기서 질문이 시작됨.

-매번 새로운 문서 요청할떄마다 서버가 부담스럽다. 계속 왔다갔다 하니까.

-그러면! 클라이언트에서 데이터를 갖고 연산을 하면 어떨까에서 Java가 시작됨.

-적당한 양은 클라이언트에서 맡겨볼까?

 

■ 자바의 작동 방식 (아래 그)

-서버에서 문서 + APPlet 도 같이 보냄.

-APPlet : 어플리케이션(Application)보다 좀 더 작은 형태라고 보면 된다. 왜 작아야 해? 초기 인터넷에서는 큰 응용 프로그램을 보내기 힘드니까! 그래서 작게 만든게 APPlet.   

-발전 형태로 본다면  Application > APPlet > App.  다만 크기로 본다면, 현재 App은 Application만큼 큰 편이다. 하지만 인터넷이 빠르기에 문제가 없다!

-클라이언트에서 Computing(프로그램)을 한다. 그리고 서버도 Computing(프로그램)을 한다. 결국 Java는 양 측에서 프로그램을 APPlet을 통해 협조의 방식으로 작동하는것이다. 이게 초기의 Java이다. (이 때는 인터넷이 너무 느렸기 때문에 이런 방식이 효율적이다.)

 

■이런 자바 방식의 문제점

-한마디로 내 PC의 데이터를 볼 수 있다. 즉 스파이웨어같은 행동을 한다.

-다만 스파이웨어는 허락받지 않은 거고, 자바는 내가 허락한 프로그램이다.

-어쨋든 이러한 위험성 때문에 보안과 관련된 부분에서 특징이 생긴다.

 

■ JVM의 탄생배경

-일반적으로 서버에서 클라이언트로 기계어로 만들어진 code를 보낸다.

-근데 모든 클라이언트가 같은 OS를 쓰지 않는다. Window, Linux, 솔라리스, 유닉스 등, 그리고 CPU도 다르다. 그렇기에 기계어가 모두 다르다!

-그러면 서버에서는 어떤 기계어 코드를 보내야할까?

-음...이건 어떨까? 각 OS에 맞춰서 기계어를 맞춰서 보낸다. 근데 이 방법은 개발자를 갈아버린다. 그리고 서버측에서도 너무 비효율적이다.

 

■ JVM이란

-Hard Ware : CPU, 즉 기계어다.

-Firm Ware : 디바이스 드라이버 같은 IOS장치. 그냥 중요하지 않다.

-Operation System(OS) :  운영체제. 이 녀석은 하드웨어(CPU)와 딱 붙어있고, 잘 붙어 있다.

-Middle Ware : 이녀석이 핵심이다! 하나의 통일된 기계어를 보내주면 이걸 모든 종류의 하드웨어와 OS에게도 알려준다. 한마디로 기계어를 기계어로 알려주는 것이다. 

-Application Program : 이 부분은 자바에서 Java Byte Code 라는 기계어가 있다. 알고만 있자.

 

■ 결론

-App Program에서 표준기계어가 온다. 동시 통역사 Middle Ware가 이걸 OS와 하드웨어가 알아듣는 방언 기계어에 맞게 통역해준다!   (표준어)안녕하세요 >> 통역사 >> 훈저옵서에 (제주방언)   뭐 이런 느낌이 아닐까 생각한다.

-즉 이러한 미들웨어가 바로 JVM(Java Vitual Machine)이다.

 

■ 이 부분은 강의에 없었다. 뭔가 이상하다. 내가 알아서 알아본것들

■ Portability 

-소스 코드나 실행 파일이 하드웨어 혹은 운영체제에 무관하게 실행 가능하다는 의미

-Java의 실행 파일은 class 확장자를 가지며, JVM이 설치된 환경에서 실행 가능

 

■ Code Security

-소스코드를 작성함에 있어 제한을 둠. 즉 나쁜짓 못하게!

-메모리 접근을 하게되면 무엇이든 마음대로 할 수 있다. 예를들어 C언어는 메모리 접근이 가능하다. 그래서 위험하다.

 

■ Garbage collection 

-쓰레기 분리. 여기서는 메모리 정리를 해주는 거라고 보면 된다.

-C언어에서는 메모리 접근이 된다. 그래서 잘 쓰고 잘 반납해야한다. 안그러면? 블루 스크린이 뜬다. 조금만 잘못해도 이러한 위험성이 있다.

-근데 자바는 알아서 해준다. 편리해!

 

■ 자바는 설계부터 객체지향적이었다. 그래서 특성중에  Is a 관계 (포함 관계) 가 있다. 아래에서 자세히 보자.

■ 많은 언어들이 객체지향을 담아낸다. C(절차지향)에서 C++(객체지향)갈 때다.

 

■ 추상화 = 일반화 

-데이터적으로 볼 때,  벤츠, 아우디는 자동차라고 생각한다.

-벤츠와 아우디는 자동차의 속성을 가지고 있으니까.

-그래서 벤츠,아우디는 자동차에게 상속관계이다.

■ 구체화

-자동차를 구체적으로 본다면 아우디와 벤츠가 있다.

 

■ EE = 엔터프라이즈 에디션 = 기업형 솔루션이다.

■ 서버를 개발할 때, 서버에 최적화된 자바다. 이게 Java EE다.

 

■ 여기서 궁금증. 어? Java는 원래 클라이언트와 협조하는거 아닌가? 근데 왜 기업중심의 솔루션을 내는가? 

-Robustness(안정성) : 메모리 관리? JVM이 해줘. 안정성을 높이기 위해 Garbage collection이 해줘,데이터를 맘대로 형변환도 못하게 제한을 뒀네? 어...? 안정성이 엄청나네? 좀 실수해도 안정적으로 돌아가네?

■ 다른 프로그램들은 메모리 잘못 건드리면 프로그램 전체가 나가버린다. 그런데 Java는 위같은 이유로 안정성이 대단하다.

■ Java Class :

-자바 실행파일인 APPlet이 넘어가는 형태

-코드를 넘기긴 하는데, 형태가 달라졌다. 그리고 규모도 달라졌다.

-이게 아래의 PPT에서 볼 수 있는 안드로이드이다.

 

■ Java Script:

-소스 코드가 실행될 컴퓨터로 이동함

-웹에서 여전히 많이 쓰인다.

 

 

■네트워크 서버: 위에서 언급되었던 J2EE를 말한다.

 

■ 디바이스 (안드로이드)

-안드로이드를 JVM이라고 생각하자. (자바가 하드웨어이자, 운영체제이다.)

-동작할 수 있는 프로그램(앱) 을 보내서 JVM에서 확인한다.

 

■ 결론 :

-우리가 안드로이드에서 앱 다운받고, 그걸 쓰는 방식이 Java Class의 방식이라고 보면 된다.

-결국 자바는..원래 Web에서 쓸려고 했던건 Java Script가 물려 받게 되었고,

-이제는 안드로이드(JVM), 서버에서 많이 쓰이게 되었다!

 

 

알아서 깔자-ㅅ-

 

 

 

학습정리

1. Java 언어의 탄생 배경

  • 인터넷의 발전: 인터넷상에서 이동성을 갖추려는 시도 ▶ 보안성이 필요하게 됨
  • 객체 지향: 데이터 중심 설계의 필요성에 맞춰서 개발됨
  • 다중 처리: 멀티 태스킹을 응용 프로그램에서 관리할 수 있도록 설계됨

2. JVM의 특징

  • Portability 확보
  • 네트워크 보안성 확보
  • 운영체제 위에 존재하는 운영체제의 역할 수행
  • 다수의 업체들이 동일한 표준으로 구현