💬 엄청 기초적이면서도 아직은 좀 어려운 개념!!!!!!
자바란 과연 무엇일까🤔
1995년 미국의 '썬마이크로시스템즈'라는 회사에서 개발한 객체지향 언어로,
컴퓨터 프로그램(애플리케이션)을 만드는 데 사용된다.
현재 17버전까지 출시되었다.
그렇다면 자바는 어디에 사용될까?
출처: http://www.soen.kr/book/java/book/124.htm
보이는것처럼 웹개발뿐만 아니라 모바일, 애플리케이션 개발에도 두루두루 사용된다.
1. OOP(객체지향언어프로그래밍)
자바는 객체지향프로그래밍언어이다!!
객체지향프로그래밍의 대표적 특징에는 상속,캡슐화(은닉),다형성,추상화
총 4가지가 있는데, 이 4가지 특성을 이용하면 코드의 재사용성이 증가하고 유지보수가 쉬워진다.
객체지향에 대해서는 다음에 더 자세하게 다뤄보겠다!😅
2. 자동 메모리 관리
자바는 C/C++ 처럼 개발자가 직접 메모리를 해제하는것이 아닌,
JVM이 지속적으로 메모리를 감시하면서 더이상 사용되지 않는 메모리를 해제시켜준다!!
여기서 자바는 Garbage Collection
을 통해 메모리 관리를 자동으로 수행해준다.
3. 독립적인 운영체제
자바는 Java Virtual Machine 위에서 돌아가기 때문에 자바의 개발 환경과 배포환경이 다르더라도 프로그램을 다시 컴파일 할 필요 없이 실행 가능하다!
Java Virtual Machine에서 별도의 Java Compiler를 통해 사용자의 코드를 Byte 코드로 변환하기때문에, 모든 자바 프로그램은 이론적으로 CPU나 운영체제의 종류와 무관하게 동일하게 동작합니다.
Java Virtual Machine 구조 (출처:위키피디아)
4. 멀티쓰레드 프로그래밍 가능
자바는 하나의 프로그램에서 여러 개의 쓰레드가 동시에 실행할 수 있는 환경을 지원한다.
또한 C/C++은 운영체제의 도움을 받아 멀티 쓰레드를 수행하지만,
자바는 운영체제 지원없이 멀티스레드 프로그래밍이 가능하다.
멀티스레드란?
여러 스레드(프로그램의 실행단위, 프로세스 내 주소공간 및 자원 공유함)를 동시에 실행시키는 응용프로그램을 작성하는 기법입니다. 장점은 프로세스 내 메모리 공유를 통해 시스템 자원 소모가 줄어든다는 점이지만, 반면에 자원을 공유하기 때문에 충돌이 일어날 수 있습니다.
멀티쓰레드 구현방법
1) Thread 클래스 (화이트박스 방식)
: 자바에서 스레드를 만들기 위해 Thread class 상속하여 스레드를 생성합니다.
( Thread pool : 필요시 스레드를 가져오거나 이전 코드에서 실행완료되었을 때 재사용하는 풀)
2) Runnable 인터페이스 (블랙박스 방식)
: Thread class와 같이 자바에서 스레드 실행시키는 인터페이스입니다.
: 다중상속이 지원되기 때문에 Thread clas보다 많이 쓰입니다
5. 동적 로딩(Dynamic loading)을 지원
자바는 애플리케이션이 실행될 때 모든 객체가 생성되지 않고,
객체가 필요한 시점에 클래스를 동적 로딩하여 생성한다.
동적로딩(Dynamic Loading)은 클래스 일부 변경 시 다시 컴파일하지 않아도 되는 이점이 있으며, 비교적 적은 작업으로 처리할 수 있는 유연성을 동적로딩이 제공한다.
반면에 그때 그때 메모리에서 불러오기 때문에 프로그램 실행 속도가 정적로딩에 비해 느리다.
(정적 로딩은 프로그램 실행 시 모든 실행파일이 메모리에 적재되어 실행되는 로딩방법으로, 대표적으로 C언어가 해당)