Developer Factory

20. JAVA finalize() 본문

Developer/Java

20. JAVA finalize()

Jeremy.Park 2014. 7. 3. 00:15


Garbage Collector

-> 참조되지 않는 인스턴스

(Garbage) => Dangling Object


-> 관리 영역 : Heap


-> 수행 시점

   1) 메모리 부족

   2) cpu idle time (한가할때)




StudentTest.java


package step01.exam03.test02;

public class StudentTest {

      
       public static void main( String[] args) {
             Student6 s1 = new Student6( "홍길동", 90, 100 , 90 );
             s1 = null;
             System. out.println( "--- 안녕 ---");            
      }
 
       public static void main05 ( String[] args) {
             // getClass() 호출            
             Student s1 = new Student( "홍길동", 90, 100 , 90 );
             Student5 s2 = new Student5( "홍길동", 90, 100 , 90 );
            
             Class c1 = s1 .getClass ();     // s1 인스턴스를 생성할 때 사용한 클래스 정보를 리턴
             Class c2 = s2 .getClass ();     // s2 인스턴스를 생성할 때 사용한 클래스 정보를 리턴
             System. out.println( c1.getName());
             System. out.println( c2.getName());
            
             // 클래스 정보를 바로 꺼내기
             // - 클래스 정보를 가리키는 틀별한 static 변수 'class'
             Class c3 = Student .class;
             Class c4 = Student5 .class;
             System. out.println( c3.getName());
             System. out.println( c4.getName());
            
             if( c1 == c3){
                   System. out.println( "c1 == c3");
            }           
             if( c2 == c4){
                   System. out.println( "c2 == c4");
            }
            
      }

      
       public static void main04 ( String[] args) {
             // hashCode() 재정의하기 전
             Student s1 = new Student( "홍길동",90,100,90);
             Student s2 = new Student( "홍길동",90,100,90);


             System. out.println( Integer. toHexString(s1.hashCode ()));
             System. out.println( s1);
             System. out.println( Integer. toHexString(s2.hashCode ()));
             System. out.println( s2);
            
            
             // hascCode() 와 toString() 재정의
             Student4 s3 = new Student4( "홍길동",90,100,90);
             Student4 s4 = new Student4( "홍길동",90,100,90);

             System. out.println( Integer. toHexString(s3.hashCode()));
             System. out.println( s3);
             System. out.println( Integer. toHexString(s4.hashCode()));
             System. out.println( s4);

      }
      
      

       public static void main03 ( String[] args) {
             // toString사용하기
             Student2 s1 = new Student2( "홍길동",90,100,90);
             // println() 함수는 파라미터로 넘어온 인스턴스에 대해 toString() 메서드를 호출한다.
             // 그리고, toString()이 리턴한 문자열을 출력한다.
             // toString()은 Object 클래스의 매서드이다.
             // 출력형식 : fully qualified class name( Qname) @ hash code
             // - hasc code : 인스턴스 식별 번호이다.
             System. out.println( s1);       
            
             Student3 s2 = new Student3( "홍길동",90,100,90);
             System. out.println( s2);
      }     
      
       public static void main02( String[] args) {
             // Student에서 재정의한 equals() 사용하기
             Student2 s1 = new Student2( "홍길동",90,100,90);
             Student2 s2 = new Student2( "홍길동",90,100,90);

             if ( s1 == s2) System. out.println( "s1 == s2");
             if ( s1.equals( s2)) System. out.println( "s1.equals(s2)");
      }

       public static void main01 ( String[] args) {
             // Object로 부터 상속받은 equals()는 == 연산자와 동일하게 동작한다. 인스턴스가 같은지 비교한다.
             Student s1 = new Student( "홍길동",90,100,90);
             Student s2 = new Student( "홍길동",90,100,90);

             if ( s1 == s2) System. out.println( "s1 == s2");
             if ( s1. equals( s2)) System. out.println( "s1.equals(s2)");
      }
}


Student6.java


package step01.exam03.test02;

// * finalize() 재정의
// - 가비지 컬랙터가 소멸시키기 전에 호출한다.
// - 소멸되기 전에 마무리 할 작업을 기술할 수 있다.
// - C++ 언어에서는 destructor(소멸자)
// - 자바에서는 잘 사용하지 않는다. <= 언제 소멸될지 모른다. <= 종료하는 순간까지 소멸되지 않을 수 있다.
// * Garbage Collector
// 1) 메모리 부족할 때
// 2) CPU 한가할 때
// - 프로그램 종료시까지 실행되지 않을 수 도 있다.

public class Student6 /*extends Object*/ {
       // 모든 클래스는 클래스 정보를 다루는 히든 변수를 갖고 있다.
       /* public static Class class = Student6의 클래스 정보를 담은 인스턴스; */
      
       String       name;
       int                kor;
       int                math;
       int                eng;
      
       public Student6 (String name , int kor, int math, int eng) {
             this.name = name ;
             this.kor = kor ;
             this.math = math ;
             this.eng = eng ;
      }

 @Override
       protected void finalize() throws Throwable {
        System. out.println( "finalize()......");
      }
      
      
  @Override
  public int hashCode() {
        final int prime = 31 ;
        int result = 1;
        result = prime * result + eng;
        result = prime * result + kor;
        result = prime * result + math;
        result = prime * result + (( name == null) ? 0 : name.hashCode());
        return result ;
  }


  @Override
  public boolean equals (Object obj ) {
        if ( this == obj ) {
              return true ;
        }
        if ( obj == null) {
              return false ;
        }
        if (!( obj instanceof Student6 )) {
              return false ;
        }
        Student6 other = ( Student6) obj;
        if ( eng != other. eng) {
              return false ;
        }
        if ( kor != other. kor) {
              return false ;
        }
        if ( math != other. math) {
              return false ;
        }
        if ( name == null) {
              if ( other. name != null) {
                    return false ;
              }
        } else if (!name .equals(other .name )) {
              return false ;
        }
        return true ;
  }


       @Override
       public String toString() {
        return "[" + this.name + ":" + this .kor + "," + this.eng + "," + this .math + "]" ;
      }
      
      
      
      
}




















  


'Developer > Java' 카테고리의 다른 글

22. JAVA parseInt,Collection(List, Set,Map . .)  (0) 2014.07.03
21. JAVA import, Scanner  (0) 2014.07.03
19. JAVA getClass()  (0) 2014.07.03
18. JAVA hashcord()  (0) 2014.07.03
17. JAVA equals(),toString()  (0) 2014.07.03