Object class
java.lang ํจํค์ง๋ ์๋ฐ ํ๋ก๊ทธ๋๋ฐ์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ด ๋๋ ํด๋์ค๋ค์ ํฌํจํ๋ค.
import๋ฌธ ์์ด ์ฌ์ฉ ๊ฐ๋ฅ๋ชจ๋ ํด๋์ค์ ์ต๊ณ ์กฐ์์ผ๋ก, ๋ชจ๋ ํด๋์ค๋
Objectํด๋์ค์ ๋ฉค๋ฒ๋ฅผ ์์๋ฐ์
protected Object clone()
๊ฐ์ฒด ๋ณต์
public boolean equals(Object obj)
๊ฐ์ฒด์ ๋ด์ฉ์ด ๊ฐ์์ง ๋น๊ต
protected void finalize()
๊ฐ์ฒด ์๋ฉธ ์ ์ ํธ์ถ(๊ฐ๋น์ง ์ปฌ๋ ํฐ์ ์ํด ํธ์ถ)
public Class getClass()
๊ฐ์ฒด์ ํด๋์ค ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ Class ์ธ์คํด์ค ๋ฐํ
public int hashCode()
๊ฐ์ฒด์ ํด์์ฝ๋๋ฅผ ๋ฐํ
public String toString()
๊ฐ์ฒด๋ฅผ ๋ฌธ์์ด๋ก ๋ฐํ
public void notify()
๊ฐ์ฒด ์์ ์ ์ฌ์ฉํ๋ ค๊ณ ๊ธฐ๋ค๋ฆฌ๋ ์ค๋ ๋๋ฅผ ํ๋๋ง ๊นจ์
public void notifyAll()
๊ฐ์ฒด ์์ ์ ์ฌ์ฉํ๋ ค๊ณ ๊ธฐ๋ค๋ฆฌ๋ ์ค๋ ๋๋ฅผ ๋ชจ๋ ๊นจ์
public void wait()
๋ค๋ฅธ ์ค๋ ๋๊ฐ notify() ํน์ notifyAll()์ ํธ์ถํ ๋๊น์ง ์ง์ ๋ ์๊ฐ๋์ ๋๊ธฐ ์ง์
equals(Object obj)
Object ํด๋์ค์ ์ ์๋ ์๋ณธ equals() ๋ฉ์๋๋ == ์ฐ์ฐ์์ ๋์ผํ๊ฒ ๋์ํ๋๋ฐ, ์ด๋ ๋ ์ฐธ์กฐ ๋ณ์๊ฐ ๋์ผํ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ์ธ์คํด์ค๋ฅผ ๊ฐ๋ฆฌํค๋์ง(๋์ผ์ฑ) ๋น๊ตํ๋ค.
class Point {
int x;
int y;
Point(int x, int y) {
this.x = x;
this.y = y;
}
}
public class EqualsTest {
public static void main(String[] args) {
Point a = new Point(2, 3);
Point b = new Point(2, 3);
Point c = a; // a์ c๋ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐ
// ๋์ผ์ฑ ๋น๊ต(๋น๊ต ๋์์ด ๊ฐ์ ์ธ์คํด์ค์ธ์ง)
System.out.println(a == b); // false
System.out.println(a == c); // true
// ๋๋ฑ์ฑ ๋น๊ต(๋น๊ต ๋์์ด ๊ฐ์ ๊ฐ์ ๊ฐ๋์ง), ํ์ง๋ง Point ํด๋์ค๋ equals() ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉํ์ง ์์๊ธฐ ๋๋ฌธ์ ๋์ผ์ฑ ๋น๊ต์ ๊ฐ๋ค.
System.out.println(a.equals(b)); // false
System.out.println(a.equals(c)); // true
}
}๋ ๊ฐ์ฒด์ ๋ฉค๋ฒ ๋ณ์ ๊ฐ์ ๋น๊ตํ์ฌ ๋
ผ๋ฆฌ์ ๋ด์ฉ์ด ๊ฐ์์ง(๋๋ฑ์ฑ) ๋น๊ตํ๊ณ ์ถ๋ค๋ฉด, equals() ๋ฉ์๋๋ฅผ ๋ค์๊ณผ ๊ฐ์ ๊ท์น์ ๋ฐ๋ผ ์ฌ์ ์(์ค๋ฒ๋ผ์ด๋ฉ)ํด์ผ ํ๋ค.
๋ฐ์ฌ์ฑ(Reflexive):
x.equals(x)๋ ํญ์true๋์นญ์ฑ(Symmetric):
x.equals(y)๊ฐtrue๋ฉดy.equals(x)๋true์ถ์ด์ฑ(Transitive):
x.equals(y)์y.equals(z)๊ฐtrue๋ฉดx.equals(z)๋true์ผ๊ด์ฑ(Consistent):
x.equals(y)๋ ์ฌ๋ฌ ๋ฒ ํธ์ถํด๋ ๊ฐ์ ๊ฐ์ ๋ฐํnull:x.equals(null)๋ ํญ์false
hashCode()
hashCode()๋ ๊ฐ์ฒด์ ํด์ ์ฝ๋๋ฅผ ๋ฐํํ๋ ๋ฉ์๋๋ค. ํด์ ์ฝ๋๋ ๊ฐ์ฒด๋ฅผ ์๋ณํ๋ ์ ์ ๊ฐ์ผ๋ก, HashMap, HashSet๊ณผ ๊ฐ์ด ํด์ ํ
์ด๋ธ(Hash Table)์ ์ฌ์ฉํ๋ ์๋ฃ๊ตฌ์กฐ์์ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๊ณ ๊ฒ์ํ ๋ ์ฌ์ฉ๋๋ค.
Object ํด๋์ค์ ์๋ณธ hashCode() ๋ฉ์๋๋ ๊ฐ์ฒด์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ์ ์ฌํ ๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก ํด์ ์ฝ๋๋ฅผ ๋ฐํํ๋ฉฐ, String ํด๋์ค๋ ๋ด์ฉ์ ๊ธฐ๋ฐ์ผ๋ก ํด์ ์ฝ๋๋ฅผ ์์ฑํ๋๋ก hashCode() ๊ฐ ์ฌ์ ์๋์ด ์๋ค.
hashCode() & equals()
equals()์ hashCode()๋ ํจ๊ป ์ฌ์ฉ๋ ๋ ์ผ๊ด๋ ๋์์ ๋ณด์ฅํ๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ ๊ท์น์ ๋ฐ๋ผ์ผ ํ๋ค.
equals()๋ฅผ ํตํดtrue๋ฅผ ๋ฐํํ๋ ๋ ๊ฐ์ฒด๋ ๋ฐ๋์ ๋์ผํhashCode()๊ฐ ๋ฐํhashCode()๊ฐ ๋์ผํ ๋ ๊ฐ์ฒด๊ฐequals()๋ฅผ ํตํดtrue๋ฅผ ๋ฐํํ ํ์๋ ์์
๋ง์ฝ equals()๋ง ์ฌ์ ์ํ๊ณ hashCode()๋ฅผ ์ฌ์ ์ํ์ง ์์ผ๋ฉด, ์ด ๊ท์ฝ์ 1๋ฒ ํญ๋ชฉ์ด ๊นจ์ง๊ฒ ๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด equals()์ ๋น๊ต ๊ธฐ์ค์ผ๋ก ์ฌ์ฉ๋ ํ๋(name)๋ฅผ hashCode() ์์ฑ์๋ ๋์ผํ๊ฒ ์ฌ์ฉํด์ผ ํ๋ค.
toString()
toString()์ ๊ฐ์ฒด๋ฅผ ๋ํํ๋ ๋ฌธ์์ด์ ๋ฐํํ๋๋ฐ, Object์ ์๋ณธ toString()์ "ํด๋์ค๋ช
@ํด์์ฝ๋" ํ์์ ๋ฌธ์์ด(์: Animal@1ad9d)์ ๋ฐํํ๋ค.
๋๋ฒ๊น
์ด๋ ๋ก๊น
(logging) ์ ๊ฐ์ฒด์ ํ์ฌ ์ํ(๋ฉค๋ฒ ๋ณ์ ๊ฐ)๋ฅผ ์ฝ๊ฒ ํ์
ํ ์ ์๋๋ก toString()์ ์ฌ์ ์ํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค.
clone()
clone()์ ๊ฐ์ฒด์ ๋ณต์ฌ๋ณธ์ ์์ฑํ์ฌ ๋ฐํํ๋ ๋ฉ์๋๋ก, clone()์ ์ฌ๋ฐ๋ฅด๊ฒ ์ฌ์ฉํ๋ ค๋ฉด ๋ค์ ๋ ๊ฐ์ง ์กฐ๊ฑด์ ๋ง์กฑํด์ผ ํ๋ค.
๋ณต์ ํ ํด๋์ค๋
Cloneable์ธํฐํ์ด์ค๋ฅผ ๊ตฌํ ํ์Cloneable์ ๋ด๋ถ์ ๋ฉ์๋๊ฐ ์๋ ๋ง์ปค ์ธํฐํ์ด์ค(Marker Interface)๋ก, JVM์ ์ด ๊ฐ์ฒด๊ฐ ๋ณต์ ๊ฐ๋ฅํจ์ ์๋ฆผ
Object์clone()๋ฉ์๋๋protected์ด๋ฏ๋ก, ์ธ๋ถ์์ ํธ์ถํ ์ ์๋๋กpublic์ผ๋ก ์ค๋ฒ๋ผ์ด๋ฉํ๊ณCloneNotSupportedException์์ธ ์ฒ๋ฆฌ ํ์
๋ํ, Object์ clone() ๋ฉ์๋๋ '์์ ๋ณต์ฌ(Shallow Copy)'๋ฅผ ์ํํ๋ค๋ ์ ์ ์ ์ํด์ผ ํ๋ค.
์ฐธ์กฐํ ๋ฉค๋ฒ ๋ณ์๋ฅผ ํฌํจํ๋ ๊ฐ์ฒด๋ฅผ ๋ณต์ ํ ๋๋, ์ฐธ์กฐํ ๋ณ์๊น์ง ๋ชจ๋ ๋ณต์ ํ์ฌ ์๋ณธ๊ณผ ์์ ํ ๋ถ๋ฆฌ๋ ๊ฐ์ฒด๋ฅผ ๋ง๋๋ '๊น์ ๋ณต์ฌ(Deep Copy)'๋ฅผ ๊ตฌํํด์ผ ํ๋ค.
๋ณดํต clone()์ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค, '๋ณต์ฌ ์์ฑ์(Copy Constructor)'๋ '๋ณต์ฌ ํฉํฐ๋ฆฌ ๋ฉ์๋'๋ฅผ ์ ์ํ์ฌ ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅํ๊ณ ์๋ค.
getClass()
getClass()๋ ๊ฐ์ฒด์ ๋ฐํ์ ํด๋์ค ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ Class ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค.
ํด๋น ๊ฐ์ฒด๋ฅผ ์ด์ฉํด ๋ฆฌํ๋ ์ ์ ํตํด ํด๋น ํด๋์ค์ ๋ฉ์๋ / ํ๋ / ์์ฑ์ ์ ๋ณด์ ์ ๊ทผํ๋ ๋ฑ ๋์ ์ธ ํ๋ก๊ทธ๋๋ฐ์ ํ ์ ์๋ค.
์ฐธ๊ณ ์๋ฃ
Last updated
Was this helpful?