๐ฏ ์์ดํ
24. ๋งด๋ฒ ํด๋์ค๋ ๋๋๋ก static์ผ๋ก ๋ง๋ค๋ผ.
- ์์ ) ๋น๋ ํจํด
public class Member {
private long mbrSn;
private String mbrId;
private String mbrPw;
private String mbrNm;
public Member(Builder builder) {
this.mbrSn = builder.mbrSn;
this.mbrId = builder.mbrId;
this.mbrPw = builder.mbrPw;
this.mbrNm = builder.mbrNm;
}
public static Builder builder(String id, String pw) {
return new Builder(id, pw);
}
public static class Builder {
public long mbrSn;
public String mbrId;
public String mbrPw;
public String mbrNm;
private Builder(String mbrId, String mbrPw) {
this.mbrId = mbrId;
this.mbrPw = mbrPw;
}
public Builder with(Consumer<Builder> consumer) {
consumer.accept(this);
return this;
}
public Member build() {
return new Member(this);
}
}
/* getter ์๋ต */
...
}
์ ์ ๋งด๋ฒ ํด๋์ค(
Builder
)๋ ๋ค๋ฅธ ํด๋์ค ์์ ์ ์ธ๋๊ณ , ๋ฐ๊นฅ ํด๋์ค(Member
)์ private ๋งด๋ฒ์๋ ์ ๊ทผํ ์ ์๋ค๋ ์ ๋ง ์ ์ธํ๊ณ ๋ ์ผ๋ฐ ํด๋์ค์ ๋๊ฐ๋ค. ์ ์ ๋งด๋ฒ ํด๋์ค์ ๋น์ ์ ๋งด๋ฒ ํด๋์ค์ ๊ตฌ๋ฌธ์ ์ฐจ์ด๋ ๋จ์ง static์ด ๋ถ์ด ์๊ณ ์๊ณ ๋ฟ์ด์ง๋ง, ์๋ฏธ์ ์ฐจ์ด๋ ์์ธ๋ก ๊ฝค ํฌ๋ค. ๋น์ ์ ๋งด๋ฒ ํด๋์ค์ ์ธ์คํด์ค๋ ๋ฐ๊นฅ ํด๋์ค์ ์ธ์คํด์ค์ ์๋ฌต์ ์ผ๋ก ์ฐ๊ฒฐ๋๋ค. ๊ทธ๋์ ๋น์ ์ ๋งด๋ฒ ํด๋์ค์ ์ธ์คํด์ค ๋ฉ์๋์์ ์ ๊ทํ๋ this๋ฅผ ์ฌ์ฉํด ๋ฐ๊นฅ ์ธ์คํด์ค์ ๋ฉ์๋๋ฅผ ํธ์ถํ๊ฑฐ๋ ๋ฐ๊นฅ ์ธ์คํด์ค์ ์ฐธ์กฐ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค.
โญ ๊ทธ๋ ๋ค๋ฉด ๋น์ ์ ๋งด๋ฒ ํด๋์ค๋ ์ด๋์ ์ฐ์ด๋? - ๋น์ ์ ๋งด๋ฒ ํด๋์ค๋ ์ด๋ํฐ๋ฅผ ์ ์ํ ๋ ์์ฃผ ์ฐ์ธ๋ค.
์ฆ, ์ด๋ค ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ๊ฐ์ธ ๋ง์น ๋ค๋ฅธ ํด๋์ค์ ์ธ์คํด์ค์ฒ๋ผ ๋ณด์ด๊ฒํ๋ ๋ทฐ๋ก ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
- ๋น์ ์ ๋งด๋ฒ ํด๋์ค์ ํํ ์ฐ์ - ์์ ์ ๋ฐ๋ณต์ ๊ตฌํ
public class MySet<E> extends AbstractSet<E> {
... // ์๋ต
@Override
public Iterator<E> iterator() {
return new MyIterator();
}
private class MyIterator implements Iterator<E> { ... }
}
๋งด๋ฒ ํด๋์ค์์ ๋ฐ๊นฅ ์ธ์คํด์ค์ ์ ๊ทผํ ์ผ์ด ์๋ค๋ฉด ๋ฌด์กฐ๊ฑด static์ ๋ถ์ฌ์ ์ ์ ๋งด๋ฒ ํด๋์ค๋ก ๋ง๋ค์.
static์ ์๋ตํ๋ฉด ๋ฐ๊นฅ ์ธ์คํด์ค๋ก์ ์จ์ ์ธ๋ถ ์ฐธ์กฐ๋ฅผ ๊ฐ๊ฒ ๋๋ค. ์ด ์ฐธ์กฐ๋ฅผ ์ ์ฅํ๋ ค๋ฉด ์๊ฐ๊ณผ ๊ณต๊ฐ์ด ์๋น๋๋ค.
๋ ์ฌ๊ฐํ ๋ฌธ์ ๋ ๊ฐ๋น์ง ์ปฌ๋ ์
์ด ๋ฐ๊นฅ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์๊ฑฐํ๋ ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ์๊ธธ ์ ์๋ค๋ ์ ์ด๋ค.
โญ ํต์ฌ ์ ๋ฆฌ
์ค์ฒฉ ํด๋์ค์๋ ๋ค ๊ฐ์ง๊ฐ ์์ผ๋ฉฐ, ๊ฐ๊ฐ์ ์ฐ์์ด ๋ค๋ฅด๋ค. ๋ฉ์๋ ๋ฐ์์๋ ์ฌ์ฉํด์ผ ํ๊ฑฐ๋ ๋ฉ์๋ ์์ ์ ์ํ๊ธฐ์ ๋๋ฌด ๊ธธ๋ค๋ฉด ๋งด๋ฒ ํด๋์ค๋ก ๋ง๋ ๋ค. ๋งด๋ฒ ํด๋์ค์ ์ธ์คํด์ค ๊ฐ๊ฐ์ด ๋ฐ๊นฅ ์ธ์คํด์ค๋ฅผ ์ฐธ์กฐํ๋ค๋ฉด ๋น์ ์ ์ผ๋ก, ๊ทธ๋ ์ง ์์ผ๋ฉด ์ ์ ์ผ๋ก ๋ง๋ค์. ์ค์ฒฉ ํด๋์ค๊ฐ ํ ๋ฉ์๋ ์์์๋ง ์ฐ์ด๋ฉด์ ๊ทธ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ์ง์ ์ด ๋จ ํ ๊ณณ์ด๊ณ ํด๋น ํ์ ์ผ๋ก ์ฐ๊ธฐ์ ์ ํฉํ ํด๋์ค๋ ์ธํฐํ์ด์ค๊ฐ ์ด๋ฏธ ์๋ค๋ฉด ์ต๋ช ํด๋์ค๋ก ๋ง๋ค๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด ์ง์ญ ํด๋์ค๋ก ๋ง๋ค์.
์ฐธ๊ณ ์๋ฃ
Joshua Bloch, ใEffective Java 3/Eใ, ๊ฐ์๋งต์ ์ฎ๊น, ํ๋ก๊ทธ๋๋ฐ์ธ์ฌ์ดํธ(2018)
http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9788966262281&orderClick=LEa&Kc=