You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
-
java.lang
➡️lang 패키지가 제공하는 것들
java.lang 패키지에 있는 클래스들은 import를 안해줘도 사용할 수 있다.
lang 패키지가 제공하는 인터페이스, 클래스, 예외 클래스 등은 다음과 같다
ClassNotFoundException, CloneNotSupportedException, EnumConstantNotPresentException, IllegalAccessException, IllegalArgumentException,
IndexOutOfBoundsException, InstantiationException, NegativeArraySizeException, NoSuchFieldException,
NoSuchNethodException, NullPointerException, RuntimeException,
SecurityException, TypeNotPresentException, UnsupportedOperationException
➡️숫자를 처리하는 클래스
자바에서 자료형은 기본자료형, 참조자료형이 있다.
기본자료형(Primitive Type)은 Stack 영역에 저장된다. 반면참조 자료형(Reference Type)은 Heap 영역에 저장된다.기본 자료형으로 계산되는 것이 참조 자료형보다 계산을 빠르게 처리한다.
간략한 이유는 기본 자료형은 값을 저장하는 반면 참조 자료형은 주소값을 저장하기 때문에 주소를 한번 더 걸친다. 따라서 더 느리다.
기본자료형의 숫자를 객체로 처리해야할 때가 있다.
그래서
자바에서는 기본 자료형으로 선언되어 있는 타입의 클래스들이 선언되어 있다.
Character 클래스를 제외하고 나머지 클래스들은 각 기본 자료형의 이름에서 첫 문자만 대문자로 바뀌었다고 보면 된다.
Character와 Boolean 을 제외한 숫자를 처리하는 클래스들은
감싼 클래스(Wrapper class)라고 불린다.Number의 구조Character 클래스를 제외하고는
Wrapper 클래스는 공통적인 메소드를 제공한다.예)
parse타입이름()와 valueOf()
참조 자료형 중에서 더하기 연산이 가능한 것은
String뿐이다.그런데 참조 자료형 중에서 Byte, Short, Integer, Long, Float, Double 타입들은 필요시 기본 자료형처럼 사용할 수 있다.
따라서 new를 사용하여 객체를 만들지 않아도 값을 할당할 수 있다.
이러한 숫자를 처리하는 참조 자료형을 만든 이유는 무엇일까?
기본 자료형을 참조 자료형으로 만든 클래스들은 Boolean 클래스를 제외하고 모두 MIN_VALUE와 MAX_VALUE라는 상수를 갖고 있다.
해당 타입이 나타낼 수 있는 값의 범위를 확인하려면 static으로 선언되어 있는 것을 사용하면된다.
Character의 경우 출력할 경우 char 타입으로 출력되므로 알아보기가 힘들다. 따라서 int로 형변환하여 그 값을 확인 할 수 있게 된다.
결과를 보면 Integer, Long 타입을 읽기가 어렵다. 이럴 때 더 보기 편하게 보는 방법이 있다.
값을 2진수나 16진수로 표현해서 값을 표현하면 더 보기 편하다.
System 클래스
학부 시절 System 클래스를 처음 접한 건 JAVA 처음 배울 때 콘솔 창에 출력하기 위해서
‘System.out.println()’를 사용해서 출력했다.그래서인지 친근한 느낌이 있다. 하지만 위에 처럼 세트로 사용했지
System이라는 것을 자세히 공부해 본 적이 없다.오늘 정리로 오래된 궁금증을 풀어보자.
System클래스는 이름 그대로 시스템에 대한 정보를 확인하는 클래스이다. 이 클래스에서 제공되는 메소드를 분류해보면… 아래와 같이 분류할 수 있다.System의 역할
시스템속성(Property)값 관리
현재 내가 쓰고 있는 java version은 11이고 JDK 11의 update13이라는 버전을 사용하고 있다는 뜻이다.
시스템 환경(Environment)값 조회
만약 이 JAVA_HOME이 설정되어 있지 않으면
null매개 변수가 없는 getenv() 메소드는 리턴 타입이 Map<String, String> 이다.
System 클래스에서 호출하면 무서운 광경이 펼쳐지는 메소드
GC 수행
자바에서는 메모리 처리를 개발자가 별로도 하지 않는다.
System.ge()라는 메소드를 호출하면 가비지 컬렉션을 명시적으로 처리하도록 할 수 있다.Object클래스에 선언되어 있는 finalize() 메소드를 명시적으로 수행하도록 하는
runFinalization()메소드.위의 두 개 메소드들을 호출하지 않아도 알아서 JVM이 더이상 필요 없는개체를 처리하는 GC 작업과 finalization 작업을 실행한다.
명시적으로 이 메소드들을 호출하게 된다면 시스템은 하려던 일들을 멈추고 이 작업을 실행한다.
그렇기 때문에 조심하자…!!
JVM 종료
안드로이드 앱이나 웹 애플리케이션에서 이 메소드를 사용하면 해당 애플리케이션의 JVM이 죽어버린다.
바로 장애로 이어진다.
매개 변수로 넘어가는 정수는 0일 경우에만 정상적인 종료를 의미한다. 그 외의 숫자는 비정상적인 종료를 의미한다.
현재 시간 조회
currentTimeMillis()nanoTime()예시
Milli second = 0 으로 출력되었다.
하지만 Nano second는 매우 큰 숫자로 출려된다.
실제로 나노초를 밀리초로 확인하기 위해서 1/1,000,000으로 나누면 0.5ms다. 어떤 값이 더 정확하다고 이야기하기는 어렵다.
하지만 시간을 측정할 필요가 있을 때는 나노초를 이용하는 것을 권장한다고 한다.
nanoTime()가 만들어진 목적이 시간 측정을 위해서 이기 때문이다.
System.out 이란 ?
System 클래스에 선언되어 있는 변수
out,err는 PrintStream이라는 동일한 클래스의 객체다.정상적인 출력인지, 에러가 났을 때의 출력 결과인지의 차이만 존재한다.
PrintStream클래스의 출력을 위한 주요 메소드의 이름들총 다섯 가지이고 가장 많이 쓰는 것은 println(), print()인 것 같다. 두 가지의 차이는 줄바꿈을 갖고 있는지 안 갖고 있는지 이다.
println()는 newLine() 메소드가 포함되어 있어서 다음라인으로 넘어간다. 즉 줄바꿈이 된다.
print() 같은 경우 줄바꿈을 포함하는 메소드는 없다.
byte타입, short타입을 매개 변수로 받는 메소드가 선언되어 있지 않다.
두 개 모두 정수형이기 때문에 전혀 문제 없이 출력된다.
byte나 short타입을 print()나 println() 메소드에 넘겨주면 int 타입을 매개 변수로 받는 메소드에서 알아서 처리해준다.
추가로
위의 예제에서 중요한점은 obj객체가 null이라는 것이다.
객체를 출력할 때 toString() 메소드를 단순히 호출한다고 생각하고 있었다면, null인 obj의 toString()을 호출하는 셈이다.
null인 obj는 아무런 할당이 되어 있지 않기 때문에 메소드를 호출할 수가 없다.
따라서 컴파일은 제대로 되지만 실행시 예외가 발생한다.
하지만 printNull() 메소드는 컴파일도 잘 된다.
null을 그냥 출력하고 더한 값이 출력된다…
이런 결과가 출력된 이유는 print() 메소드와 println()메소드에서는 단순히 toString() 메소드 결과를 출력하지 않기 때문이다.
String의 valueOf()라는 static메소드를 호출하여 결과를 받은 후 출력한다.
String.valueOf(obj)가 호출된 것이다.
실행을 하게되면 예외가 발생한다. →
NullPointerExceptionobj 자체가 null이고, 이 객체의 toString()이라는 메소드를 호출하게 되면 예외가 발생할 수 밖에 없다.
💡 객체를 출력할 때 → `toString();`하지만 객체를 출력할 때에는
valueOf()메소드를 사용하는 게 더 안전하다.참고 자료
Beta Was this translation helpful? Give feedback.
All reactions