2023. 1. 30. 08:39ใJAVA/Effective JAVA
item10. equals๋ ๊ธฐ๋ณธ ๊ท์ฝ์ ์ง์ผ ์ฌ์ ์ํ๋ผ.
" p58. StackoverflowError"
์์ ๊ฒ์๊ธ์์ ์ถ์ด์ฑ ์๋ฐ์ ๋ํ ์์ ๋ก ColorPoint ํด๋์ค์ equals๋ฅผ ์๋ชป ์ฌ์ ์ํ ์ฝ๋๊ฐ ์๋ค.
@Override
public boolean equals(Object obj)
{
if (!(obj instanceof Point)) {
return false;
}
// obj๊ฐ ์ผ๋ฐ Point์ด๋ฉด color๋ฅผ ๋ฌด์ํ๊ณ ๋น๊ตํ๋ค.
if (!(obj instanceof ColorPoint)) {
return obj.equals(this);
}
// obj๊ฐ ColorPoint์ด๋ฉด ์์๊น์ง ๋น๊ตํ๋ค.
return super.equals(obj) && ((ColorPoint) obj).color == color;
}
์ด ๋ฐฉ์์ ์ถ์ด์ฑ ์๋ฐฐ ๋ฟ๋ง ์๋๋ผ Stackoverflow๋ฅผ ์ผ์ผํค๋๋ฐ ๊ทธ ์ด์ ๊ฐ Point์ ๋ ๋ค๋ฅธ ํ์ ํด๋์ค๋ฅผ ๋ง๋ค๊ณ equals๋ฅผ ์์ ๊ฐ์ด ์ฌ์ ์ ํ๋ค๋ฉด ๋ฌดํ ์ฌ๊ท์ ๋น ์ง๋ค.
public class SmellPoint extends Point
{
private String smell;
public SmellPoint(int x, int y, String smell)
{
super(x, y);
this.smell = smell;
}
@Override
public boolean equals(Object obj)
{
if (!(obj instanceof Point)) {
return false;
}
if (!(obj instanceof SmellPoint)) {
return obj.equals(this);
}
return super.equals(obj) && ((SmellPoint) obj).smell == smell;
}
}
Point์ ํ์ ํด๋์ค๋ก SmellPoint๋ฅผ ์ ์ํ๊ณ ,equals๋ฅผ ์์ ColorPoint์ ๊ฐ์ด ๊ตฌํํ๋ค.
public static void main(String[] args)
{
SmellPoint smellPoint = new SmellPoint(0, 1, "sweat");
ColorPoint colorPoint = new ColorPoint(0, 1, Color.RED);
smellPoint.equals(colorPoint); // stackoverflowError ๋ฐ์
}
๊ทธ๋ฆฌ๊ณ ์ด ๋์ equals๋ก ๋น๊ตํ๋ฉด ์ด๋ StackOverflowError๊ฐ ๋ฐ์ํ๋ค.
smellPoint์์ equals๋ฅผ ํธ์ถํ๊ณ , ๊ทธ๋ผ ์ด colorPoint๋ equals๋ฅผ ํธ์ถํ๊ณ ...
๋ฌดํ ์ฌ๊ท์ ๋น ์ ธ
์ด๋ฐ ์๋ฌ๋ฅผ ๋ณด๊ฒ ๋ ๊ฒ์ด๋ค.
๋จผ์ StackOverflowErorr๋ฅผ ๋ณด๊ธฐ ์ ์ ์คํ stack๊ณผ ํ heap ์ด ๋ญ์ง๋ถํฐ ์์์ผ ํ๋ค.
[JAVA] 11. ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ2. return๋ฌธ, JVM ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ (tistory.com)
์คํ stack
- ๋ฉ์๋์ ์์ ์ ํ์ํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ๊ณต
- ์ง์ญ ๋ณ์, ๋งค๊ฐ๋ณ์, ์ฐ์ฐ์ ํ์ํ ์ค๊ฐ ๊ฒฐ๊ณผ ๋ฑ์ ์ ์ฅํ๋๋ฐ ์ฌ์ฉ
- ํด๋น ๊ฐ์ฒด๊ฐ ์ ์๋ ๋ธ๋ก์ ๋ฒ์ด๋ ๋ ์๋ฉธ
- ํจ์์ ํธ์ถํ๋ ์์น๋ ์ ์ฅ
ํ heap
- ์ธ์คํด์ค๊ฐ ์์ฑ๋๋ ๊ณต๊ฐ
- ์คํ๋ณด๋ค ํฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น๋ฐ๊ธฐ ์ํด ์ฌ์ฉ
- ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น (new)
๋ฉ์๋ ํธ์ถ์, ์คํ์ ์คํ ํ๋ ์์ด ์์ด๊ฒ ๋๊ณ , ์คํ ํ๋ ์์๋ ๋ฉ์๋์ ์ ๋ฌํ๋ ๋งค๊ฐ๋ณ์, ๋ฉ์๋ ์คํ ๋๋ด๊ณ ๋์๊ฐ ๊ณณ, ํ์ ๋ค์ด์๋ ๊ฐ์ฒด์ ๋ํ ๋ ํผ๋ฐ์ค ๋ฑ์ ์ ๋ณด๊ฐ ๋ค์ด์๋ค.
๊ทธ๋ฐ๋ฐ ์ฌ๊ธฐ์ ๋์ด์ ์คํ ํ๋ ์์ ์์ ์ ์์ ๋ ๋ฐ์ํ๋ ์๋ฌ๊ฐ StackOverflowError์ด๋ค.