[Java] 객체 지향의 개념 및 자바의 특징
자바(JAVA)란 무엇인가?
자바(JAVA)
"인터넷 친화적인 객체 지향 언어"
우리가 흔히 알고 있는 자바(JAVA)는
1995년 선마이크로시스템즈(Sun MicroSystems)에서 개발한 객체 지향 언어이다.
C++과는 달리, 처음부터 탄생의 목적이 객체 지향 언어로 개발되었으며
현재 자바는 전 세계에서 가장 많이 사용하는 프로그래밍 언어 중 하나이다.
자바(JAVA)의 특징
자바(JAVA) 언어로 개발된 프로그램은 소스 파일을 다시 수정하지 않아도, 자바 실행환경(JRE: Java Runtime Environment)만 구축되어있으면 어떤 운영체제에서든 모두 실행이 가능하다. 이러한 특징 때문에 자바(JAVA) 언어는 이식성이 높다.
ex) 리눅스 환경에서 작성한. java파일을 자바 실행환경(JRE: Java Runtime Environment)이 구축된 윈도 10에서 실행이 가능.
2. 객체 지향 언어(Object Oriented Programming)이다.
자바는 처음부터 객체지향 프로그래밍(Object Oriented Programming) 2을 위해 설계되었다. 객체(Object, 부품)를 만들기 위해 설계도(Class, 클래스)를 작성해야 하고, 객체(Object, 부품)와 객체(Object, 부품)를 연결해 목적에 맞는 프로그램을 만들어내는 방식이다. 그렇기 때문에, 자바(JAVA)는 아무리 작은 프로그램이라도 객체를 만들어 사용한다.
-
처음부터 객체를 고려해 설계되었기 때문에, 객체지향 언어가 가져야 할 캡슐화(Encapsulation), 상속(Extends), 다형성(Polymorphism)등의 기능을 완벽하게 지원한다.
3. 함수적 스타일 코딩을 지원한다.
함수적 스타일의 코딩 방식인 람다식(Lambda Expressions)을 지원한다. (JAVA 8부터)
람다식을 사용하면 컬렉션의 요소를 필터링(Filtering), 매핑(Mapping), 집계(Collection) 처리하는 것이 쉬워지고,
코드가 매우 간결해진다.
4. 메모리를 자동으로 관리한다.
다른 객체 지향 언어인 C++에서는 메모리에 생성된 객체를 제거하기 위해 개발자가 직접 코드를 작성한다.
이 작업을 진행하지 않을 경우, 생성된 객체가 메모리의 영역을 계속 차지하여 프로그램이 불완전해지고,
갑자기 다운되는 현상을 겪을 수 있다.
반면, 자바(JAVA)는 개발자가 직접 메모리에 접근할 수 없게 설계되어있으며, 메모리는 자바(JAVA)가 직접 관리한다.
객체 생성 시, 자동적으로 메모리 영역을 찾아서 할당하고, 사용이 완료되면 GC(Garbage Collection)를 실행시켜
사용하지 않는 객체들을 제거시켜준다. 따라서 개발자는 메모리 관리보다 핵심 기능 구현에 집중할 수 있다.
5. 다양한 애플리케이션 개발이 가능하다.
자바 실행환경(JRE:Java Runtime environment)이 구축돼있는 모든 운영체제에서. java파일은 한 번의 컴파일로 실행이 가능하다.
따라서 Window10, Linux, Unix, MAC 등의 다양한 운영체제에서 실행되는 프로그램을 개발할 수 있다.
ex) 단순 콘솔 프로그램, 클라이언트용 윈도 애플리케이션, 서버용 웹 애플리케이션, 안드로이드 앱 등 모든 곳에서 실행 가능한 프로그램 개발 가능
6. 동적 로딩(Dynamic Loading)을 지원한다.
자바(JAVA)는 실행 시, 모든 클래스가 로딩되지 않고 필요한 시점에 필요한 클래스를 로딩하여 사용할 수 있게 한다.
이것을 동적로딩이라고 한다.
장점 | 단점 | ||
일부 클래스가 변경되어도, 전체 어플리케이션을 다시 컴파일 하지 않아도 된다. | 실행 시 연결된 부분에 대한 판단을 해야하므로 속도 측면에서 불리하다. | ||
변경사항이 발생해도 비교적 적은 작업만으로 처리할 수 있는 유연한 애플리케이션을 작성할 수 있다. | 프로그램의 실행 속도가 느려질 수 있다. | ||
C언어와 다르게, 코드 블럭이 이 곳 저 곳에 위치해 있어도 된다. (유연한 코드) | *때문에 static method를 사용하는 것. 정적 로딩처럼 바로 메모리에 올릴 수 있도록 도와주기 때문. |
||
캡슐화(Capsulation),상속(Extends),다형성(Polymorphism)과 같은 객체지향 개념이 적용될 수 있도록 해준다. |
- 동적 로딩의 종류
- 로드 타임 동적 로딩(load-time dynamic loading) : 하나의 클래스를 로딩하는 과정에서 동적으로 클래스를 로딩하는 것.
- 런타임 동적 로딩(run-time dynamic loading) : 클래스를 로딩할 때가 아닌 코드를 실행하는 순간에 클래스를 로딩하는 것.
7. 멀티 쓰레드(Multi Thread) 3를 쉽게 구현할 수 있다.
우선 멀티 쓰레드(Multi Thread)를 사용해야 하는 이유에 대해서 공부해보자.
- 프로세스를 이용하여 동시에 처리하던 일을 쓰레드로 구현할 경우, 메모리 공간과 시스템 자원 소모가 감소하게된다.
- 쓰레드 간의 통신이 필요한 경우에도 별도의 자원을 이용하는 것이 아닌, 전역 변수의 공간(Static) 또는 동적으로 할당된 공간인 힙(Heap)영역을 이용하여 데이터를 주고 받을 수 있다.
- 프로세스 간 통신 방법에 비해, 쓰레드간의 통신 방법이 훨씬 간단하다.
- 쓰레드의 문맥 교환은 프로세스 문맥 교환과는 달리, 캐시 메모리를 비율 필요가 없다. - 쓰레드 쪽이 더 빠르다.
- 시스템의 처리량이 향상 되고, 자원의 소모가 줄어들어 자연스럽게 응답시간이 단축된다.
- 처리 속도가 빠르기 때문에 여러 프로세스로 할 수 있는 작업들을 하나의 프로세스에서 여러 쓰레드로 나눠서 수행는 것이 효율적이다.
자바(JAVA)는 쓰레드 생성 및 제어와 관련된 라이브러리 API를 제공하고 있기 때문에 실행되는 운영체제와 관계없이 멀티 쓰레드를 쉽게 구현 할 수 있다.
8. 오픈 소스 라이브러리가 풍부하다.
자바(JAVA)는 오픈 소스 언어이다. 그렇기 때문에 프로그램에서 사용하는 라이브러리 또한 오픈 소스로 존재하는 것이 많다. 보다 고급 기능을 구현하기 위해서 코드를 작성 할 때, 오랜 시간과 노력이 필요하고 실행 안정성이 보장되지 않는다. 반면, 검증된 오픈 소스 라이브러리를 이용하여 구현한다면 개발 기간을 단축하고 안정성이 보장된 애플리케이션을 보다 쉽게 구현 할 수 있다. - 대표적인 라이브러리 API 오픈 소스 공유 커뮤니티 : GitHub
자바(JAVA)프로그램의 실행 과정
자바 컴파일러 (Java Compiler)
자바 컴파일러(Java Compiler)는 자바를 가지고 작성한 자바 소스 코드를 자바 가상 머신(JVM)이 이해할 수 있는 자바 바이트 코드로 변환한다. 자바 컴파일러는 자바를 설치하면 javac.exe라는 실행 파일 형태로 설치된다.
자바 바이트 코드 ( Java ByteCode)
자바 바이트 코드(Java ByteCode)란 자바 가상 머신 (JVM)이 이해할 수 있는 언어로 변환된 자바 소스코드를 의미한다.
자바 컴파일러에 의해 변환되는 코드의 명령어 크기가 1byte이기 때문에 자바 바이트 코드라고 불리고 있다.
자바 바이트 코드의 확장자는 .class 이며, 자바 가상 머신 (JVM)만 설치되어 있으면 어느 운영체제에서 실행 가능하다.
자바 가상 머신(Java Virtual Machine)
자바 가상 머신(Java Virtual Machine, 줄여서 JVM이라고도 한다.)이란 자바 바이트 코드를 실행시키기 위한 가상의 기계이다. 자바로 작성된 모든 프로그램은 자바 가상 머신(JVM)에서만 실행 될 수 있다.
따라서 자바(JAVA)를 실행하기 위해서는 반드시 자바 가상 머신(JVM)이 설치 되어 있어야 한다.
-참고) 오라클(Oracle)에서 대부분의 주요 운영체제 뿐만이 아닌, 웹 브라우저, 스마트 폰, 가전기기 등에서도 자바 가상 머신을 손쉽게 설치할 수 있도록 지원하고 있다.
위와 같이, JVM이 설치만 되어 있다면 같은 자바 프로그램이 아무런 추가 조치 없이 동작 가능하다. 그렇기 때문에 한 번만 프로그램을 작성하면, 모든 운영체제에서 같이 사용할 수 있는 장점이 있다.
하지만, 자바 프로그램과는 달리 자바 가상 머신(JVM, Java Virtual Machine)은 운영체제에 종속적이므로 각 운영체제에 맞는 JVM을 설치해야 동작 가능하다. 또한 자바 프로그램은 일반 프로그램보다 자바 가상 머신이라는 한 단계를 더 거쳐야 하므로 상대적으로 실행 속도가 느리다.