일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 타오트로닉스 후기
- 윈도우 환경 변수
- Windows Java 환경 변수
- 로컬 계정 전환
- Java 11 설치
- 자료 정의
- 자바 11 다운로드
- 가성비 노이즈캔슬링
- 정보 정의
- 86비트
- Windows 10 계정 안보임
- Java 11
- MSSQL DATE 함수
- 윈도우 10 로그인
- Windows 10 계정 오류
- Java JDK 11
- SOUNDSURGE 90
- x32x64
- 자바 11
- 기본자료형
- DATEPART 인수
- 컴퓨터 몇비트
- Gc
- DATEPART 종류
- TT-BH090
- Java
- Windows 10 계정
- Ajax
- 기타 사용자
- javascript
- Today
- Total
이감자의 개발새발 개발일지
Java 언어의 특징과 장점 본문
미루고 미루다 드디어 첫 포스팅!
스터디 팀원 여러분들께 심심한 사과의 말씀 먼저 올립니다..
(죄송합니다😿)
<잘못된 정보에 대한 지적이나 기타 포스팅에 대한 의견은 덧글 남겨주시면 감사하겠습니다.>
Java 언어의 특징과 장점
웹 개발 교육을 받으며 가장 첫 번째 강의 시간에 배웠던 기억이 난다.
그 때 당시 이게 무슨 소린가.. 했던 것들이 다시 보니 이런 의미였구나 하고 조금은 이해가 되는게 참 신기하다.
각설하고, Java의 가장 대표적인 특징과 장점에 대해 정리 해 보고자 한다.
운영체제에 독립적인 프로그래밍 언어
내가 이해한 '운영체제에 독립적이다'라는 말의 의미는, 운영체제(OS)에 상관 없이 동일한 코드로 동일한 결과를 출력할 수 있다는 것이다.
Java의 등장 이전 프로그래밍 언어는 언어와 하드웨어가 통신을 하기 때문에 코드가 운영체제에 영향을 받았다(운영체제에 종속적). 하지만 Java의 경우 언어와 하드웨어가 직접적으로 통신하는 것이 아닌 Java Virtual Machine(JVM)과 통신하기 때문에 운영체제에 독립적일 수 있다.
하지만 Java 언어 자체는 운영체제에 독립적이지만 JVM은 운영체제에 종속적이라는 것!
(검색하다 알게 된 Java의 슬로건인데, 이 주제에 대해 한 마디로 정리할 수 있는 문장인 것 같다!
“한 번 프로그래밍 한 것은 어떤 플랫폼에서도 실행된다(Write Once, Run Anywhere)”)
객체지향 프로그래밍 언어(Object-Oriented Programming, OOP)
Java는 객체 간의 상호작용을 기반으로 작동하는 프로그래밍 언어이다.
이 파트는 잘 정리 해 놓은 포스트 링크를 첨부하니, 참조하면 도움이 될 듯 하다!
→ 객체지향의 특징과 5가지원칙
Garbage Collection(GC)를 이용한 자동 메모리 관리
GC는 변수가 접근할 수 없는 영역을 더 이상 사용할 수 없는 영역으로 간주하고, 이를 자동으로 정리 해 준다.
C나 C++의 경우 수동으로 메모리를 관리 해 주어야 해서 이와 비교하면 메모리 관리 측면에서 더욱 편리하다고 볼 수 있다.
GC의 장점
- 유효하지 않은 포인터 접근: 이미 해제된 메모리에 접근하는 버그를 가리킨다. 만약 이 포인터가 해제되고 새로운 값이 할당되었다면, 잘못된 값을 읽어오게 된다.
- 이중 해제: 이미 해제된 메모리를 또다시 해제하는 버그를 가리킨다. 일부 메모리 할당 알고리즘에서는, 해제된 메모리를 다시 해제하려고 시도하는 것은 오류를 일으킬 수 있다.
- 메모리 누수: 더이상 필요하지 않은 메모리가 해제되지 않고 남아있는 버그를 가리킨다. 메모리 누수가 반복되면 메모리 고갈로 프로그램이 중단될 수 있다. (접근 가능한 메모리가 증가하여 메모리가 고갈되는 문제는 쓰레기 수집으로도 막을 수 없다)
GC의 단점
- 어떤 메모리를 해제할지 결정하는 데 비용이 든다. 객체가 필요없어지는 시점을 프로그래머가 미리 알고 있는 경우에도 쓰레기 수집 알고리즘이 메모리 해제 시점을 추적해야 하므로, 이 작업은 오버헤드가 된다.
- 쓰레기 수집이 일어나는 타이밍이나 점유 시간을 미리 예측하기 어렵다. 때문에 프로그램이 예측 불가능하게 일시적으로 정지할 수 있다. 이런 특성은 특히 실시간 시스템에는 적합하지 않다.
- 할당된 메모리가 해제되는 시점을 알 수 없다. 자원 할당과 변수 초기화를 일치하는 RAII(Resource Acquisition is Initialization) 스타일의 프로그래밍에서는, 이것은 자원 해제 시점을 알 수 없다는 것을 의미한다.
네트워크와 분산환경 지원
Java는 다양한 네트워크에 연결하고 통신할 수 있으며 대규모 분산환경을 염두에 두고 개발되었기 때문에 Java API를 이용해 비교적 짧은 시간 안에 네트워크 관련 프로그램을 개발할 수 있다.
멀티쓰레드 지원
멀티쓰레드는 하나의 프로세스 내에서 둘 이상의 스레드가 동시에 작업을 수행하는 것을 의미한다. Java는 멀티쓰레드를 지원하여 시스템 자원의 낭비가 적으며, 사용자와의 응답성이 좋다는 장점이 있다.
이 외에 동적바인딩 지원도 같이 기재할까 고민했으나 이는 Java의 특징이라기 보다는 객체지향언어의 특징이라는 생각이 들어서 패스하는걸로~!하고 오늘의 포스팅은 여기서 마치도록 하겠다!
'개발새발🐶 > Java' 카테고리의 다른 글
Java 11 버전 설치하기 (0) | 2021.08.15 |
---|---|
[JSP] MVC 패턴이란? (0) | 2020.11.10 |
Java 변수 (8) | 2020.10.26 |
재귀호출(recursive call) (0) | 2020.10.22 |