19.04.14 객체 소멸자, 객체 비교, 동등 비교 등

Back-End/Java 2019. 4. 14. 21:26
728x90
반응형

 

-객체 소멸자-

 

참조하지 않는 배열이나 객체는 쓰레기 수집기(Garbage Collector)가 힙 영역에서 자동적으로 소멸시킨다.
쓰레기 수집기는 객체를 소멸시키기 직전에 마지막으로 객체의 소멸자(finalize())를 실행시킨다.
소멸자는 기본적으로 실행 내용이 없다.

 

 

 

-객체 비교-

 

Objects.compare(T a,T b, Comparator<T>c) 메소드는 두 객체를 비교자(Comparator)로 비교해서 int값을 리턴한다.

 

 

 

-동등 비교-

 

Objects.equals (Object a, Object b)는 두 객체의 동등을 비교한다.
특이한 점은 a와 b가 모두 null일 경우 true를 리턴한다는 점이다.
a와 b가 null이 아닌경우는 a.equals(b)의 결과를 리턴한다.

 

 

 

-쓰레기 수집기 (Garbage Collector)-

 

메모리가 부족하거나 CPU가 한가할때 사용하지 않는 객체를 자동 제거.

 

 

 

-currentTimeMillis(), nanoTime() 메소드-

 

currentTimeMillis() : 컴퓨터의 시계로 부터 현재 시간을 읽어서 밀리세컨드(1/1000초) 단위의 long값을 리턴
nanoTime() : 컴퓨터의 시계로 부터 현재 시간을 읽어서 나노세컨드(1/10^9초) 단위의 long값을 리턴

 

 

 

-시스템 프로퍼티-


자바를 실행시켰을때 자동 설정되는 시스템의 속성값을 말한다.
(ex 운영체제의 종류, 자바프로그램을 실행시킨 사용자 아이디, 자바 버전, 파일경로 등)
시스템 프로퍼티를 읽어오기 위해서는 System.getProperty() 메소드를 이용하면 된다.

 

 

 

-동적 객체 생성(newlnstance())-


Class 객체를 이용하면 new 연산자를 이용하지 않아도 동적으로 객체를 생성할 수 있다. 이 방법은 코드 작성 시에
클래스 이름을 결정할 수 없고, 런타임 시에 클래스 이름이 결정되는 경우에 사용된다.

 

 

 

-깊은 복제-

깊은 복제란 참조하고 있는 객체도 복제하는 것을 말한다.

 

 

-예제 및 출력-

 

1
2
3
4
5
6
7
8
9
10
package com.hs.chap11;
 
public class Car {
    public String model;
 
    public Car(String model) {
        this.model = model;
    }
}
 
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package com.hs.chap11;
 
import java.util.Arrays;
 
public class Member implements Cloneable {
    public String name;
    public int age;
    public int[] scores;
    public Car car;
 
    public Member(String name, int age, int[] scores, Car car) {
        this.name = name;
        this.age = age;
        this.scores = scores;
        this.car = car;
    }
 
    @Override
    protected Object clone() throws CloneNotSupportedException {
        // 먼저 얕은 복사를 해서 name, age를 복사한다.
        Member cloned = (Member) super.clone();
        // scores를 깊은 복제 한다.
        cloned.scores = Arrays.copyOf(this.scores, this.scores.length);
        // car를 깊은 복제 한다.
        cloned.car = new Car(this.car.model);
        // 깊은 복제된 Member 객체를 리턴
        return cloned;
    }
 
    public Member getMember() {
        Member cloned = null;
        try {
            cloned = (Member) clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return cloned;
    }
 
}
 
 
cs

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package com.hs.chap11;
 
public class MemberExample {
 
    public static void main(String[] args) {
        // 원본 객체 생성
        Member original = new Member("홍길동"25new int[] { 9090 }, new Car("소나타"));
 
        // 복제 객체를 얻은 후에 참조 객체의 값을 변경
        Member cloned = original.getMember();
        cloned.scores[0= 100;
        cloned.car.model = "그랜저";
 
        System.out.println("[복제 객체의 필드값]");
        System.out.println("name: " + cloned.name);
        System.out.println("age: " + cloned.age);
        System.out.println("scores: {");
        for (int i = 0; i < cloned.scores.length; i++) {
            System.out.print(cloned.scores[i]);
            System.out.print((i == (cloned.scores.length - 1)) ? "" : ",");
        }
        System.out.println("}");
        System.out.println("car: " + cloned.car.model);
 
        System.out.println();
 
        System.out.println("[원본 객체의 필드값]");
        System.out.println("name: " + original.name);
 
        System.out.println("age: " + original.age);
        System.out.println("scores: {");
        for (int i = 0; i < original.scores.length; i++) {
            System.out.print(original.scores[i]);
            System.out.print((i == (original.scores.length - 1)) ? "" : ",");
        }
        System.out.println("}");
        System.out.println("car: " + original.car.model);
    }
}
 
 
 
cs

 

 


 

728x90
반응형
: