반응형
개요
우리는 String , Integer , System 같은건 import 없이도 사용할 수 있다.
세 개의 객체 모두 java.lang 에 포함되어 있는데 이런 import 없이 사용 가능한 패키지를 빌트인 패키지라고 한다.
그렇다면 이 빌트인 패키지의 동작 원리가 뭔데?
어떻게 import 없이 사용할 수 있을까? 에 대해서 궁금증이 생겨 포스팅하게 되었다.
패키지란?
- 관련된 클래스들을 모아 관리할 수 있게 함
- 네이밍 충돌 회피
- 클래스나 인터페이스 등의 접근 제어
패키지는 크게 Built-in packages와 User-defined packages로 나뉜다.
- Built-in packages : Java에서 우리 이미가 갖고 있는 다양한 선행 패키지들
- User-defined packages : 사용자가 정의한 패키지
Built-in packages
- JDK나 JRD에 내장되어 제공하는 패키지
- JAR 파일 형식으로 제공됨
- 압축 해제 시 lang, io, util, SQL 등의 패키지가 포함된 것을 확인 가능
JDK에 포함되어 있다고 하니 Oracle docs에서도 한번 확인해보았다.
그렇다면 언제 어떤 메모리에 적재되는 것일까?
자바 프로그램 실행 과정은 아래와 같다.
- 소스 파일(.java)을 컴파일러를 통해 실행 파일(.class; 바이트 코드로 구성)로 변경
- JVM에 로딩 후 Runtime Data Area에 배치
- 로드된 클래스(.class)를 바이너리 코드로 변경
- 실행
Runtime Data Area은 데이터가 저장되는 영역이다.
아래 구조와 같은데 Heap , Stack , Static 영역이 포함되어 있다 정도는 기억해두자.
(Static은 Method Area 안에 저장된다.)
이제 프로그램의 실행 과정을 다시 살펴보자.
- JRE(Java Runtime Environment)가 자바 프로그램 실행 시 main() 찾기
- main() 존재 시, Class Loader가 목적 파일(.class) 실행
- static 영역에 java.lang 패키지, import한 패키지들 적재
- stack 영역에 main()의 호출 정보(stack frame) 적재
변수 영역에 각 인자들 위치 - main() 실행
- main의 }를 만나면 JRE가 JVM을 종료시켜 모든 메모리 제거
여기서 3을 주목하자!
java.lang같은 빌트인 패키지는 3에서 import 패키지들과 함께 적재가 된다.
참고
- https://www.geeksforgeeks.org/built-in-packages-in-java/
- https://wikidocs.net/257
- https://sorjfkrh5078.tistory.com/111
반응형
'Develop > Java' 카테고리의 다른 글
[Java] EnumMap이란? (4) | 2022.02.25 |
---|---|
[Java] ConcurrentModificationException 에러 (0) | 2022.02.24 |
[Java] toString() 파헤치기 (2) | 2022.02.15 |
[JPA] Table 'DB.hibernate_sequence' doesn't exist 에러 (0) | 2022.01.14 |
[JPA] 프록시와 영속성 전이 (0) | 2022.01.13 |