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
클래스 | 용도 | |
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
클래스 | 용도 | |
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 |