Goal
- java.lang 패키지에 대해 알아본다
- java.util 패키지에 대해 알아본다
- Object 클래스에 대해 알아본다
java.lang 패키지란?
자바 프로그램의 기본적인 클래스(인터페이스, 클래스, enum, exception, error, annotion)를 담고 있는 패키지로
java.lang 패키지 안에 있는 클래스와 인터페이스는 import 없이 사용 가능하다.
참고
https://docs.oracle.com/javase/8/docs/api/java/lang/package-summary.html
java.lang (Java Platform SE 8 )
Interface Summary Interface Description Appendable An object to which char sequences and values can be appended. AutoCloseable An object that may hold resources (such as file or socket handles) until it is closed. CharSequence A CharSequence is a readabl
docs.oracle.com
클래스 | 용도 | |
Object | 자바 클래스의 최상위 클래스로 사용 필드가 없고 메소드 들로 구성되어 있음 |
|
System | 표준 입력 장치(키보드)로부터 데이터 입력받을 때 사용 표준 출력 장치(모니터)로 출력하기 위해 사용 자바 가상 기계(jvm)를 종료시킬 때 사용 가비지 컬렉터를 실행 요청할 때 사용 |
|
Class | 클래스를 메모리로 로딩할 때 사용 | |
String | 문자열을 저장하고 여러가지 정보를 얻을 때 사용 | |
StringBuffer, StringBuilder | 문자열을 저장하고 내부 문자열을 조작할 때 사용 | |
Math | 수학 함수를 이용할 때 사용 | |
Wrapper | Byte, Short, Character, Integer, Float, Double, Boolean, Long |
기본 타입의 데이터를 갖는 객체를 만들 때 사용 문자열을 기본 타입으로 변환할 때 사용 입력값 검사에 사용 |
java.util 패키지란?
자바 프로그래밍에서 다양한 작업을 더 쉽게 처리할 수 있도록 도와주는 클래스와 기능들을 제공하는 패키지로, 컬렉션 클래스들이 대부분을 차지한다.
참고
https://docs.oracle.com/javase/8/docs/api/java/util/package-summary.html
java.util (Java Platform SE 8 )
Calendar The Calendar class is an abstract class that provides methods for converting between a specific instant in time and a set of calendar fields such as YEAR, MONTH, DAY_OF_MONTH, HOUR, and so on, and for manipulating the calendar fields, such as gett
docs.oracle.com
클래스 | 용도 | |
Arrays | 배열을 조작(비교,복사,정렬,찾기) 할 때 사용 | |
Calendar | 운영체제의 날짜와 시간을 얻을 때 사용 | |
Date | 날짜와 시간 정보를 저장하는 클래스 | |
Objects | 객체 비교, 널(null)여부 등을 조사할 때 사용 | |
StringTokenizer | 특정 문자로 구분된 문자열을 뽑아낼 때 사용 | |
Random | 난수를 얻을 때 사용 |
Object 클래스란 ?
우리가 클래스를 선언할 때 extends 키워드로 다른 클래스를 상속하지 않으면, 암시적으로 java.lang.Object 클래스를 상속하게 된다.
즉, 자바의 모든 클래스는 Object 클래스의 자식이거나 자손 클래스다. Object는 자바의 최상위 부모 클래스다.
Object의 equals()메소드
1. 객체비교 (equals)
- 두 객체를 동등 비교할 때 사용
- String equals()는 Object의 equals()를 오버라이딩하여 재정의 했기 때문에, 문자열이 동일한지 비교
- equals()메소드의 매개타입은 Object인데, 이것은 모든 객체가 매개값으로 대입될 수 있음.
- 이유는 Object가 최상위 타입으로 모든객체는 Object로 자동 타입 변환이 될 수 있기 때문
- Object클래스의 equals()는 ==와 동일한 결과를 리턴한다.
- 동일한 객체면 true, 아니면 false
String txt1 = new String("kim");
String txt2 = new String("kim");
System.out.println((txt1).equals(txt2)); // 값 비교
System.out.println(txt1 == txt2); // 주소 비교
결과
true
false
2. 객체 해시코드 (hashcode())
- 객체를 생성할 하나의 정수 값
- Object의 hashcode()는 메소드 객체의 메모리 번지를 이용하여 해시코드를 만들어 리턴하기 때문에, 객체마다 다른 값을 가진다
- 해시 기반 자료구조에서 객체를 빠르게 찾기 위한 용도로 사용되며, 객체의 고유한 해시 값을 반환한다.
- 하지만 hashCode 값이 같다고 해서 두 객체가 반드시 같은 것은 아니다.
- 객체의 내부 상태가 조금만 다르더라도 서로 다른 hashCode 값을 가질 수 있다.
- 또한 hashCode 충돌이 발생할 수 있기 때문에 서로 다른 객체가 같은 hashCode 값을 가질 수도 있다
- 논리적 동등 비교시 hashcode()를 오버라이딩 해야함
Object obj1 = new Object();
Object obj2 = new Object();
System.out.println(obj1 == obj2);
System.out.println(obj1.equals(obj2));
System.out.println("obj1 hashcode :"+obj1.hashCode());
System.out.println("obj2 hashcode :"+obj2.hashCode());
결과
false
false
obj1 hashcode :6738746
obj2 hashcode :2096171631
3. 객체 문자 정보(toString())
- 객체의 문자정보를 리턴
- 클래스명@16진수해시코드
- Object의 하위 클래스는 toString()을 재정의하여 간결하고 유익한 정보를 리턴 가능
Object obj1 = new Object();
Object obj3 = new Date();
System.out.println("obj1 toString() :"+obj1.toString());
System.out.println("obj3 toString() :"+obj3.toString());
결과
obj1 toString() :java.lang.Object@66d33a
obj3 toString() :Thu Aug 24 17:55:08 KST 2023
4. 객체 복제(clone())
- 객체 복제는 원본 객체의 필드값과 동일한 값을 가지는 새로운 객체를 생성하는 것을 의미한다.
- 객체를 복제하는 이유는 원본 객체를 안전하기 보호하기 위함
- 신뢰하지 않은 영역으로 원본 객체를 넘겨 작업할 경우 원복 객체의 데이터의 훼손 가능성
- 복제된 객체가 훼손되더라도 원본 객체에 영향 없음
- 객체를 복제하는 2가지 방법
- 얕은 복제
- 깊은 복제
5. 객체 소멸자(finalize())
- gc는 힙 영역에서 더 이상 사용하지 않는 쓰레기 객체들을 자동적으로 소멸시킨다.
- gc는 객체 소멸전 마지막으로 객체의 소멸자(fianlize())를 실행한다.
- 기본적으로 실행 내용이 없다.
- 만약, 소멸되기 전 마지막으로 사용한 자원(데이터 연결, 파일 등)을 닫고 싶거나, 중요한 데이터를 저장하고 싶다면 Object의 finalize()를 재정의할 수 있다.
- gc는 메모리가 부족하거나 cpu가 한가할 때 jvm에 의해서 자동 실행되므로, finalize() 메소드가 호출되는 시점은 명확하지 않다.
- 따라서, 프로그램 종료 즉시 자원을 해제하거나 즉시 데이터를 최종 저장해야 한다면, 일반 메소드에서 작성하고 프로그램이 종료될 때 명시적으로 메소드를 호출하는 것이 좋다.
참고
이것이 자바다 by 신용권
'JAVA > about java' 카테고리의 다른 글
[java] 열거타입 enum (0) | 2023.08.30 |
---|---|
[java] equals(), hashcode(), toString() 재정의를 왜 하는가 (0) | 2023.08.24 |
[String] String vs StringBuffer vs StringBulider (0) | 2023.08.22 |
[type] 자료형, 기본 자료형 (Primitive type) vs 참조 자료형(Reference type) (0) | 2023.08.21 |
[variables] 지역변수, 클래스변수, 인스턴스 변수 (0) | 2023.08.20 |