Java 시작

JUNG GYUWON·2023년 9월 25일
0

Java

목록 보기
1/18

Spring으로 웹 프로젝트도 하고 Java 언어로 알고리즘 공부도 하면서 자바 언어에 대한 이해가 부족하다고 생각해서 자료를 찾아서 공부하고 정리하기로 했어요!

고민했거나 외울 필요하다고 생각하는거 위주로 정리할 예정입니다.

자바 프로그램의 종류

자바 프로그램의 동작
1. 코드 작성
2. 컴퓨터가 실행할 수 있는 형태로 코드를 컴파일
3. 컴파일된 프로그램을 실행

그러면 이를 가능하게 하기 위한 것들은 어떻게 있을까?

Java SE(Standard Edition):

  • 자바라는 언어가 어떠한 문법적인 구성을 가졌는지와 같은 것들을 정의하고 있는 표준안
    => 구체적인 소프트웨어가 아니고 소프트웨어의 설계도라고 생각하면 됨.

JDK(Java Development Kit):

  • Java SE 표준안에 따라서 만들어진 구체적인 소프트웨어
  • 이 Kit에는 컴파일러와 개발에 필요한 각종 도구와 JRE가 포함되어 있다.

자바 컴파일러:

자바언어로 작성한 소스코드를 JVM이 이해할 수 있는 자바 바이트코드(.class)파일로 변환한다

JRE(Java Runtime Environment):

  • 실제로 동작하는데 더 필요한 JVM, 라이브러리, 각종 파일이 포함되어 있다

JVM(Java Virtual Machine):

  • 자바로 작성한 코드가 실제로 구동되는 환경으로 하드웨어나 운영체제에 따라서 달라질 수 있는 호환성의 문제를 JVM이 해결해준다
  • 하지만 JVM은 운영체제에 종속적이므로 운영체제에 맞는 JVM을 설치해 줘야 한다.

JVM의 구성

  • 자바 인터프리터(Interpreter): 자바 바이트코드를 읽고 해석하는 역할

  • 클래스 로더(Class Loader): 자바는 동적으로 클래스를 읽어오는데 동적으로 클래스를 로딩해주는 역할을 함

  • JIT 컴파일러(Just-In-Time compiler): 런타임 도중에 기계어로 변환해주는 컴파일러 (실행속도 향상을 위해 개발됨)

  • 가비지 컬렉터(Garbage Collector): 개발자가 따로 관리할 필요 없이 더이상 사용하지 않는 메모리를 회수해줌

자바 프로그램의 실행과정

자바 프로그램

  • 자바 프로그램에는 한개 이상의 class가 존재해야한다.
  • 자바 클래스 파일(*.java)에 public 클래스(class)가 존재하면 소스 파일의 이름은 반드시 해당 public 클래스의 이름과 같아야 한다.
    => 그러면 당연히 public class는 자바 클래스 파일마다 1개만 가질 수 있겠죠?
    (여러개면 클래스 파일 이름 어떻게 지어요)

자바 표준 입출력

자바에서는 java.lang 패키지에 System이라는 표준 입출력 클래스를 정의하여 입출력을 제공한다.

그리고 System 클래스에는 표준 입출력을 위해 다음과 같은 클래스 변수(static variable)가 정의되어 있다

  1. System.in: 스트림을 사용해 표준 입력 수행

  2. System.out: 스트림을 사용해 표준 출력 수행

  3. System.err: 스트림을 사용해 표준 출력 수행

JAVA8에서의 변경 사항

Java SE 8 버전에서는 많은 사항이 변경되거나 새롭게 추가되었음

  • 주로 기업에서는 LTS 버전인 Java 8 이나 Java 11을 많이 씀

대표적인 변경사항
1. 람다 표현식(lambda expression) : 함수형 프로그래밍
2. 스트림 API(stream API) : 데이터의 추상화
3. java.time 패키지 : Joda-Time을 이용한 새로운 날짜와 시간 API
4. 나즈혼(Nashorn) : 자바스크립트의 새로운 엔진


람다 표현식 (익명 함수: anonymous function)

람다 표현식(lambda expression)이란 메소드를 하나의 식으로 표현한 것

왜 쓰는가?: 기존의 불필요한 코드를 줄여주고, 작성된 코드의 가독성을 높임

람다 표현식의 장점
1. 클래스를 만들고 객체를 생성하지 않아도 메소드를 사용할 수 있다.
2. 람다 표현식은 메소드의 매개변수로 전달될 수도 있고, 메소드의 결괏값으로 반환될 수도 있다 => 함수형 프로그래밍 가능

+) 나중에 더 자세히 정리할 예정

Stream API

왜 쓰는가?
이전까지 자바에서 많은 양의 데이터를 저장하기 위해서 배열이나 컬렉션을 사용하고 이 데이터들에 접근하기 위해서는 반복문이나 반복자(iterator)를 사용하여 매번 코드를 작성해야 한다.

=> 코드의 길이가 너무 길고 가독성도 떨어지며, 코드의 재사용이 거의 불가능합니다.

그래서 나온게 Stream!

스트림 API는 데이터를 추상화하여 다루므로, 다양한 방식으로 저장된 데이터를 읽고 쓰기 위한 공통된 방법을 제공한다

따라서 스트림 API를 이용하면 배열이나 컬렉션뿐만 아니라 파일에 저장된 데이터도 모두 같은 방법으로 다룰 수 있음

+) 나중에 더 자세히 정리할 예정

java.time 패키지

실제로 프로젝트를 하면서도 많이 사용한 LocalDate와 같은 날짜와 시간을 다루는 class를 포함하고 있다.

+) 나중에 더 자세히 정리할 예정

나즈혼(Nashorn)

기존의 사용하던 자바스크립트 엔진 리노에 비해 성능과 메모리 관리 면에서 크게 개선된 스크립트 엔진을 도입

profile
반가워요😎

0개의 댓글