Java 14

[Java] Java 8의 특징(1) - 함수형 인터페이스와 람다

함수형 인터페이스 함수형 인터페이스란 다음과 같이 추상 메서드를 딱 한 개만 가지고 있는 인터페이스를 의미한다. @FunctionalInterface public interface Animal { void move(); } 위 코드에서 @FunctionalInterface 어노테이션을 적용했는데 @FunctionalInterface 어노테이션이 없더라도 Animal 인터페이스는 함수형 인터페이스이다. 그럼 @FunctionalInterface 어노테이션의 역할은 무엇이냐? 만약 @FunctionalInterface 어노테이션을 선언하고 추상 메서드를 두 개 이상 선언할 경우 컴파일 에러가 발생한다. 자바에서 함수형 프로그래밍 함수형 프로그래밍이랑 객체의 형태를 벗어나 함수형을 확장해 함수를 변수처럼 사용..

Java 2022.02.21

[Java] 클래스 로더

클래스 로더 로딩 -> 링크 -> 초기화 순으로 진행 계층 구조 부트 스트랩 클래스 로더 : JAVA_HOME\lib에 있는 코어 자바 API 제공하며 최상위 우선순위 플랫폼 클래스 로더 : JAVA_HOME\lib\ext 폴더 또는 java.ext.dirs 환경 변수에 해당하는 위치에 있는 클래스를 읽음 애플리케이션 클래스 로더 : -classpath 옵션 또는 java.class.path 환경 변수의 값에 해당하는 위치에 있는 클래스를 읽음 로딩 클래스 로더가 .class 파일을 읽고 내용에 따라 적절한 바이너리 데이터 생성 후 메서드 영역에 저장 메서드 영역에 저장하는 데이터 FQCN(Fully Qualified Class Name) : 패키지 이름 + 클래스 이름 (+클래스 로더) 클래스, 인터페..

Java 2022.02.15

[Java] JVM 구조

클래스 로더 시스템 .class 파일에서 바이트 코드를 읽고 메모리에 저장 로딩 : 클래스를 읽어오는 과정 링크 : 레퍼런스를 연결하는 과정 초기화 : static 값 초기화 및 변수에 할당 메모리 메서드 영역에는 클래스 수준의 정보(클래스 이름, 부모 클래스 이름, 메서드, 변수) 저장 힙 영역에는 객체를 저장(공유 자원) 스택 영역에는 스레드마다 런타임 스택을 만들고, 그 안에 메서드 호출을 스택 프레임이라 부르는 블록으로 적재 스레드 종료 시 런타임 스택도 소멸 PC(Program Counter) 레지스터, 네이티브 메서드 스택 : 스레드마다 독립적으로 소유 실행 엔진 인터프리터 : 바이트 코드를 한 줄씩 실행 JIT(Just-In-Time) 컴파일러 : 인터프리터의 효율을 높이기 위해 사용 인터프..

Java 2022.02.15

[Java] 자바, JVM, JDK, JRE

JVM (Java Virtual Machine) 자바 가상 머신으로서, 자바 바이트 코드(.class 파일)를 OS에 특화된 코드로 변환(인터프리터와 JIT 컴파일러)하여 실행 바이트 코드를 실행하는 표준이자 구현체(특정 밴더가 구현한 JVM) 특정 플랫폼에 종속적 JRE (Java Runtime Environment) : JVM + 라이브러리 자바 어플리케이션을 실행할 수 있도록 구성된 배포판 JVM과 핵심 라이브러리 및 자바 런타임 환경에서 사용하는 프로퍼티 세팅이나 리소스 파일을 포함 JDK (Java Development Kit) : JRE + 개발 툴 JRE + 개발에 필요한 툴 소스 코드를 작성할 때 사용하는 자바 언어는 플랫폼에 독립적 오라클은 자바 11부터 JDK만 제공하며 JRE는 제공하..

Java 2022.02.15