개발/Spring

java.lang 패키지

728x90

java.lang 패키지는 아주 특별한 패키지다. 자바 패키지 중에서 유일하게 import를 하지 않아도 사용할 수 있기 때문이다.

 

그 만큼 자바에서 꼭 필요한 여러 기능들을 제공한다. 

 

크게 인터페이스, 클래스 예외클래스 등은 다음과 분류할 수 있다.

 

  • 언어관련 기본
  • 문자열 관련
  • 기본 자료형 및 숫자 관련
  • 쓰레드 관련
  • 예외 관련
  • 런타임 관련

 

CharSequence, String, StringBuffer, StringBuilder, Boolean, Byte, Character, Double , Float, Integer, Long, Math, Number, Short,

Runnable, Thread, ThreadGroup, ThreadLocal, Throwable, Exception

 

 

 

 

OutOfMemoryError(OOME) : 메모리 부족으로 발생하는 에러, 자바에서 가상머신이 메모리를 관리하지만, 프로그램을 잘못 작성하거나 설정이 제대로 되더 있지 않을 경우에는 이러한 에러가 발생할 수 있다.

 

StackOverflowError : 호출된 메소드의 깊이가 너무 깊을 때 발생한다. 자바에서는 스택이라는 영역에 어떤 메소드가어떤 메소드를 호출했는지에 대한 정보를 관리한다. 재귀 호출을 지나치게 많이 호출하면 스택에 쌓을 수 있는 메소드 호출 정보의 한계를 넘어설 수 있다.

 

기본 어노테이션이 선언되어 있다.

 

Deprecated : 

Override : 

SuppressWarinings : 

 

 

 

 

숫자를 처리하는 클래스들

 

자바에서는 간단한 계산을 할 때에는 대부분 기본 자료형을 사용한다.

이 기본 자료형은 자바의 힙이라는 영역에 저장되지 않고, 스택이라는 영역에 저장되어 관리 된다.

따라서 계산할 때 보다 빠른 처리가 가능하다.

 

Character 클래스를 제외하고 나머지 클래스들은 각 기본 자료형의 이름에서 첫 문자만 대문자로 바꿨다고 보면 된다.

 

그런데, Character, Boolean을 제외한 숫자를 처리하는 클래스들은 Wrapper클래스 라고 불리며, 모두 Number라는 abstract 클래스를 확장한다.

 

그리고 겉으로 보기에는 참조 자료형이지만, 기본 자료형 처럼 사용할 수 있다.

new를 사용해서 객체를 만들지 않아도 값을 할당할 수 있다.

 

왜냐하면 자바 컴파일러에서 자동으로 형 변환을 해주기 때문이다.

 

그리고 Character를 제외하고 parse타입이름(), valueOf() 두개의 메소드를 제공한다.

 

왜 숫자를 처리하는 참조 자료형을 만들었을까? 

 

 

  • 매개 변수를 참조 자료형으로만 받는 메소드를 처리하기 위해서
  • 제너릭과 같은 기본 자료형을 사용하지 않는 기능을 사용하기 위해서
  • MIN_VALUE, MAX_VALUE와 같이 클래스에 선언된 상수 값을 사용하기 위해서
  • 문자열을 숫자로, 숫자를 문자열로 쉽게 변환하고 2,8,10,16 진수 변환을 쉽게 처리하기 위해서

 

기본자료형을 참조자료형으로 만든 클래스들은 Boolean 클래스를 제외하고 모두 MIN_VALUE, MAX_VALUE라는 상수를 갖고 있다.

 

중요한 연산을 수행할 때, 정수형은 BigInteger, 소수형은 BigDecimal을 사용해야 정확한 계산이 가능하다.

이 두 클래스는 모두 java.lang.Number 클래스의 상속을 받았으며, Java.math 패키지에 선언되어 있다.

 

 

각종 정보를 확인하기 위한 System 클래스

 

System 클래슨느 출력만을 위한 클래스라고 생각할 수 있다. 출력을 위한 부분들은 our과 err로 선언된 PrintStream과 관련되어 있다.

 

