equals()

equals()

์ž๋ฐ”์—์„  ๋น„๊ต๋ฅผ ํ• ๋•Œ ์—ฐ์‚ฐ์ž == ์„ ์‚ฌ์šฉํ•œ๋‹ค.
ํ•˜์ง€๋งŒ ๊ฐ์ฒด์™€ ๊ฐ์ฒด๋ผ๋ฆฌ์˜ ๋น„๊ต์—์„œ๋Š” == ์„ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์—†๋‹ค.
์ด์œ ๋กœ๋Š” == ์—ฐ์‚ฐ์ž๋Š” ๋Œ€์ƒ์˜ ๊ฐ’๊ณผ ๊ฐ’์„ ๋น„๊ตํ•˜์—ฌ true ๋˜๋Š” false๋ฅผ ๋ฆฌํ„ดํ•˜๊ฒŒ ๋œ๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ž๋ฐ”๋Š” ๊ฐ์ฒด๊ฐ„์˜ ๋น„๊ต๋ฅผ ์œ„ํ•œ equals()๋ฅผ ์ œ๊ณตํ•ด ์ค€๋‹ค.

equals() ๋˜ํ•œ boolean type์œผ๋กœ true์™€ false๋ฅผ retrunํ•œ๋‹ค. ๊ฐ์ฒด๋Š” ๊ฐ๊ฐ์˜ ์ •ํ•ด์ง„ ๊ฐ’์ด ์•„๋‹ˆ๋ผ ์ธ์Šคํ„ด์Šค์˜ ์ฐธ์กฐ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— == ์—ฐ์‚ฐ์ž๋กœ๋Š” ๋น„๊ต ํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค. ํ•˜์ง€๋งŒ ๊ฐ์ฒด ๋ผ๋ฆฌ์˜ == ์—ฐ์‚ฐ์ž ์™ธ์—๋„ equals()๋ฅผ ์‚ฌ์šฉ์‹œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

        B b1 = new B(1,"ํ™๊ธธ๋™");
		B b2 = new B(1,"ํ™๊ธธ๋™");

        //equals / ==์˜ ์˜๋ฏธ์ดํ•ด
        System.out.println("b1,b2๋Š” ๊ฐ™์€ ๊ฐ์ฒด ์ธ๊ฐ€");
		System.out.println("b1==b2() : "+ (b1==b2)); //false ๊ฐ์ฒด๊ฐ„์˜ ๋น„๊ต
        System.out.println("b1,b2๋Š” ๊ฐ™์€ equalsํ•œ ์ธ๊ฐ€");
		System.out.println("b1.equals(b2) : "+b1.equals(b2)); //false

		System.out.println("========================");

        //์ฐธ์กฐ๊ฐ’์„ ๊ฐ™๊ฒŒํ•˜์ž.
		b1 = b2; // b1์˜ ์ฐธ์กฐ๊ฐ’์„ ๊ฐ™์ด ๊ณต์œ ํ•˜๊ธฐ์— true
        System.out.println("b1,b2๋Š” ๊ฐ™์€ ๊ฐ์ฒด ์ธ๊ฐ€");
		System.out.println("b1==b2() : "+ (b1==b2));
        System.out.println("b1,b2๋Š” ๊ฐ™์€ equalsํ•œ ์ธ๊ฐ€");
		System.out.println("b1.equals(b2) : "+b1.equals(b2));

์•„๋ž˜์™€ ๊ฐ™์ด Object class์˜ equals()์€ ๋งค๊ฐœ๋ณ€์ˆ˜ type์œผ๋กœ Object๋ฅผ ๊ฐ€์ง„๋‹ค.
Object๋Š” ๋ชจ๋“  Class์— ์ƒ์œ„ ํด๋ž˜์Šค๋กœ ์กด์žฌํ•˜๋ฉฐ ๋ชจ๋“  Reference type์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

