๐ฏ ์์ดํ 50. ์ ์์ ๋ฐฉ์ด์ ๋ณต์ฌ๋ณธ์ ๋ง๋ค๋ผ.
ํด๋ผ์ด์ธํธ๊ฐ ์ฌ๋ฌ๋ถ์ ๋ถ๋ณ์์ ๊นจ๋จ๋ฆฌ๋ ค ํ์์ด ๋์ด ์๋ค๊ณ ๊ฐ์ ํ๊ณ ๋ฐฉ์ด์ ์ผ๋ก ํ๋ก๊ทธ๋๋ฐํด์ผ ํ๋ค.
* ๊ธฐ๊ฐ์ ํํํ๋ ํด๋์ค - ๋ถ๋ณ์์ ์งํค์ง ๋ชปํ๋ค.
public final class Period {
private final Date start;
private final Date end;
/**
* @param start ์์ ์๊ฐ
* @param end ์ข
๋ฃ ์๊ฐ. ์์ ์๊ฐ๋ณด๋ค ๋ค์ฌ์ผ ํ๋ค.
* @throws IllegalArgumentException ์์ ์๊ฐ์ด ์ข
๋ฃ ์๊ฐ๋ณด๋ค ๋ฆ์ ๋ ๋ฐ์ํ๋ค.
* @throws NullPointerException start๋ end๊ฐ null์ด๋ฉด ๋ฐ์ํ๋ค.
*/
public Period(Date start, Date end) {
if (start.compareTo(end) > 0)
throw new IllegalArgumentException(
start + "๊ฐ " + end + "๋ณด๋ค ๋ฆ๋ค.");
this.start = start;
this.end = end;
}
public Date start() {
return start;
}
public Date end() {
return end;
}
public String toString() {
return start + " - " + end;
}
}
์ผํ ์ด ํด๋์ค๋ ๋ถ๋ณ์ฒ๋ผ ๋ณด์ด๊ณ , ์์ ์๊ฐ์ด ์ข
๋ฃ ์๊ฐ๋ณด๋ค ๋ฆ์ ์ ์๋ค๋ ๋ถ๋ณ์์ด ๋ฌด๋ฆฌ ์์ด ์ง์ผ์ง ๊ฒ ๊ฐ๋ค.
ํ์ง๋ง Date๊ฐ ๊ฐ๋ณ์ด๋ผ๋ ์ฌ์ค์ ์ด์ฉํ๋ฉด ์ด๋ ต์ง ์๊ฒ ๊ทธ ๋ถ๋ณ์์ ๊นจ๋จ๋ฆด ์ ์๋ค.
- Period ์ธ์คํด์ค์ ๋ด๋ถ๋ฅผ ๊ณต๊ฒฉํด๋ณด์.
Date start = new Date();
Date end = new Date();
Period p = new Period(start,end);
end.setYear(78); // p์ ๋ด๋ถ๋ฅผ ์์ ํ๋ค.
Date๋ ๋ก์ API์ด๋ ์๋ก์ด ์ฝ๋๋ฅผ ์์ฑํ ๋๋ ๋ ์ด์ ์ฌ์ฉํ๋ฉด ์๋๋ค.
์ธ๋ถ ๊ณต๊ฒฉ์ผ๋ก๋ถํฐ Period ์ธ์คํด์ค์ ๋ด๋ถ๋ฅผ ๋ณดํธํ๋ ค๋ฉด ์์ฑ์์์ ๋ฐ์ ๊ฐ๋ณ ๋งค๊ฐ๋ณ์ ๊ฐ๊ฐ์ ๋ฐฉ์ด์ ์ผ๋ก ๋ณต์ฌํด์ผํ๋ค.
- ์์ ํ ์์ฑ์ - ๋งค๊ฐ๋ณ์์ ๋ฐฉ์ด์ ๋ณต์ฌ๋ณธ์ ๋ง๋ ๋ค.
public Period(Date start, Date end) {
this.start = new Date(start.getTime());
this.end = new Date(end.getTime());
if (this.start.compareTo(this.end) > 0)
throw new IllegalArgumentException(
this.start + "๊ฐ " + this.end + "๋ณด๋ค ๋ฆ๋ค.");
}
๋งค๊ฐ๋ณ์์ ์ ํจ์ฑ์ ๊ฒ์ฌํ๊ธฐ ์ ์ ๋ฐฉ์ด์ ๋ณต์ฌ๋ณธ์ ๋ง๋ค๊ณ , ์ด ๋ณธ์ฌ๋ณธ์ผ๋ก ์ ํจ์ฑ์ ๊ฒ์ฌํ ์ ์ ์ฃผ๋ชฉํ์.
์์ฑ์๋ฅผ ์์ ํ๋ฉด ์์์ ๊ณต๊ฒฉ์ ๋ง์๋ผ ์ ์์ง๋ง, Period ์ธ์คํด์ค๋ ์์ง๋ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ๋ค.
์ ๊ทผ์ ๋ฉ์๋๊ฐ ๋ด๋ถ์ ๊ฐ๋ณ ์ ๋ณด๋ฅผ ์ง์ ๋๋ฌ๋ด๊ธฐ ๋๋ฌธ์ด๋ค.
- ์์ ํ ์ ๊ทผ์ - ํ๋์ ๋ฐฉ์ด์ ๋ณต์ฌ๋ณธ์ ๋ฐํํ๋ค.
public Date start() {
return new Date(start.getTime());
}
public Date end() {
return new Date(end.getTime());
}
ํด๋์ค๊ฐ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ๋ฐ๋ ํน์ ํด๋ผ์ด์ธํธ๋ก ๋ฐํํ๋ ๊ตฌ์ฑ์์๊ฐ ๊ฐ๋ณ์ด๋ผ๋ฉด
๊ทธ ์์๋ ๋ฐ๋์ ๋ฐฉ์ด์ ์ผ๋ก ๋ณต์ฌํด์ผํ๋ค.
์ฐธ๊ณ ์๋ฃ
Joshua Bloch, ใEffective Java 3/Eใ, ๊ฐ์๋งต์ ์ฎ๊น, ํ๋ก๊ทธ๋๋ฐ์ธ์ฌ์ดํธ(2018)
http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9788966262281&orderClick=LEa&Kc=