hyeonga_code

Java의 신2_Chapter 2_ java.lang 패키지 본문

Java

Java의 신2_Chapter 2_ java.lang 패키지

hyeonga 2024. 4. 2. 05:59
반응형

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