ABOUT ME

Today I Learned

Today
Yesterday
Total
  • 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 : ์ž๋ฐ” ํ•ต์‹ฌํด๋ž˜์Šค ๊ณต๋ถ€ํ•˜๊ธฐ

    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€

๊ฐœ๋ฐœ๊ณต๋ถ€