Develop/Java

[Java] Built-in Package

연로그 2022. 2. 17. 22:16
반응형

개요

우리는  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.lang !!!

 

그렇다면 언제 어떤 메모리에 적재되는 것일까?

자바 프로그램 실행 과정은 아래와 같다.

img: pienguin.tistory.com

  1. 소스 파일(.java)컴파일러를 통해 실행 파일(.class; 바이트 코드로 구성)로 변경
  2. JVM에 로딩 후 Runtime Data Area배치
  3. 로드된 클래스(.class)바이너리 코드로 변경
  4. 실행

 

Runtime Data Area은 데이터가 저장되는 영역이다.

아래 구조와 같은데  Heap Stack Static 영역이 포함되어 있다 정도는 기억해두자.

(Static은 Method Area 안에 저장된다.)

 

이제 프로그램의 실행 과정을 다시 살펴보자.

  1. JRE(Java Runtime Environment)가 자바 프로그램 실행 시 main() 찾기
  2. main() 존재 시, Class Loader가 목적 파일(.class) 실행
  3. static 영역에 java.lang 패키지, import한 패키지들 적재
  4. stack 영역에 main()의 호출 정보(stack frame) 적재
    변수 영역에 각 인자들 위치
  5. main() 실행
  6. main의 }를 만나면 JRE가 JVM을 종료시켜 모든 메모리 제거

 

여기서 3을 주목하자!

java.lang같은 빌트인 패키지는 3에서 import 패키지들과 함께 적재가 된다.


참고

  1. https://www.geeksforgeeks.org/built-in-packages-in-java/
  2. https://wikidocs.net/257
  3. https://sorjfkrh5078.tistory.com/111

 

반응형