Language#1.JAVA 개념정리 (자바의 탄생)



오늘부터 ‘java 공부를 비롯한 기본적인 프로그래밍’ 공부내용을 복습해볼 겸 포스팅을 해보려한다.

포스팅 내용은 능력 있는 개발자님들 블로그에서 주섬주섬 가져와 정리한 부분이 일부 있어 출처 남긴다.

우선 전공자이지만, 누가 물어봤을때 명확히 대답하기 어려운 부분이 상당히 많았기에 그런 부분 위주로 정리했다.


1. 프레임워크, 라이브러리, 아키텍처

전공자이기에 지겹도록 들었지만 사실 누가 물어봤을 때 정확히 설명하기 힘든 부분이었다.

참고 링크 : https://blog.gaerae.com/2016/11/what-is-library-and-framework-and-architecture-and-platform.html

개인적으로는 위 링크의 블로그를 보고 이해에 큰 도움이 됐다.

자동차로 비유하신 것이 이해하기 참 쉬운것 같다.

다음은 위 내용을 응용해서 스스로 정리해본 프레임워크, 라이브러리, 아키텍처의 개념이며 아래와 같다.

  • 라이브러리(library) : 자주 사용하는 유용한 코드들의 집합. 위키백과에서는 ‘소프트웨어를 개발할 때 사용하는 비휘발성 자원의 모임’이라 정의하고 있다. 코드들의 집합이라면 함수라고도 부를 수 있을 것 같은데, 1회성이 아닌 재활용의 가능성이 있는 코드들을 패키지화시켜서 클래스나 메소드로 만들어 놓은 것이라 정리했다.

    [ 축구에 비유를 해보자면(?) 선수가 공을 가슴 트래핑할 때 “허리를 몇 도로 굽히고, 가슴을 가져다 댈 때는 어느 정도의 세기로 갖다 대며, 순간 몸의 전체적인 자세는…” 이라고 복잡하게 생각할 것을 ‘그냥 가슴 트래핑한다’라는 사람의 경험과 감각으로 그런 과정을 생략하는 것. 이를 라이브러리를 사용하는것으로 예를 들 수 있을 것 같다.  ]

  • 프레임워크(Framework) : 프로그램의 틀을 구성하는 집단. 다수의 라이브러리를 복합적으로 탑재한 틀이라고 볼 수 있고, 원하는 기능 구현에만 집중할 수 있도록 만든 툴이라고 할 수 있다. 개인적으로는 자바와 파이썬 경험자로 웹개발 시 Spring과 Django를 사용해봤는데, 특히 자바로 프로젝트 개발 시 Spring으로는 서버단 개발에 프레임워크가 없다면 작업이 안될 정도로 중요한것 같다.

  • 아키텍처(Architecture) : 프로그램의 전체적인 설계도. 아키텍처 같은 경우는 말 그대로 구조를 명시하는 부분이기 때문에 프레임워크와 라이브러리에 비해 이해하기 쉬운 것 같다. 건물이나 자동차의 청사진에 비유하면 알맞으며, 실무에서는 초보 개발자가 아키텍처를 만지는 일이 거의 없는것으로 알고 있다. 보다 간단히 설명하면, 시스템의 동작원리부터 구성환경설계를 거쳐 최적화까지 사전 구조를 설정하는 것이다.
  • 플랫폼 : 추가적으로 플랫폼까지 정리해보려 한다. 플랫폼은 프로그램이 구동되는 환경이라고 생각한다. 똑같은 종류의 장비를 만들어도 해당 장비가 어디에 쓰이냐에 따라 용도가 달라지듯, 최초 프로그램을 설계할 때 윈도우 혹은 mac OS나 안드로이드와 같이 구동되는 환경이 다른 경우로 설명할 수 있을것 같다.

2. 자바(JAVA)의 탄생 : “Why Java?”

 ”JAVA는 썬 마이크로시스템즈에서 개발했으며, 객체지향 프로그래밍 언어이다.”

 1990년 초 가전기기 어플리케이션 개발 과정에서 종속적인 플랫폼을 사용해야만 하는 C언어 대신, VM(Vurtual Machine : 가상머신)을 구현해 플랫폼 독립구조를 가지는 ‘Oak’라는 언어가 개발됐다 (썬의 그린프로젝트). 초기에는 각광받지 못하는 언어였으나 1990년대 중반부터 인터넷이 발전하고, 인터넷을 사용하는 컴퓨터들에서 동일하게 동작하는 언어가 필요하면서 이름을 ‘JAVA’로 명명하여 발표하게 됐다.

