자바는 결국 각기 다른 전자기기의 칩들이 다르기 때문에 그러한 플랫폼에 상관없이 사용한다는 목적을 가지고 만들어졌다.
어떠한 방식으로 위에 문제점을 극복했을까?
바로 API를 이용한 방식이다
1. API(Application Programming Interface)란
*API는 정말 다양한 방식으로 해석되지만 자바의 시야에서 내가 배운 것들만 가지고 해석을 한번 해보려 한다.
API는 함수 형태로 제공되고 있다. 그 이유는 코드의 은닉화, 파편화, 집중화가 가능해진다.
1) 코드의 은닉화 : 함수내부의 멤버와 로직에대해 사용자는 알수없으며 코드 내용이 함축되어있는 함수만을 사용할 수 있다.
2) 코드의 파편화 : 분열된 코드들을 치환해 한 곳으로 모아서 간추릴 수 있다.
3) 코드의 집중화 : 함수 내의 코드를 수정을 해도 큰 틀은 변하지 않는다.
자바는 응용프로그램을 만들 때 직접적인 입/출력 대신 운영체제가 제공하는 간접적인 접근 도구인 API를 이용한다면 각기 다른 장치에서도 응용프래그램에서의 호환이 가능하다.
그럼 입출력은 API가 담당한다면 운영체제가 다르다면 어떻게 할까? 그래서 자바는 컨파일러로 바이트코드까지 컨파일을 한 뒤 클래스 파일을를 JVM(Java Virtual Machine)에게 보낸 다음
각 운영 체제에서 인터프리터로 해석해서 사용하도록 했습니다. 어떤 플랫폼에서도 운영체제와 상관없이 독립적인 언어인 JAVA입니다
자바는 운영체제가 제공해주는 API를
사용하지않고 독립적인 API를 만들었다 왜
제공해주는 API 말고 독자적인 API를 썼을까?
자바가 개발되기전 그 당시 미국에서는 전역에 케이블이 깔려있었는데 그 케이블은 양방향 통신 기능이 있었습니다. 하지만 아직까지는 아날로그 한 방식으로 즉 단방향통신으로 사람들이 TV를 사용을 하고 있었습니다
선마이크로시스템즈는 사용자에게 입력값을 받아서 양방향 통신을 하는 전자기기를 만들려고 했습니다.
그러긴 위해선 문제가 있었는데 모든 기기의 회사들이 다르기 때문에 자신이 사용하는 언어가 모든 플랫폼에서 구동되어야 하는 조건이 있었죠. 또한 각기 다른 CPU에서도 실행이 되어야 한다는 조건이 있었습니다.
첫 번째 문제에서는 다양한 운영체제에서도 호환되도록 운영체제에 따른 기기들을 통일시켜주는 가상 머신을 만들어서 운영체제 위에 올리자라는 생각으로 자바 플랫폼이 만들어지게 되는 것입니다.
처음엔 c++로 플랫폼을 만들려 했지만
c++의 문제점인 간결하지 않고 여러 사람이 코드를 작성할 때 표준을 잡기 어려운 문제와 c++로 만든 프로그램은 메모리 관리나 자원관리를 프로그래머가 직접 처리해야 되기 때문에 메모리 누수현상이 발생한다는 문제와 c++은 컬렉션 라이브러리를 제공하지 않는다는 것 때문에 새로운 언어인 JAVA를 만들게 됩니다.
운영체제 위에 자바 플랫폼을 올려서 각 운영체제가 번역할 수 있게 컴파일된 코드를 전달해주어 운영체제에서 해석하도록 하는방식으로 다양힌 플랫폼에서도 문제없이 사용되도록했습니다.
그럼 API란?
우리가 배운 대로라면 애플리케이션을 만들 때 사용하는 간접적인 도구이다.
명령들을 간접적으로 운영체제나 서버 혹은 각 플랫폼에 전달을 해주는 역할을 하는 것이다.
여러 가지 API들이 있는데 공공API,REST API,웹 API,카카오톡 API... 등등
우리는 간접적인 도구인 API를 사용하므로써 변경이나 수정에 영향을 받지않고 독립성을 지킬 수 있습니다
왜 함수형태인가?
API는 함수형태로 제공되고 있습니다 그 역인 함수는 API라는 말은 성립되지 않습니다.
함수형태로 제공됬을때 이점은 장치들이 변경됬을때 그 장치를 사용하는 프로그램들의 내부코드를 전부 변경할 필요없이 API를통해 장치들을 이용했으므로 각 장치의 변경된 드라이브(정의)만 새롭게 다운로드해주면 됩니다.
간접적으로기능만을 사용하는 사용자입장에선 외부의 수정이 직접적으로 영향을 미치지 못하기때문입니다.
자바 API를 검색하고 볼 수 있는 링크
https://docs.oracle.com/en/java/javase/13/docs/api/index.html
'웹 프로그래밍 기초 > 자바기반의 웹&앱 응용SW 개발자' 카테고리의 다른 글
자바기반의 웹&앱 응용 SW개발자 양성과정 2일차 -7 (0) | 2020.02.20 |
---|---|
자바기반의 웹&앱 응용 SW개발자 양성과정 2일차 -6 (0) | 2020.02.20 |
자바기반의 웹&앱 응용 SW개발자 양성과정 1일차 -4 (0) | 2020.02.19 |
자바기반의 웹&앱 응용 SW개발자 양성과정 1일차-3 (0) | 2020.02.19 |
자바기반의 웹&앱 응용 SW개발자 양성과정 1일차-2 (0) | 2020.02.18 |
댓글