728x90
자바 언어의 특징을 간략히 살펴보겠습니다.
---
- 자바란?
1955년 '썬 마이크로시스템즈'(제임스 고슬링 외 연구원들)에서 개발한 객체지향 언어입니다.
특징으로는 멀티쓰레드를지원하며, 동적 로딩 지원, 운영체제에 독립적이며, 자동 메모리 관리(gc) 등이 있습니다.
특징을 한번 간략히 살펴보도록 하겠습니다.
- 객체지향 언어이다.
- 객체지향 프로그래밍이란? OOP - (Object Oriented Programming) - 위키백과(객체 지향 프로그래밍)
- 컴퓨터 프로그래밍의 패러다임 중 하나이며, 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여려 개의 독립된 단위, 즉 '객체'들의 모임으로 파악하고자 하며, 독립된 객체들은 메시지를 주고받고, 데이터를 처리할 수 있습니다.
- 객체란 무엇인가요 - 위키백과(객체란)
- 존재하는 모든 사물이나 생명체, 추상적인 것들을 포함한 모든 것입니다.
객체는 크게 속성과 동작으로 구성되어 있습니다. 자바에서는 객체의 속성을 필드, 동작을 메서드라 부르며,
소프트웨어 객체로 설계하는 것을 객체 모델링이라고 합니다.
- 존재하는 모든 사물이나 생명체, 추상적인 것들을 포함한 모든 것입니다.
- 알면 좋은 것!!
- 객체지향 프로그래밍이란? OOP - (Object Oriented Programming) - 위키백과(객체 지향 프로그래밍)
- 멀티스레드 지원
- 하나의 프로그램에서 여러 개의 스레드가 동시에 실행할 수 있는 환경을 지원합니다.
- C / C++ 은 운영체제의 도움을 받아 멀티 스레드를 수행하지만, 자바는 운영체제 지원 없이 멀티 스레드 프로그래밍이 가능하다.
- 여기서 잠깐!! 멀티 스레드와 멀티 프로세스의 차이가 궁금하다면
- 동적 로딩 지원
- JVM을 기반으로 하는 언어들의 공통적인 특징
- 애플리케이션이 실행될 때 모든 객체가 생성되지 않고, 필요한 시점에 클래스를 동적 로딩하여 사용합니다.
- 필요한 기능만 메모리에 불러서 사용되어 유연함, 일부 클래스가 변경되어도 전체 애플리케이션을 컴파일하지 않아도 되는 장점이 있다.
- 프래그램의 속도가 정적 로딩에 비해 느린 단점이 있다.
- 느린 속도를 해결하기 위해 static 키워드를 사용한다. -> static 키워드를 만나면 애플리케이션이 구동할 때 메모리를 정적 메모리(static) 공간에 올려버린다.
- 참고
- 정적 로딩 - 애플리케이션 실행 시 실행 파일이 메모리에 적재되어 실행되는 로딩 방법. 메모리를 많이 차지하는 단점이 있지만 빠르게 가져와 사용되는 장점이 있다.
- 자세히 알고 싶은 분은-> 자바-동적 로딩, (자바 동적 로딩 이해(델리게이션 모델))
- 운영체제 독립
- 쉽게 말해 운영체제가 달라도 자바는 다시 컴파일 할 필요 없이 실행가능합니다.
이를 JVM WORA(Write Once Run Anywhere:‘한 번만 작성하고 어디서든 실행한다) 이라고도 한다. - 이를 가능케 하는것은 JVM(Java Virtual Machine) 이라는 것 때문
- JRE?JVM?JDK? 를 간략히 알고싶으면 해당 글을 참조하자 -> JRE, JVM, JDK 에 대해 간략히 알아보자.
- 쉽게 말해 운영체제가 달라도 자바는 다시 컴파일 할 필요 없이 실행가능합니다.
- 자동 메모리 관리(gc : garbage collection)
- C 나 C++ 등 에서는 사용하지 않는 메모리는 직접 해제했어야 하지만
자바에서는 JVM이 지속적으로 메모리를 감시하면서 더이상 사용되지 않는 메모리를 해제시켜 준다. - Garbage Collection을 통해 메모리 관리를 자동으로 수행해주기 때문에 개발자는 메모리에 대해 신경 쓸 필요가 없다.
- 직접 메모리를 해제하고 싶은경우 System.gc(); 로 호출할 수 있다.
- //TODO : gc에 대해 포스팅을 해야함.
- C 나 C++ 등 에서는 사용하지 않는 메모리는 직접 해제했어야 하지만
728x90
'Language > 자바' 카테고리의 다른 글
StringTokenizer, split 차이점[공유링크] (0) | 2023.01.23 |
---|---|
자바 Scanner vs BufferedReader (0) | 2023.01.22 |
enumMap, enumSet 에 대해 간략히 알아보자. (0) | 2023.01.19 |
[JAVA] 오버로딩(Overloading)과 오버라이딩(Overriding)의 차이점 (0) | 2021.08.25 |
JRE, JVM, JDK 에 대해 간략히 알아보자. (0) | 2021.08.25 |
댓글