즉 System 클래스에 선언되어 있는 메소드들을 살펴보면 출력과 관련된 메소드들은 없다.

이름 그대로 시스템에 대한 정보를 확인하는 클래스이다.

 

 

선언 및 리턴 타입

PringStream err 에러 및 오류를 출력할 때 사용한다.

InputStream in 입력값을 처리할 때 사용한다.

PrintStream out 출력값을 처리할 때 사용한다.

 

여기서 사용하는것들은 모두 java.io에 선언되어 있다.

 

  • 시스템 속성값 관리
  • 시스템 환경값 조회
  • GC 수행
  • JVM 종료
  • 현재시간 조회
  • 기타관리용 메소드

위에서 GC 수행, JVM 종료 메소드를 실행하면 안된다.

 

 

시스템 속성값 관리

 

Properties 는 java.util에 속하며, Hashtable의 상속을 받은 클래스이다.

필요 여부와 상관 없이 자바 프로그램을 실행하면 Properties가 자동으로 생성되며, 그 값은 언제 어디서든지 같은 JVM내에서 꺼내서 사용할 수 있다.

 

HashTable : key와 value의 쌍으로 이뤄진 여러 개의 값을 갖는 Map 형태의 자료 구조라고 보면 됨.

배열은 하나의 객체를 만들고 거기에 여러 개의 값이 순서대로 들어가 있다. 즉 배열은 그 위치로 원하는 값을 찾는 것이다.

Map의 형태로 자료구조는 순서는 거의 없고 key-value 쌍으로 되어 있다. 이 객체에서 원하는 값을 찾으려고 할 때ㅑ에는 key로 찾는다

 

 

시스템 환경값조회

staic Map<String, String> getenv() 현재 시스템 환경에 대한 Map형태의 리턴값을 받는다.

static String getenv() 지정한 name에 해당하는 값을 받는다.

 

 

GC 수행

 

static void gc() 가비지 컬렉터를 실행한다.

static void runFinalization() GC처리를 기다리는 모든 객체에 대하여 finalize() 메소드를 실행한다.

 

이 두 메소드는 사용하면 안된다. 자바는 메모리 처리를 개발자가 별도로 하지 않는다. 따라서 System.gc()라는 메소드를 호출하면 가비지 컬렉션을 명시적으로 처리할 수 있다. 그리고 Object 클래스에 선언되어 있는 Finalize() 메소드를 명시적으로 처리할 수 있다.

그리고 Object 클래스에 선언되어 있는 finalize() 메소드를 명시적으로 수행하도록 하는 runFinalization() 메소드가 있다.

 

만약 명시적으로 이 함수를 호출하면 시스템은 하던 일을 멈추고 이 작업을 실행한다.

 

 

exit(int status) 현재 실행중인 JVM을 멈춘다.

 

이 메소드는 절대로 호출하면 안된다. 이 메소드를 호출하지 않아도 죽는다. 하지만 앱이나, 웹애플리케이션에서 이 메소드를 사용하면 해당 앱의 JVM이 죽어버린다.

 

 

 

 

 

 

System.out

 

out, err 변수는 PrintStream이라는 동일한 클래스의 객체다. 단지 정상적인 출력인지, 에러가 났을 때 출력 결과인지 차이만 존재.

PrintStream클래스는 static하게 사용한다.

이 클래스에 선언되어 있는 출력을 위한 메소드들에는

 

  • print()
  • println()
  • format()
  • printf()
  • write()

 

객체를 출력할 때는 toString()보다 valueOf() 메소드가 안전하다.

null 객체에 대해 toString()을 실행하면 예외가 발생한다.

 

 

 

 

'개발 > Spring' 카테고리의 다른 글

자바 I/O  (0) 2021.03.05
가비지 컬렉터  (0) 2021.03.01
JVM이란?  (0) 2021.02.28
Hot Spot JVM이란?  (0) 2021.02.27
JIT란?  (0) 2021.02.27