Recent Posts
Recent Comments
Link
11-21 14:38
Today
Total
관리 메뉴

삶 가운데 남긴 기록 AACII.TISTORY.COM

자바 API , Object 클래스 본문

DEV&OPS/Java

자바 API , Object 클래스

ALEPH.GEM 2022. 4. 7. 13:28

자바 API documents

http://docs.oracle.com/javase/8/docs/api/

 

Java Platform SE 8

 

docs.oracle.com

 

Object class

클래스는 extends를 생략하면 암시적으로 Object 클래스를 상속받습니다.

Object는 자바의 최상위 부모 클래스입니다.

 

equals()

객체가 동등한 지 비교합니다.

public class Member {
	public String id;
	public Member(String id) {
		this.id = id;
	}
	
	@Override
	public boolean equals(Object obj) {
		//인수가 Member Type인지 확인
		if(obj instanceof Member) {
			//Member type으로 캐스팅
			Member member = (Member)obj;
			if(id.equals(member.id)) {
				return true;
			}
		}
		return false;	
	}
	
	public static void main(String[] args) {
		Member obj1 = new Member("blue");
		Member obj2 = new Member("blue");
		Member obj3 = new Member("red");
		
		if(obj1.equals(obj2)) {
			System.out.println("obj1 == obj2");
		}else {
			System.out.println("obj1 != obj2");
		}
		
		if(obj1.equals(obj3)) {
			System.out.println("obj1 == obj3");
		}else {
			System.out.println("obj1 != obj3");
		}
	}
}

 

hashCode()

객체의 해시 코드는 객체의 메모리 번지를 이용해서 객체를 식별하기 위한 값을 말합니다.

그래서 해시 코드 값으로 비교를 하면 같은 객체인지 다른 객체인지 판별할 수 있습니다.

 

toString()

Object 클래스의 toString() 메서드는 객체의 해시 코드를 리턴합니다.

객체의 문자 정보를 해시 코드 말고 다른 정보를 리턴하도록 하려면 override 해서 사용합니다.

public class SmartPhone {
	private String company;
	private String os;
	
	public SmartPhone(String company, String os) {
		this.company = company;
		this.os = os;
	}
	
	@Override
	public String toString() {
		return company + ", " + os;
	}

	public static void main(String[] args) {
		SmartPhone myPhone = new SmartPhone("구글", "안드로이드");
		String strObj = myPhone.toString();
		System.out.println(strObj);
		System.out.println(myPhone);
	}

}

 

객체 소멸자 finalize()

참조하지 않는 객체는 Garbage Collector(이하 GC)가 힙 영역에서 자동으로 소멸시킵니다.

GC가 객체를 소멸하기 직전에 finalize()를 실행합니다.

GC는 메모리 상태를 보고 일부만 소멸시키며, CPU 사용량이 여유가 있을 때 실행되므로 finalize()가 실행되는 시점은 명확하게 알 수 없습니다.

객체가 소멸되기 전 마지막으로 사용한 자원을 close하고 싶거나 중요한 데이터를 저장하고 싶으면 finalize()를 override 해서 사용해도 되지만 GC의 실행 타이밍이 명확하지 않으므로 일반 메서드에서 명시적으로 자원을 해제 해주는 것이 좋습니다.

public class Counter {
	private int no;
	
	public Counter(int no) {
		this.no = no;
	}
	
	@Override
	protected void finalize() throws Throwable{
		System.out.println(no + "객체의 finalize()가 실행 됨.");
	}

	public static void main(String[] args) {
		Counter counter = null;
		for(int i = 1; i <= 50 ; i++) {
			counter = new Counter(i);
			counter = null;	//객체의 연결을 끊어서 Garbage로 만듦
			System.gc(); 	//Garbage Collect 를 시스템에 요청
		}
	}

}

 

 

 

 

 

 

 

 

728x90

'DEV&OPS > Java' 카테고리의 다른 글

System 클래스  (0) 2022.04.07
java.util.Objects 클래스  (0) 2022.04.07
예외 처리  (0) 2022.04.06
익명 객체  (0) 2022.04.05
중첩 클래스 중첩 인터페이스  (0) 2022.04.05