-
JAVA ์๋ฐ Object ํด๋์ค equals(), toString()JAVA 2020. 8. 15. 12:17
๐ฏ ์ค๋ธ์ ํธ ํด๋์ค์ equals(), toString()๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ์ ํตํด ์ฌ์ฉํด๋ณธ๋ค.
Object ํด๋์ค
์ค๋ธ์ ํธ๋ ๋ชจ๋ ํด๋์ค์ ์ต์์ ํด๋์ค์ด๋ค. ๋ช ์์ ์ผ๋ก extends๋ฅผ ์ฌ์ฉํ์ง ์์๋ ๋ชจ๋ ํด๋์ค๋ค์ด ์๋์ผ๋ก ์์๋ฐ๊ณ ์๋ค. ๋ฐ๋ผ์ ๋ชจ๋ ํด๋์ค๋ ์ค๋ธ์ ํธ ํด๋์ค์ ๋ชจ๋ ๋ฉ์๋๋ฅผ ์ ์ธ ์์ด ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ์ค๋ฒ๋ผ์ด๋ฉ ์ฌ์ฉ๋ ๊ฐ๋ฅํ๋ค. ๋ํ ๋คํ์ฑ์ ์ ์ฉํ๋ฉด Object ํ์ ์ ๋ณ์๋ ๋ชจ๋ ๋ฐ์ดํฐํ์ ์ ์ ์ฅํ ์ ์๋ค.
equals() ๋ฉ์๋
๊ธฐ๋ณธ๋ฐ์ดํฐํ์ ๊ฐ์ ๋๋ฑ๋น๊ตํ ๋ == ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๊ณ , ๊ฐ์ฒด์ธ ์ธ์คํด์ค ๊ฐ์ ๋๋ฑ๋น๊ตํ ๋ equals ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค. equals ๋ฉ์๋๋ ๋ด๋ถ์ ์ผ๋ก ==์ฐ์ฐ์๋ก ๊ตฌํ๋์ด ์๋ค.
String p = "ํ๊ธธ๋"; String p2 = "ํ๊ธธ๋"; System.out.println(p==p2);
๋๋ฑ์ฐ์ฐ์ == ์ ๊ธฐ๋ณธํ ๋ฐ์ดํฐ์ผ ๋ ๊ฐ์ ๊ทธ๋๋ก ๋น๊ตํ๊ณ , ์ฐธ์กฐํ ๋ฐ์ดํฐ์ผ ๋ ์ฐธ์กฐ๊ฐ์ ๋น๊ตํ๋ค. ์ฐธ์กฐํ String ํ์ ์ ์๋ก ๋ค๋ฅธ ๋ณ์ p์ p2๋ "ํ๊ธธ๋" ์ด๋ผ๋ ๋์ผํ ๋ฌธ์์ด์ ์ฐธ์กฐํ๊ณ ์๋ค. p์ p2 ๋ ๋ค ๊ฐ์ ์ฃผ์๊ฐ์ ๋น๊ตํ๊ณ ์์ด์ ๋๋ฑ๋น๊ต ๊ฒฐ๊ณผ๋ true๊ฐ ๋๋ค.
class Person { String name; int age; public Person() {} public Person(String name, int age) { this.name = name; this.age = age; } }
Person p = new Person("ํ๊ธธ๋",44); Person p2 = new Person("ํ๊ธธ๋",44); System.out.println(p); System.out.println(p2); System.out.println(p.equals(p2)); ----------- obj.Person@5305068a obj.Person@1f32e575 false
์ด๋ฒ์ Person ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์์ฑํด์ ์ธ์คํด์ค๋ผ๋ฆฌ equals ๋ฉ์๋๋ก ๋น๊ตํด๋ณธ๋ค. ๊ฒฐ๊ณผ๋ == ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ์ ๊ฐ๋ค. ๊ฐ๊ฐ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ธฐ ๋๋ฌธ์ p1๊ณผ p2๋ ์๋ก ๋ค๋ฅธ ์ฃผ์๊ฐ์ ์ฐธ์กฐํ๊ฒ ๋๋ค. ์ฃผ์๊ฐ์ ๋น๊ตํ์ง ์๊ณ ๊ฐ์ฒด์ ๋ด์ฉ์ ์ ํํ๊ฒ ๋น๊ตํ๋ ค๋ฉด ์ค๋ธ์ ํธ ํด๋์ค์ equals ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ ์ฌ์ ์ ํด์ ์ฌ์ฉํด์ผํ๋ค.
์ดํด๋ฆฝ์ค ํด์ ์ฌ์ฉํด equals ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ ํ๊ธฐ
์ฝ๋ ์์ญ์์ ์ค๋ฅธ์ชฝ๋ง์ฐ์ค๋ฅผ ํด๋ฆญํ๊ณ Source์์ Generate hashCode() and equals()๋ฅผ ์ ํํ๋ฉด ์๋์ผ๋ก ์ค๋ฒ๋ผ์ด๋ฉ์ด ์์ฑ๋๋ค. ๊ฐ์ฒด์ ๋ด์ฉ์ ์ ํํ๊ฒ ๋๋ฑ๋น๊ตํ๊ธฐ ์ํด์ equals๋ฉ์๋ ๋ฟ๋ง ์๋๋ผ hashCode() ๋ฉ์๋๊น์ง ํ์ํ๋ค.
@Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + age; 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 (getClass() != obj.getClass()) return false; Person other = (Person) obj; if (age != other.age) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; }
Person ํด๋์ค์ ์๋์ผ๋ก ์ค๋ฒ๋ผ์ด๋ฉ ๋ ๋ฉ์๋์ด๋ค. ์ด์ ๋ค์ p1๊ณผ p2 ๊ฐ์ฒด๋ฅผ ๋น๊ตํด๋ณด๋ฉด ์ ํํ๊ฒ ๋ด์ฉ์ ๋๋ฑ๋น๊ตํด์ true๋ฅผ ๋ฐํํ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
toString() ๋ฉ์๋
๊ฐ์ฒด๋ฅผ ๋ฌธ์์ด๋ก ๋ณ๊ฒฝ์ํค๋ ๋ฉ์๋์ด๋ค. ์ฐธ์กฐ๋ณ์๊ฐ ์ฐธ์กฐํ๋ ์ค์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์์ ์ถ๋ ฅํ๊ธฐ ์ํด toString ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค. ํ๋ฆฐํธํ ๋ ์ฌ์ฉํ๋ print() ๋ฉ์๋์๋ toString()์ด ๋ด๋ถ์ ์ผ๋ก ์ค๋ฒ๋ผ์ด๋ฉ ๋์ด ์๋ํธ์ถ๋๋ค. ์ด ๋ฉ์๋๋ "ํด๋์ค๋ช @16์ง์์์น๊ฐ" ํฌ๋งท์ ๋ฌธ์์ด๋ก ๋ฐํํ๋๋ก ๊ตฌํ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ค์ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ๋ ค๋ฉด ๋ฐ๋์ ์ค๋ฒ๋ผ์ด๋ฉ์ด ํ์ํ๋ค.
generate toString @Override public String toString() { return "Person [name=" + name + ", age=" + age + "]"; }
toString() ๋ฉ์๋๋ ์ดํด๋ฆฝ์ค ๋๊ตฌ๋ฅผ ์ฌ์ฉํด ์ฝ๊ฒ ์ค๋ฒ๋ผ์ด๋ฉํ ์ ์๋ค. ์ฝ๋์์ ์ค๋ฅธ์ชฝ ๋ง์ฐ์ค๋ฅผ ํด๋ฆญํ๊ณ generate toString()์ ์ ํํ๋ฉด ์๋์ผ๋ก ์ค๋ฒ๋ผ์ด๋ฉ์ ๋ง๋ค ์ ์๋ค.
๐ NEXT : ์๋ฐ ํต์ฌํด๋์ค ๊ณต๋ถํ๊ธฐ
๋ฐ์ํ'JAVA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
JAVA ์๋ฐ ์ ์ถ๋ ฅ I/O, ํ์ผ์ฒ๋ฆฌ (0) 2020.08.17 JAVA ์๋ฐ ํต์ฌํด๋์ค (0) 2020.08.16 JAVA ์๋ฐ Map ๋งต HashMap (0) 2020.08.15 JAVA ์๋ฐ List๊ณ์ด ArrayList (0) 2020.08.13 JAVA ์๋ฐ ์ปฌ๋ ์ Set๊ณ์ด HashSet (0) 2020.08.12