728x90
1. 이식성이 높은 언어
- 이식성 : 서로 다른 실행환경을 가진 시스템 간에 프로그램을 옮겨서도 실행할 수 있는 것
- 왜 이식성이 높을까 ?
자바는 JVM(Java Virtual Machine) 위에서 동작하기 때문에 운영체제 상관없이 작동 가능하다.
2. 객체지향 언어
- 객체지향 : 부품에 해당하는 객체들을 먼저 만들고 이것들을 하나씩 연결해서 전체 프로그램을 완성하는 기법
- 자바는 100% 객체지향 언어에 해당한다. 객체를 만들기 위해 설계도에 해당하는 클래스를 작성하고, 객체와 객체를 연결해 목적에 맞는 프로그램을 만들어 낸다. 자바에서는 아무리 작은 단위의 프로그램이라도 객체로 만듦
- 객체지향언어이기 때문에 객체지향 언어가 갖는 캡슐화, 다형성 , 상속 등의 기능을 제공
객체지향에 대해 ▶ 참고링크
1) 객체지향 프로그래밍(OOP)이 무엇인지?
- 컴퓨터 프로그래밍 패러다임 중 하나로 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 ‘객체’로 만들고 객체들의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법을 말한다.
2) 객체지향 프로그래밍의 장점이 뭐지?
- 코드 재사용 가능 : 남이 만든 클래스 가져와서 이용하거나 상속 가능
- 유지보수가 쉬움 : 클래스 내부에 존재하는 메서드, 변수만 찾아서 수정하면 됨
- 대형 프로젝트에 적합 : 프로젝트를 클래스 단위로 모듈화시켜 개발가능 → 업무분담에 용이
3) 객체지향 프로그래밍의 단점은 뭐지?
- 처리속도가 상대적으로 느림
- 객체가 많아지면 용량이 커질 수도 있음
- 설계 시 많은 시간과 노력이 필요
4) 객체지향 프로그래밍이 가지는 특징이 뭐지?
- 클래스 + 인스턴스
- 추상화
- 캡슐화
- 상속
- 다형성
3. 함수적 스타일 코딩 지원
- 함수적 프로그래밍을 위해 자바 8부터 람다식을 지원
- 람다식을 사용하면 컬렉션 요소를 필터링, 매핑, 집계처리하는게 쉬워지고 코드도 간결해짐
4. 메모리를 자동 관리
- C++의 경우, 생성된 객체를 제거하기 위해 개발자가 직접 코드로 제거해야한다. 이 작업을 개발자가 잘 처리해주지 않으면 프로그램이 불완전해지거나 갑자기 다운되는 현상 발생
- 자바의 경우, 개발자가 직접 메모리에 접근할 수 없게 만들고 자바가 메모리를 관리하게 된다. 객체 생성 시 자동으로 메모리 영역을 찾아 할당해주고 사용이 완료되면 Garbage Collector 를 실행시켜 자동적으로 사용하지 않는 객체를 제거해준다. → 개발자의 입장에서는 메모리 관리의 수고를 덜고 핵심기능 코드 작성에 집중할 수 있음
5. 다양한 어플리케이션 개발 가능
- 자바는 윈도우, 리눅스, 유닉스 등 다양한 운영체제에서 실행되는 프로그램을 개발할 수 있다. 단순한 콘솔 프로그램부터 시작해 클라이언트용 어플리케이션, 서버용 웹 어플리케이션, 모바일 안드로이드 앱까지 다양한 프로그램을 개발할 수 있다.
6. 멀티쓰레드를 쉽게 구현 가능
- 하나의 프로그램이 동시에 여러 작업을 처리해야하는 경우, 대용량 작업을 빠르게 처리하기 위해 서브작업으로 분리해서 병렬처리하려면 멀티쓰레드 프로그래밍이 필요하다
- 자바는 쓰레드 생성 및 제어와 관련된 라이브러리 API를 제공하고있기 때문에 실행되는 운영체제에 상관없이 쓰레드를 쉽게 구현할 수 있다.
7. 동적로딩(Dynamic Loading)을 지원
- 어플리케이션이 실행될 때 모든 객체가 한 번에 생성되지 않고, 객체가 필요한 시점에 클래스를 동적로딩해서 객체를 생성한다.
- 개발이 끝난 후 유지보수를 해야하는 상황에서도 해당 클래스만 수정하면 되므로 전체 어플리케이션을 다시 컴파일할 필요가 없다. → 유지보수가 빠르고 간편
8. 풍부한 오픈소스 라이브러리
- 자바는 오픈소스 언어라 자바로 만들어진 라이브러리가 굉장히 많음
- 라이브러리를 활용해 시간과 비용을 줄이고 수준 높은 어플리케이션을 만들 수 있다.
참고
JAVA :: 자바란? 자바의 특징(객체지향, 메모리관리, 멀티스레드, 동적로딩, 오픈소스)
자바 코드 실행 과정
- 개발자가 쓴 자바 코드(.java)가 자바 컴파일러를 거치면서 자바 바이트 코드로 컴파일 된다.
- 컴파일된 바이트 코드를 JVM의 클래스 로더 (Class Loader) 로 전달
- 클래스로더는 동적로딩을 통해 필요한 클래스들을 로딩 및 링크해 런타임 데이터 영역인 JVM의 메모리에 올린다.
- 실행엔진은 JVM메모리에 올라온 바이트 코드들을 명령어 단위로 하나씩 가져와서 실행
반응형
'Study > Java' 카테고리의 다른 글
[Java] 조건문 / 반복문 (if/else if/for/while/do-while) (0) | 2022.01.06 |
---|---|
[Java] 자바의 연산자 (0) | 2022.01.06 |
[Java] 자바의 변수 / 상수 / 자료형 / 특수문자 (0) | 2022.01.04 |
[Java] Intellij 에서 외부 라이브러리 사용하기(Gson) (0) | 2021.07.04 |