public boolean equals(Object obj) {
        return (this == obj);
    }

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ๋œ๋‹ค.
์—ฌ๊ธฐ์„œ ๋น„๊ตํ•˜๋Š” b1์˜ Data type์€ B์ด๋‹ค. B๋Š” Object๋ฅผ ์ƒ์†๋ฐ›๋Š” ํ•˜์œ„ํด๋ž˜์Šค์ด๋‹ค. ํ•˜์ง€๋งŒ b2๋Š” equals()์—์„œ Object type๋กœ ํ˜•๋ณ€ํ™˜์„ ํ•˜์—ฌ return์ด ๋œ๋‹ค.
Reference type์€ primitive type์™€ ๋‹ฌ๋ฆฌ ํ˜•๋ณ€ํ™˜์‹œ ์ฐธ์กฐํ•˜๋Š” ๋ฒ”์œ„๋ฅผ ๊ฑด๋“ค๊ฒŒ๋œ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— b1 ๊ณผ b2์˜ Data type๊ฐ€ ๋‹ค๋ฅด๊ณ  ์ฐธ์กฐํ•˜๋Š” ๋ฒ”์œ„๊ฐ€ ๋‹ค๋ฅด๊ธฐ์— false๊ฐ€ ๋‚˜์˜ค๊ฒŒ๋œ๋‹ค. ์—ฌ๊ธฐ์„œ true๋ฅผ ๋ฐ›์•„ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๊ฒŒ ํ•˜๋ ค๋ฉด Reference type์˜ ๋ช…์‹œ์ ํ˜•๋ณ€ํ™˜์„ ์ ์šฉํ•˜์—ฌ์•ผ ํ•œ๋‹ค.

public boolean equals(Object obj){
		boolean equal = ( this.no == ( (B)obj ).no );
		return equal;
	}

equals()๋ฅผ overRidingํ•˜์—ฌ ์‚ฌ์šฉํ•œ ๊ฒƒ ์ด๋‹ค. ์ด์™€ ๊ฐ™์ด ํ˜•๋ณ€ํ™˜์„ ํ†ตํ•˜์—ฌ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰ ํ•  ์ˆ˜ ์žˆ๋‹ค.

#java์˜ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” java.lang.class๋“ค ๋Œ€๋ถ€๋ถ„์€ equals๋ฅผ ๋”ฐ๋กœ overRiding ํ•˜์ง€ ์•Š์•„๋„
์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐ Class์— ๋งž๋Š” equals()๋กœ overRiding์ด ๋˜์–ด ์žˆ๋‹ค.

instanceof

Reference ๋น„๊ต์—ฐ์‚ฐ์ž์—๋Š” instanceof ์—ฐ์‚ฐ์ž๊ฐ€ ์กด์žฌํ•œ๋‹ค.
instanceof ์—ฐ์‚ฐ์ž๋Š” ๊ฐ์ฒดํƒ€์ž…์„ ํ™•์ธํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•œ๋‹ค.
ํ˜•๋ณ€ํ™˜์ด ๊ฐ€๋Šฅํ•œ์ง€ ํ•ด๋‹น ์—ฌ๋ถ€๋ฅผ true / false๋กœ ๊ฐ€๋ฅด์ณ์ค€๋‹ค.
์‰ฝ๊ฒŒ ๋งํ•ด์„œ ์ƒ์†๊ด€๊ณ„์— ๋”ฐ๋ฅธ ํด๋ž˜์Šค๋ฅผ ํ™•์ธํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•œ๋‹ค.

์‚ฌ์šฉํ˜•์‹์œผ๋กœ๋Š” โ€˜๊ฐ์ฒด + instanceof + ํด๋ž˜์Šคโ€™์ด๋‹ค

public class B extends A

	A a = new A();
	B b = new B();

//	a instanceof A : true
//	b instanceof A : true
//	a instanceof B : false
//	b instanceof B : true

์œ„์™€ ๊ฐ™์ด ์ž์‹๊ณผ ๋ถ€๋ชจ์— ์š”์†Œ๋“ค์€ ๋ถ€๋ชจ์˜ ๊ฐ์ฒด๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.
ํ•˜์ง€๋งŒ ๋ถ€๋ชจ์˜ ์š”์†Œ๊ฐ€ ์ž์‹์˜ ๊ฐ์ฒด๊ฐ€ ๋  ์ˆ˜๋Š” ์—†๋‹ค.

Categories:

Updated:

Leave a comment