이후 JAVA(이하 자바)는 Web Client의 Applet(플러그인의 하나로 전용 위젯 엔진) 기술에 쓰여지다가 현재는 Web Server, Application Server 프로그램 구현 및 Android Platform 개발까지 확대되어 사용되어지고 있다. (최근에는 구글이 자바보다 코틀린을 밀고..)

자바 플랫폼은 크게 3가지로 분류가 있으며 기본 JAVA 언어인 JavaSE, 기업용 서버프로그래밍 지원용인 JavaEE, 그리고 소형기기들을 지원하기 위한 JavaME로 구분된다.

 또한 자바는 C언어 같은 절차 지향 언어가 아닌, 인간의 사고와 가까이 제작된 객체지향 언어이며 운영체제에 종속되지 않고 독립적으로 사용할 수 있는 언어이다. 이는 자바가 위의 설명처럼 JVM(Java Vurtual Machine)이라는 가상 머신 위에서 동작하기 때문이다. 이러한 가상머신위에서 동일한 코드로 구동되기 때문에 플랫폼에 상관없이 구동되며, 이식성이 우수하다는 장점이 있다. (객체지향 관련해서는 https://zunoxi.tistory.com/16 포스팅을 참고하면 될것같다.)
 

3. 가비지 컬렉터(Garbage Collector)

 자바는 가비지 컬렉터에 의해 메모리가 관리된다. C언어의 경우 별도의 메모리를 해제시키는 문법이 있지만 JAVA는 없다. OS로부터 메모리를 할당받고 반납하는 전 과정에 가비지 컬렉터가 개입되며 ‘주소를 잃어버린 메모리’(가비지)를 정리해주는 역할을 한다.  JVM이 OS에 추가로 메모리를 요청할 때와 idle time에 가비지 컬렉터가 실행된다. 

자바의 동작과정과 가비지컬렉터에 대한 설명은 https://aljjabaegi.tistory.com/387 블로그를 참고 :)

4. 절차 지향 언어와 객체지향 언어는 무슨차이?

 ’절차 지향 언어‘는 단어 그대로 순차적으로 실행되는 언어이다. 대표적으로 C언어를 예로 들 수 있다. 컴퓨터의 작업 처리 방식과 유사하게 처리되는 언어이기에 매우 빠른 속도를 자랑한다. 단, 순차적으로 실행되기에 코드 순서가 바뀌면 기존과 다른 실행 결과가 나오기 때문에 유지보수가 힘들다는 점이 단점니다.

 ’객체지향 언어‘는 소스들을 클래스로 묶은 후 오브젝트 즉, 객체라고 지칭하며 이를 기준으로 코드를 나누어 실행하는 방식의 언어이다. 이는 인간의 사고방식과 유사한 처리방식이기에 코드 작성의 재사용을 원활하게 해 주며 코드를 객체화시키기 때문에 유지보수에 용이하고 대규모 프로젝트 수행에 적합하다. 단, 지나친 객체 생성은 현실 세계와 괴리감이 있을 수 있다는 단점이 있다.

5. SDK와 API란?

 ’SDK’ 는 Software Development Kit 으로 소프트웨어 개발 도구 모음이며, ‘API’ 는 Application Programming Interface의 약자이고 응용프로그램 프로그래밍 인터페이스라고 칭한다. SDK는 소스편집기, 컴파일러 등과 같으며 현재는 API와 거의 같은 의미로 사용된다. 여기서 API는 특정 응용 프로그램을 위해 제공되는 메소드의 집합이자, 사용자와 제작자 간의 연결고리라고 할 수 있다. 워낙 포괄적으로 많은 의미로 사용되기에 정확히 설명하기는 힘들지만, 예를 들며 조금 더 이해도를 높여 보겠다.

 ’지도API’를 예로 들면 지리위치와 함께 제공되는, 다양한 정보를 포함하는 전체 프로그램들을 사용자에게 제어할 수 있게끔 권한을 제공해주는 것과 같다. 즉, 사용자가 처음부터 프로그래밍할 필요 없이 API 개발자가 제작한 프로그래밍 소스들을 사용자의 서비스에 사용할 수 있게 도와주는 중간 매개체라고 할 수 있다.




© 2019.04. by zunoxi

Powered by zunoxi