■ 인터넷의 발전,탄생과 같은 흐름 속에 있었다 가 중요하다.
■ 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 확보
- 네트워크 보안성 확보
- 운영체제 위에 존재하는 운영체제의 역할 수행
- 다수의 업체들이 동일한 표준으로 구현
'컴퓨터공학 > 자바프로그래밍' 카테고리의 다른 글
6. 조건문 심화 (0) | 2024.06.29 |
---|---|
5. 프로그램을 프로그램답게 만드는 조건문 (0) | 2024.06.12 |
4. 변수의 형 변환과 기본 연산자 (0) | 2024.06.05 |
3. 데이터를 담는 공간 변수와 기본 연산자 (0) | 2024.05.30 |
1. 프로그래밍 언어 개론 (0) | 2024.05.22 |