hyeonga_code
Java의 신2_Chapter 2_ java.lang 패키지 본문
2024.04.01
java.lang
-- import를 하지 않고도 사용할 수 있는 패키지
-- 언어 관련 기본
-- 문자열
-- 기본 자료형 및 숫자
-- 스레드
-- 예외
-- 런타임
-- 숫자를 처리하는 클래스
---- 간단한 연산 시 기본 자료형을 사용한다.
---- 기본 자료형은 힙이 아닌 스택에 저장되어 관리된다.
---- 숫자를 객체로 처리해야 할 경우 Byte, Short, Integer, Long, Float, Double, Character, Boolean 을 사용한다.
---- Wrapper Class
------ Character, Boolean을 제외한 숫자를 처리하는 클래스
------ Number 추상 클래스를 확장한다.
------ 참조 자료형처럼 보이지만 기본 자료형처럼 사용할 수 있다.(컴파일러 자동 형 변환)
-- Character를 제외한 나머지 클래스가 제공하는 공통적인 메소드
parse타입이름()
// 기본 자료형을 반환
valueOf()
// 참조 자료형을 반환
package lang.package;
public class JavaLangNumber {
public static void main(String[] args) {
JavaLangNumber sample = new JavaLangNumber();
sample.numberTypeCheck();
}
public void numberTypeCheck(){
String val1 = "3";
String val2 = "5";
byte byte1 = Byte.parseByte(val1);
byte byte2 = Byte.parseByte(val2);
Integer integer1 = Integer.valueOf(val1);
Integer integer2 = Integer.valueOf(val2);
System.out.println(byte1 + byte2); // 8
System.out.println(integer1 + integer2 + "7"); // 87
}
}
---- Byte와 Integer 모두 static 메소드이므로 타입의 객체를 생성할 필요 없이 바로 사용할 수 있다.
---- 참조 자료형은 연산을 할 수 없어 문자열로 연결된다.
---- Byte, Short, Long, Integer, Float, Double 은 기본자료형처럼 사용할 수 있으므로 new 예약어로 객체를 만들지 않아도 값을 할당할 수 있다.
public void numberTypeCheck2() {
Integer integer3;
integer3 = 100;
System.out.println(integer3.doubleValue());
}
-- 참조 자료형을 만든 이유
---- 매개 변수를 참조 자료형만 취급하는 메소드를 처리하기 위해
---- 제네릭과 같은 기본 자료형을 사용하지 않는 기능을 사용하기 위해
---- 문자열을 숫자로, 숫자를 문자열로 쉽게 변환하고, 진수 변환을 처리하기 위해
---- 클래스에 선언된 상수 값을 사용하기 위해(MIN_VALUE, MAX_VALUE)
Byte.MIN_VALUE // -128
Byte.MAX_VALUE // 127
Short.MIN_VALUE // -32768
Short.MAX_VALUE // 32767
Integer.MIN_VALUE // -2147483648
Integer.MAX_VALUE // 2147483647
Long.MIN_VALUE // -9223372036854775808
Long.MAX_VALUE // 9223372036854775807
Float.MIN_VALUE // 1.4E-45
Float.MAX_VALUE // 3.4028235E38
Double.MIN_VALUE // 4.9E-324
Double.MAX_VALUE // 1.797631348623157e308
Character.MIN_VALUE // 0
Character.MAX_VALUE // 65535
---- Character 타입은 char 타입으로 출력되므로 int 타입으로 형변환 하여 확인해야 한다.
Integer.toBinaryString(Integer.MIN_VALUE); // 10000000000000000000000000000000
Integer.toBinaryString(Integer.MAX_VALUE); // 11111111111111111111111111111111
Integer.toHexString(Integer.MIN_VALUE); // 80000000
Integer.toHexString(Integer.MAX_VALUE); // 7fffffff
-- 중요한 연산인 경우(돈 계산 등)
// 정수형
BigInteger
// 소수형
BigDecimal
---- java.lang.Number 클래스를 상속
---- java.math 패키지에 선언
-- 각종 정보를 확인하기 위한 System 클래스
---- 생성자가 없다.
---- static 변수 3개가 선언되어 있다.
static PrintStream err // 에러 및 오류를 출력할 때 사용한다.
static InputStream in // 입력값을 처리할 때 사용한다.
static PrintStream out // 출력값을 처리할 때 사용한다.
---- 출력과 관계된 메소드는 PrintStream에 선언되어 있다.
---- PrintStream, InputStream은 java.io 패키지에 선언되어 있다.
---- System 클래스의 메소드 역할
------ 시스템 속성 값 관리
static String clearProperty(String key)
// key에 지정된 시스템 속성을 제거
static Properties getProperties()
// 현재 시스템 속성을 Properties 클래스 형태로 제공
static String getProperty(String key)
// key에 지정된 문자열로 된 시스템 속성값을 가져온다.
static String getProperty(String key, String def)
// key에 지정된 문자열로 된 시스템 속성값을 얻고, 없는 경우 def에 지정된 값을 반환
static void setProperties(Properties props)
// Properties 타입으로 넘겨주는 매개변수에 있는 값을 시스템 속성에 넣는다.
static String setProperties(String key, String value)
// key에 지정된 시스템 속성의 값을 value로 대체
-- Properties 클래스
---- java.util 패키지에 속한다.
---- Hashtable의 상속을 받는다.
------ key와 value의 쌍으로 이루어진 여러 개의 값을 갖는 Map 형태의 자료 구조
------ 배열은 index로 값을 찾지만 Hashtable은 key 값으로 값을 찾는다.
---- Collection과 관련 있다.
---- 자바 프로그램을 실행하면 properties 객체가 생성되며 어디서든 같은 JVM인 경우 꺼내 사용할 수 있다.
System.getProperty("java.version")); // 컴퓨터에 설치된 java의 버전을 반환
/*
jshell> System.out.println("JAVA " + System.getProperty("java.version"));
JAVA 11.0.20
*/
-- PrintStream
---- static하게 사용한다.
---- 생성자를 사용하지 않는다.
---- 주요 메소드
print()
// 매개변수를 출력하고 줄바꿈을 하지 않는다.
println()
// 매개변수를 출력하고 줄바꿈을 한다.
format()
printf()
write()
-- 줄바꿈을 하고 싶은 경우
---- println(""); 으로 처리하면 필요없는 객체가 생성되므로 println()으로 처리하는 것이 효율적이다.
-- println()과 print() 는 byte, short 타입을 매개변수로 받는 메소드가 없으나 int 타입을 매개변수로 받는 메소드에서 자동으로 처리해준다.
-- 객체를 출력할 때에는 toString()이 아닌 valueOf() 메소드를 사용하는 것이 안전하다.
public void printNull() {
Object obj == null;
System.out.println(obj); // valueOf()로 출력
// = String.valueOf(obj)
System.out.println(obj + " is null"); // StringBuilder로 변환해서 출력
// = new StringBuilder().append(obj).append(" is null");
System.out.println(obj.toString()); // 오류발생 [NullPointerException]
}
---- 객체를 출력할 때, toString()메소드를 호출하므로 null의 toString()은 오류가 발생하는 것이 맞다.
---- println()과 print()에서는 toString()을 호출하는 것이 아니기에 오류가 발생하지 않는다.
------ String의 valueOf()라는 static 메소드를 호출하여 결과를 받은 후 출력한다.
------ >>> String.valueOf(obj)
------ 시스템 환경 값 조회
static Map<String, String> getenv()
// 현재 시스템 환경에 대한 Map 형태의 리턴값
static String getenv(String name)
// 지정한 name에 해당하는 값을 리턴
---- 환경값은 변경할 수 없고 읽기만 가능하다.
---- OS나 장비와 관련된 정보
System.getenv("JAVA_HOME"); // JDK 가 설치되어 있는 경로
/*
jshell> System.out.println("JAVA_HOME " + System.getenv("JAVA_HOME"));
JAVA_HOME C:\Program Files\Java\jdk-11.0.20
*/
---- 설정되어 있지 않은 경우 null로 출력될 수 있다.
------ GC 수행
static void gc()
// 가비지 컬렉터를 실행
static void runFinalization()
// GC 처리를 기다리는 모든 객체에 대해 finalize() 메소드를 실행
---- 명시적으로 메소드를 사용하는 경우 다른 작업을 멈추고 이 작업을 실행
---- JVM에 GC를 강요하는 것은 좋지 않으므로 사용하지 않는다.
------ JVM 종료
static void exit(int status)
// 현재 수행중인 JVM을 멈춘다.
---- 호출하지 않는 메소드
---- 안드로이드 앱이나 웹 애플리케이션에서 이 메소드를 호출하는 경우 해당 애플리케이션의 JVM이 종료되어 장애로 연결된다.
---- 0일 경우에만 정상 종료를 의미한다.
---- 0이 아닌 경우 비정상 종료를 의미한다.
------ 현재 시간 조회
static long currentTimeMillis()
// 현재 시간을 밀리초 단위로 리턴
static long nanoTime()
// 현재 시간을 나노초 단위로 리턴
---- UTC_Universal Time 기준으로 1970년 1월 1일 00:00부터 지금까지의 차이를 출력
---- 밀리초 : 1/1,000 초 (1000ms = 1초)
---- 나노 초 : 1/1,000,000,000초
pulbic void numberMinMaxElapsedCheck() {
long startTime = System.currentTimeMillis();
long startNanoTime = System.nanoTime();
}
'Java' 카테고리의 다른 글
Java의 신2_Chapter 4_Collection List (0) | 2024.04.02 |
---|---|
Java의 신2_Chapter 3_Generic (0) | 2024.04.02 |
Java의 신_Chapter 17_Annotation (0) | 2024.03.29 |
Java의 신_Chapter 16_Nested Class (0) | 2024.03.29 |
Java의 신_Chapter 15_String (0) | 2024.03.29 |