JAVA

JAVA에 대하여

최서은 2024. 6. 16. 19:29

 

객체지향 언어


클래스와 객체를 기반으로 프로그래밍하는 방식, 다음과 같은 특성을 지님

코드의 재사용성과 유지보수성을 높이기 위해 클래스와 객체 사용

* 클래스(Class)  : 데이터와 메소드의 집합, 특정 객체의 설계도 - 각각 객체는 특정 클래스의 인스턴스

 

1) 캡슐화(Encapsulation)  : 데이터와 그 데이터를 처리하는 메소드를 하나로 묶는 것, 데이터 접근 제한 및 보호

- 접근 제한자 : 접근에 제한을 설정

 

2) 추상화(Abstraction)  :  어떤 대상을 구현할 때, 그 대상의 본질적인 특징을 정의하고, 이것에 기반하여 대상을 객체로 구현하는 것

 

3) 상속(Inheritance)  : 한 클래스가 다른 클래스의 특성을 상속 받아 확장하는 것


4) 다형성(Polymorphism) : 같은 코드를 사용하여 객체를 다루는 기능, 한 객체가 여러 형태를 가질 수 있음

- 오버라이딩(Overriding) : 부모 클래스와 자식 클래스의 메소드를 비교하여 동일한 이름의 메소드를 재정의

- 오버로딩(Overloading) : 같은 이름의 메소드를 여러 개 정의

 

플랫폼 독립성


특정 운영체제에 종속되지 않고 여러 환경에서 동작이 가능

자바는 여러 운영체제에 대해 해당 운영체제에 맞는 JVM 구현을 제공

JVM(Java Virtual Machine) - 자바 가상 머신
Java의 bytecode를 해당 플랫폼의 네이티브 기계어로 변환하고 실행하는 역할

 

Java 소스코드는(*.java)는 CPU가 인식을 하지 못하므로 기계어로 컴파일을 해줘야한다.

Java는 이 JVM을 거쳐서 OS에 도달하기 때문에 OS가 인식할 수 있는 기계어로 바로 컴파일 되는게 아닌

JVM이 인식할 수 있는 Java bytecode(*.class)로 변환된다.  

Java compiler 가 .java 파일을 .class 라는 Java bytecode로 변환한다.

 

 

멀티스레딩 지원


자바 프로그램이 여러 개의 스레드를 동시에 실행할 수 있도록 지원하는 기능

멀티스레딩을 통해 자바 프로그램은 병렬 처리 가능, 이를 통해 성능 향상과 효율적인 자원 관리 가능

thread - 스레드
프로세스 내에서 독립적으로 실행되는 작은 실행 단위, 프로세스는 운영 체제에서 실행되는 하나의 프로그램을 말하며, 스레드는 그 프로세스 내부에서 실제 작업을 수행하는 실행 흐름

 

 

자동 메모리 관리


메모리 할당과 해제를 자동으로 처리하여 개발자가 수동으로 메모리 관리를 하지 않아도 되도록 하는 기능

자바에서 자동 메모리 관리는 주로 가비지 컬렉션(Garbage Collection) 메커니즘을 통해 이루어짐

  • 가비지 컬렉터 : 메모리 관리를 담당하는 시스템 또는 프로그램의 구성 요소, 메모리에서 더 이상 사용되지 않는 객체를 찾아 제거하여 메모리를 회수하는 역할을 수행
  • 가비지 컬렉션 : 메모리 관리 기술 중 하나, 가비지 컬렉터에 의해 수행되는 프로세스

 

풍부한 API


다양한 기능을 제공하여 개발자가 많은 공통 작업을 쉽게 수행할 수 있도록 도움을 준다.

자바 API는 수많은 *라이브러리와 패키지로 구성

 

  • 자바 API의 주요 패키지
- java.lang : 자바 프로그램의 기본적인 클래스들을 포함. String, Math, Integer, System 등의 클래스
- java.util : 유틸리티 클래스들을 포함. 데이터 구조(List, Set, Map), 날짜 및 시간(Date, Calendar), 컬렉션 프레임워크, 랜덤 숫자 생성기(Random), 문자열 조작 도구 등의 클래스
- java.io : 입출력 기능을 지원. 파일 읽기 및 쓰기(File, FileReader, FileWriter), 버퍼링(BufferedReader, BufferedWriter), 스트림(InputStream, OutputStream) 등의 클래스
etc.

 

 

 

 

장점


개발자가 쉽게 코드를 작성하고 실행할 수 있고, 강력한 디버깅을 제공합니다.

Java를 사용하면 기존 코드를 재사용하고 모듈식 프로그램을 개발할 수 있습니다. 

플랫폼에 구애를 받지 않아 별도의 작업 없이 서로 다른 플랫폼에서 동일한 프로그램을 실행할 수 있습니다.

또한 보안에 강해 믿고 사용할 수 있는 언어입니다. 

가장 인기있는 언어 중 하나인 만큼 대규모 커뮤니티가 존재해 개발을 위해 참조할 수 있습니다.  

 

단점


Java는 중간 바이트코드로 컴파일된 후 JVM에서 실행되기 때문에 C나 C++ 같은 다른 인기 있는 언어에 비해 실행 속도가 느립니다.

 

백업 작업에는 적합하지 않아 백업 시스템이 필요하다면 문제가 될 수도 있습니다.

- 백업 작업을 위해서는 자바와 함께 사용할 수 있는 다양한 라이브러리와 도구가 존재

 

Java에는 이해하기 힘든 긴 코드가 많아 코드를 읽고 이해하는 데에 어려움을 겪을 수 있습니다.

- 현대적인 통합 *개발 환경(IDE)들은 코드 자동 완성, 리팩토링 도구, 코드 탐색 기능을 제공하여 자바 코드를 읽고 작성하는 데 도움을 줍니다.

- 잘 설계된 API와 라이브러리를 사용하면 코드의 길이를 줄이고 가독성을 높일 수 있습니다. 예를 들어, Java 8의 람다 표현식과 스트림 API를 사용하면 코드를 더욱 간결하게 작성할 수 있습니다.

 

 

 

 

* 개발 환경(IDE) : 개발자가 소프트웨어를 효율적으로 개발할 수 있도록 다양한 도구와 기능을 통합하여 제공하는 응용 프로그램

* 라이브러리 : 자바 프로그램 개발을 도와주는 다양한 기능을 제공하는 클래스와 인터페이스의 모음