โ๋งค๊ฐ๋ณ์์ ์ ์ฝ๋ค์ ๋ฌธ์ํํ๊ณ ๋ฉ์๋ ์ฝ๋ ์์ ๋ถ๋ถ์์ ๋ช ์์ ์ผ๋ก ๊ฒ์ฌํ์โ
โ ๋งค๊ฐ๋ณ์ ๊ฒ์ฌ์ ์คํจํ๋ฉด ์คํจ ์์์ฑ(failure atomicity)์ ์ด๊ธฐ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ณ์ ์ ์์.
โ public์ด ์๋ ๋ฉ์๋๋ผ๋ฉด ๋จ์ธ๋ฌธ(assert
)์ ์ฌ์ฉํด ๋งค๊ฐ๋ณ์ ์ ํจ์ฑ์ ๊ฒ์ฆํ ์ ์์.
AssertionError
๋ฅผ ๋์ง๋ค.โํด๋์ค๊ฐ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ๋ฐ๋ ํน์ ํด๋ผ์ด์ธํธ๋ก ๋ฐํํ๋ ๊ตฌ์ฑ์์๊ฐ ๊ฐ๋ณ์ด๋ผ๋ฉด
๊ทธ ์์๋ ๋ฐ๋์ ๋ฐฉ์ด์ ์ผ๋ก ๋ณต์ฌํด์ผ ํ๋คโ
// ๊ธฐ๊ฐ์ ํํํ๋ ํด๋์ค - ๋ถ๋ณ์์ ์งํค์ง ๋ชปํ๋ค.
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์ด๋ ์๋ก์ด ์ฝ๋๋ฅผ ์์ฑํ ๋๋ ๋ ์ด์ ์ฌ์ฉํ๋ฉด ์ ๋จLocalDateTime
์ด๋ ZonedDateTime
ํน์ Instant
๋ฅผ ์ฌ์ฉํ์Period
๋ฅผ ๋ถ๋ณ์ผ๋ก ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ผ๊น?โ ์์ฑ์์์ ๋ฐ์ ๊ฐ๋ณ ๋งค๊ฐ๋ณ์๋ฅผ ๊ฐ๊ฐ ๋ฐฉ์ด์ ์ผ๋ก ๋ณต์ฌ(defensive copy)ํ์
// ์์ ํ ์์ฑ์ - ๋งค๊ฐ๋ณ์์ ๋ฐฉ์ด์ ๋ณต์ฌ๋ณธ์ ๋ง๋ ๋ค.
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
ํด๋์ค๋ ์ทจ์ฝํ๋ค. ์ ๊ทผ์๊ฐ ๋ด๋ถ์ ๊ฐ๋ณ ์ ๋ณด๋ฅผ ์ง์ ๋๋ฌ๋ด๊ณ ์์. ์๋์ ๊ฐ์ ๊ณต๊ฒฉ์ด ๊ฐ๋ฅํจDate start = new Date();
Date end = new Date();
Period p = new Period(start, end);
p.end().setYear(78); // p์ ๋ด๋ถ๋ฅผ ์ฝ๊ฒ ๋ณ๊ฒฝ
// ์์ ํ ์ ๊ทผ์ - ํ๋์ ๋ฐฉ์ด์ ๋ณต์ฌ๋ณธ์ ๋ฐํํ๋ค.
public Date start() {
return new Date(start.getTime());
}
public Date end() {
return new Date(end.getTime()) ;
}
โ ์ด์ Period
์์ ๋ง๊ณ ๋ ๊ฐ๋ณ ํ๋์ ์ ๊ทผํ ๋ฐฉ๋ฒ์ด ์๋ค. (๋ชจ๋ ํ๋๊ฐ ๊ฐ์ฒด ์์ ์๋ฒฝํ ์บก์ํ)
โ ํ์ ํ ์ ์๋ค๋ฉด ๋ฐฉ์ด์ ๋ณต์ฌ๋ณธ์ ์ ์ฅํ์
โ ์ด๋ฐ ๊ฒฝ์ฐ์ ๋ฐฉ์ด์ ๋ณต์ฌ๋ฅผ ์ํํ๋ ๋์ ํด๋น ๊ตฌ์ฑ์์๋ฅผ ์์ ํ์ ๋์ ์ฑ ์์ด ํด๋ผ์ด์ธํธ์ ์์์ ๋ฌธ์์ ๋ช ์ํ์.
โAPI ์ค๊ณ ์๋ นโ
โ ํ์ ์ด ์์ง ์์ผ๋ฉด ๋ง๋ค์ง ๋ง์
boolean
์ ๋ฐ์์ผ ์๋ฏธ๊ฐ ๋ ๋ช
ํํ ๊ฒฝ์ฐ๋ ์์ธ์.Thermometer.newInstance(true)
๋ณด๋ค๋ Thermometer.newInstance(TemperatureScale.CELSIUS)
๊ฐ ํ๋ ์ผ์ ํจ์ฌ ๋ช
ํํ ์๋ ค์ค.โํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ๋ค์ค์ ์๋ฅผ ํ์ฉํ๋ค๊ณ ํด์ ๋ค์ค์ ์๋ฅผ ๊ผญ ํ์ฉํ๋ผ๋ ๋ป์ ์๋๋คโ
// ์ปฌ๋ ์
๋ถ๋ฅ๊ธฐ - ์ค๋ฅ! ์ด ํ๋ก๊ทธ๋จ์ ๋ฌด์์ ์ถ๋ ฅํ ๊น?
public class CollectionClassifier {
public static String classify(Set<?> s) {
return "์งํฉ";
}
public static String classify(List<?> lst) {
return "๋ฆฌ์คํธ";
}
public static String classify(Collection<?> c) {
return "๊ทธ ์ธ";
}
public static void main(String[] args) {
Collection<?>[] collections = {
new HashSet<String>(),
new ArrayList<BigInteger>(),
new HashMap<String, String>().values()
};
for (Collection<?> c : collections)
System.out.println(classify(c));
}
}
main
๋ฉ์๋์์ for
๋ฌธ ์์ c
๋ ํญ์ Collection<?>
ํ์
์ด๋ฏ๋ก ํญ์ ์ธ ๋ฒ์งธ classify(Collection<?> c)
๊ฐ ํธ์ถ๋ ๊ฒ.classify
๋ฉ์๋๋ฅผ ํ๋๋ก ํฉ์น ํ instanceof
๋ก ๊ฒ์ฌํ๋ฉด ๋จpublic static String classify(Collection<?> c) {
return c instanceof Set ? "์งํฉ" :
c instanceof List ? "๋ฆฌ์คํธ" : "๊ทธ ์ธ";
}
โ๋ฉ์๋ ์ ์ ์ ํ์ ๋งค๊ฐ๋ณ์๋ ๊ฐ๋ณ์ธ์ ์์ ๋๊ณ , ๊ฐ๋ณ์ธ์๋ฅผ ์ฌ์ฉํ ๋๋ ์ฑ๋ฅ ๋ฌธ์ ๊น์ง ๊ณ ๋ คํ์โ
// ๊ฐ๋จํ ๊ฐ๋ณ์ธ์ ํ์ฉ ์
static int sum(int... args) {
int sum = 0;
for (int arg : args)
sum += arg;
return sum;
}
int
์ธ์๋ค์ ํฉ์ ๊ณ์ฐํด์ฃผ๋ ๊ฐ๋ณ์ธ์ ๋ฉ์๋์.(์ธ์๊ฐ 0๊ฐ์ฌ๋ ๋จ)// ์ธ์๊ฐ 1๊ฐ ์ด์์ด์ด์ผ ํ๋ ๊ฐ๋ณ์ธ์ ๋ฉ์๋ - ์๋ชป ๊ตฌํํ ์!
static int min(int... args) {
if (args.length == 0)
throw new IllegalArgumentException("์ธ์๊ฐ 1๊ฐ ์ด์ ํ์ํฉ๋๋ค.");
int min = args[0];
for (int i = 1; i < args.length; i++)
if (args[i] < min)
min = args[i];
return min;
}
args
์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ๋ช
์์ ์ผ๋ก ํด์ผํจ.// ์ธ์๊ฐ 1๊ฐ ์ด์์ด์ด์ผ ํ ๋ ๊ฐ๋ณ์ธ์๋ฅผ ์ ๋๋ก ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
static int min(int firstArg, int... remainingArgs) {
int min = firstArg;
for (int arg : remainingArgs)
if (arg < min)
min = arg;
return min;
}
โ ์๋์ ๊ฐ์ด ์ธ์๊ฐ 0๊ฐ์ธ ๊ฒ๋ถํฐ 4๊ฐ์ธ ๊ฒ๊น์ง, 5๊ฐ๋ฅผ ๋ค์ค์ ์
public void foo() {}
public void foo(int a1) {}
public void foo(int a1,int a2) {}
public void foo(int a1, int a2, int a3) {}
public void foo(int a1, int a2, int a3, int... rest) {}
โ ๋ฉ์๋ ํธ์ถ ์ค ๋จ 5%๋ง์ด ๋ฐฐ์ด์ ์์ฑํ๊ฒ ๋จ
โ
null
์ ๋ฐํํ๋ API๋ ์ฌ์ฉํ๊ธฐ ์ด๋ ต๊ณ ์ค๋ฅ์ฒ๋ฆฌ ์ฝ๋๋ ๋์ด๋๋คโ
// ์ฌ๊ณ ๊ฐ ํ๋๋ ์์ ๋ null์ ๋ฐํํ๋ ์
public List<Cheese> getCheeses() {
return cheesesInStock.isEmpty() ? null
: new ArrayList<>(cheesesInStock);
}
null
์ ๋ฐํํ๋ค๋ฉด, ํด๋ผ์ด์ธํธ๋ ์ด null
์ํฉ์ ์ฒ๋ฆฌํ๋ ์ฝ๋๋ฅผ ์๋์ฒ๋ผ ์ถ๊ฐ๋ก ์์ฑํด์ผ ํจList<Cheese> cheeses = shop.getCheeses();
if(cheeses != null && cheeses.contains(Cheese.STILTON))
System.out.println("์ข์์ด, ๋ฐ๋ก ๊ทธ๊ฑฐ์ผ.");
cheeses != null
์ฒ๋ผ ๋ฐฉ์ด์ฝ๋๋ฅผ ํญ์ ์์ฑํด์ค์ผ ํจ.// ๋น ์ปฌ๋ ์
์ ๋ฐํํ๋ ์ฌ๋ฐ๋ฅธ ์
public List<Cheese> getCheeses() {
return new ArrayList<>(cheesesInStock);
}
Collections.emptyList
, Collections.emptySet
๊ณผ ๊ฐ์ ๋น ๋ถ๋ณ ์ปฌ๋ ์
์ ๋ฐํํ๋ฉด ๋จCollections.emptyList
์ฌ์ฉ ์์// ์ต์ ํ - ๋น ์ปฌ๋ ์
์ ๋งค๋ฒ ์๋ก ํ ๋นํ์ง ์๋๋ก ํจ.
public List<Cheese> getCheeses() {
return cheesesInStock.isEmpty() ? Collections.emptyList()
: new ArrayList<>(cheesesInStock);
}
โ ์ ๋ null์ ๋ฐํํ์ง ๋ง๊ณ ๊ธธ์ด๊ฐ 0์ธ ๋ฐฐ์ด์ ๋ฐํํ๋ผ
// ๊ธธ์ด๊ฐ 0์ผ ์๋ ์๋ ๋ฐฐ์ด์ ๋ฐํํ๋ ์ฌ๋ฐ๋ฅธ ๋ฐฉ๋ฒ
public Cheese[] getCheeses() {
return cheesesInStock.toArray(new Cheeses[0]);
}
โ์ต์ ๋ ๋ฐํ์๋ ์ฑ๋ฅ ์ ํ๊ฐ ๋ค๋ฐ๋ฅด๋, ์ฑ๋ฅ์ด ๋ฏผ๊ฐํ ๋ฉ์๋๋ผ๋ฉด
null
์ ๋ฐํํ๊ฑฐ๋ ์์ธ๋ฅผ ๋์ง๋ ํธ์ด ๋์ ์ ์๋คโ
Optional<T>
๋ null์ด ์๋ T ํ์
์ฐธ์กฐ๋ฅผ ํ๋ ๋ด๊ฑฐ๋, ํน์ ์๋ฌด๊ฒ๋ ๋ด์ง ์์ ์ ์์// ์ปฌ๋ ์
์์ ์ต๋๊ฐ์ ๊ตฌํด Optional<E>๋ก ๋ฐํํ๋ค.
public static <E extends Comparable<E>>
Optional<E> max(Collection<E> c) {
if (c.isEmpty())
return Optional.empty();
E result = null;
for (E e : c)
if (result == null || e.compareTo(result) > 0)
result = Objects.requireNonNull(e);
return Optional.of(result);
}
Optional.empty()
: ๋น ์ต์
๋ ์์ฑOptional.of(value)
: ๊ฐ์ด ๋ ์ต์
๋ ์์ฑvalue
ํ๋ผ๋ฏธํฐ์ null
์ ๋๊ธฐ๋ฉด NullPointerException
์ ๋์ง๋ ์ฃผ์ํ์Optional.ofNullable(value)
: null
๊ฐ๋ ํ์ฉํ๋ ์ต์
๋ ์์ฑโ ์์ ๋ฉ์๋๋ฅผ ์๋ ์ฝ๋์ฒ๋ผ ๋ฆฌํฉํฐ๋งํ ์ ์์.
// ์ปฌ๋ ์
์์ ์ต๋๊ฐ์ ๊ตฌํด Optional<E>๋ก ๋ฐํํ๋ค. - ์คํธ๋ฆผ ๋ฒ์
public static <E extends Comparable<E>>
Optional<E> max(Collection<E> c) {
return c.stream().max(Comparator.naturalOrder());
}
// ๊ธฐ๋ณธ ๊ฐ์ ์ ํด๋ ์ ์์
String lastWordInLexicon = max(words).orElse("๋จ์ด ์์...");
Toy myToy = max(toys).orElseThrow(TemperTantrumException::new)
Element lastNobleFas = max(Elements.NOBLE_GASES).get();
isPresent()
: ์ต์
๋์ด ์ฑ์์ ธ ์์ผ๋ฉด true
, ๋น์ด ์์ผ๋ฉด false
๋ฅผ ๋ฐํT
๋์ Optional<T>
๋ก ์ ์ธํด์ผ ํ ๊น?โ ๊ธฐ๋ณธ ๊ท์น : ๊ฒฐ๊ณผ๊ฐ ์์ ์ ์์ผ๋ฉฐ, ํด๋ผ์ด์ธํธ๊ฐ ์ด ์ํฉ์ ํน๋ณํ๊ฒ ์ฒ๋ฆฌํด์ผ ํ๋ค๋ฉด Optional<T>
๋ฅผ ๋ฐํ
Optional<List<T>>
๋ฅผ ๋ฐํํ์ง ๋ง๊ณ List<T>
๋ฅผ ๋ฐํํ์int
, long
, double
์ ์ฉ ์ต์
๋ ํด๋์ค๋ค์ด ์์OptionalInt
, OptionalLong
, OptionalDouble
Optional
๋ ์์ฐํ ์๋ก ํ ๋นํ๊ณ ์ด๊ธฐํํด์ผ ํ๋ ๊ฐ์ฒด์ด๊ณ , ๊ทธ ์์์ ๊ฐ์ ๊บผ๋ด๋ ค๋ฉด ๋ฉ์๋๋ฅผ ํธ์ถํด์ผ ํจ.null
์ ๋ฐํํ๊ฑฐ๋ ์์ธ๋ฅผ ๋์ง๋ ํธ์ด ๋์ ์ ์์โ๋ฌธ์ํ ์ฃผ์์ API๋ฅผ ๋ฌธ์ํํ๋ ๊ฐ์ฅ ํ๋ฅญํ๊ณ ํจ๊ณผ์ ์ธ ๋ฐฉ๋ฒโ
@throw
ํ๊ทธ๋ก ๋น๊ฒ์ฌ ์์ธ๋ฅผ ์ ์ธํ์ฌ ์์์ ์ผ๋ก ๊ธฐ์ ํจ@param
ํ๊ทธ๋ฅผ ์ด์ฉํด ๊ทธ ์กฐ๊ฑด์ ์ํฅ๋ฐ๋ ๋งค๊ฐ๋ณ์์ ๊ธฐ์ ํ ์๋ ์์@param
ํ๊ทธ๋ฅผ, ๋ฐํ ํ์
์ด void
๊ฐ ์๋๋ผ๋ฉด @return
ํ๊ทธ๋ฅผ, ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์๋ (๊ฒ์ฌ๋ ๋น๊ฒ์ฌ๋ ) ๋ชจ๋ ์์ธ์ @thorw
ํ๊ทธ๋ฅผ ๋ฌ์์ผ ํ๋ค.@param
ํ๊ทธ์ @return
ํ๊ทธ์ ์ค๋ช
์ ํด๋น ๋งค๊ฐ๋ณ์๊ฐ ๋ปํ๋ ๊ฐ์ด๋ ๋ฐํ๊ฐ์ ์ค๋ช
ํ๋ ๋ช
์ฌ๊ตฌ๋ฅผ ์ฌ์ฉํจ.@param
, @return
, @throws
ํ๊ทธ์ ์ค๋ช
์๋ ๋ง์นจํ๋ฅผ ๋ถ์ด์ง ์์{@code}
ํ๊ทธ<pre>{@code ... ์ฝ๋ ... }</pre>
์ฒ๋ผ ์ฌ์ฉ@implSpec
ํ๊ทธ๋ก ๋ฌธ์ํํ๋ค.<
, >
, &
๋ฑ์ HTML ๋ฉํ๋ฌธ์๋ฅผ ํฌํจ์ํค๋ ค๋ฉด {@literal}
ํ๊ทธ๋ก ๊ฐ์ธ์package-info.java
ํ์ผ์ ์์ฑํ๋ค.{@inheritDoc}
ํ๊ทธ๋ฅผ ์ฌ์ฉํด ์์ ํ์
์ ๋ฌธ์ํ ์ฃผ์ ์ผ๋ถ๋ฅผ ์์ํ ์ ์์.// ๋ฌธ์ํ ์ฃผ์ ์
public class DocExamples<E> {
// ๋ฉ์๋ ์ฃผ์
/**
* Returns the element at the specified position in this list.
*
* <p>This method is <i>not</i> guaranteed to run in constant
* time. In some implementations it may run in time proportional
* to the element position.
*
* @param index index of element to return; must be
* non-negative and less than the size of this list
* @return the element at the specified position in this list
* @throws IndexOutOfBoundsException if the index is out of range
* ({@code index < 0 || index >= this.size()})
*/
E get(int index) {
return null;
}
// ํ๊ธ ๋ฒ์
// /**
// * ์ด ๋ฆฌ์คํธ์์ ์ง์ ํ ์์น์ ์์๋ฅผ ๋ฐํํ๋ค.
// *
// * <p>์ด ๋ฉ์๋๋ ์์ ์๊ฐ์ ์ํ๋จ์ ๋ณด์ฅํ์ง <i>์๋๋ค</i>. ๊ตฌํ์ ๋ฐ๋ผ
// * ์์์ ์์น์ ๋น๋กํด ์๊ฐ์ด ๊ฑธ๋ฆด ์๋ ์๋ค.
// *
// * @param index ๋ฐํํ ์์์ ์ธ๋ฑ์ค; 0 ์ด์์ด๊ณ ๋ฆฌ์คํธ ํฌ๊ธฐ๋ณด๋ค ์์์ผ ํ๋ค.
// * @return ์ด ๋ฆฌ์คํธ์์ ์ง์ ํ ์์น์ ์์
// * @throws IndexOutOfBoundsException index๊ฐ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ฉด,
// * ์ฆ, ({@code index < 0 || index >= this.size()})์ด๋ฉด ๋ฐ์ํ๋ค.
// */
// E get(int index) {
// return null;
// }
// ์๊ธฐ์ฌ์ฉ ํจํด ๋ฑ ๋ด๋ถ ๊ตฌํ ๋ฐฉ์์ ๋ช
ํํ ๋๋ฌ๋ด๊ธฐ ์ํด @implSpec ์ฌ์ฉ (335์ชฝ)
/**
* Returns true if this collection is empty.
*
* @implSpec This implementation returns {@code this.size() == 0}.
*
* @return true if this collection is empty
*/
public boolean isEmpty() {
return false;
}
// ํ๊ธ ๋ฒ์
// /**
// * ์ด ์ปฌ๋ ์
์ด ๋น์๋ค๋ฉด true๋ฅผ ๋ฐํํ๋ค.
// *
// * @implSpec ์ด ๊ตฌํ์ {@code this.size() == 0}์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค.
// *
// * @return ์ด ์ปฌ๋ ์
์ด ๋น์๋ค๋ฉด true, ๊ทธ๋ ์ง ์์ผ๋ฉด false
// */
// public boolean isEmpty() {
// return false;
// }
// ๋ฌธ์ํ ์ฃผ์์ HTML์ด๋ ์๋ฐ๋
๋ฉํ๋ฌธ์๋ฅผ ํฌํจ์ํค๊ธฐ ์ํด @literal ํ๊ทธ ์ฌ์ฉ (336์ชฝ)
/**
* A geometric series converges if {@literal |r| < 1}.
*/
public void fragment() {
}
// ํ๊ธ ๋ฒ์
// /**
// * {@literal |r| < 1}์ด๋ฉด ๊ธฐํ ์์ด์ด ์๋ ดํ๋ค.
// */
// public void fragment() {
// }
// ๋ฌธ์ํ ์ฃผ์ ์ฒซ '๋ฌธ์ฅ'์ ๋ง์นจํ๊ฐ ์์ ๋ ์์ฝ ์ค๋ช
์ฒ๋ฆฌ (337์ชฝ)
/**
* A suspect, such as Colonel Mustard or {@literal Mrs. Peacock}.
*/
public enum Suspect {
MISS_SCARLETT, PROFESSOR_PLUM, MRS_PEACOCK, MR_GREEN, COLONEL_MUSTARD, MRS_WHITE
}
// ํ๊ธ ๋ฒ์
// /**
// * ๋จธ์คํ๋ ๋๋ น์ด๋ {@literal Mrs. ํผ์ฝ} ๊ฐ์ ์ฉ์์.
// */
// public enum Suspect {
// MISS_SCARLETT, PROFESSOR_PLUM, MRS_PEACOCK, MR_GREEN, COLONEL_MUSTARD, MRS_WHITE
// }
// ์๋ฐ๋
๋ฌธ์์ ์์ธ ์ถ๊ฐํ๊ธฐ - ์๋ฐ 9๋ถํฐ ์ง์
/**
* This method complies with the {@index IEEE 754} standard.
*/
public void fragment2() {
}
// ํ๊ธ ๋ฒ์
// /**
// * ์ด ๋ฉ์๋๋ {@index IEEE 754} ํ์ค์ ์ค์ํ๋ค.
// */
// public void fragment2() {
// }
// ์ด๊ฑฐ ์์ ๋ฌธ์ํ
/**
* An instrument section of a symphony orchestra.
*/
public enum OrchestraSection {
/** Woodwinds, such as flute, clarinet, and oboe. */
WOODWIND,
/** Brass instruments, such as french horn and trumpet. */
BRASS,
/** Percussion instruments, such as timpani and cymbals. */
PERCUSSION,
/** Stringed instruments, such as violin and cello. */
STRING;
}
// ํ๊ธ ๋ฒ์
// /**
// * ์ฌํฌ๋ ์ค์ผ์คํธ๋ผ์ ์
๊ธฐ ์ธ์
.
// */
// public enum OrchestraSection {
// /** ํ๋ฃจํธ, ํด๋ผ๋ฆฌ๋ท, ์ค๋ณด ๊ฐ์ ๋ชฉ๊ด์
๊ธฐ. */
// WOODWIND,
//
// /** ํ๋ ์น ํธ๋ฅธ, ํธ๋ผํซ ๊ฐ์ ๊ธ๊ด์
๊ธฐ. */
// BRASS,
//
// /** ํํ๋, ์ฌ๋ฒ์ฆ ๊ฐ์ ํ์
๊ธฐ. */
// PERCUSSION,
//
// /** ๋ฐ์ด์ฌ๋ฆฐ, ์ฒผ๋ก ๊ฐ์ ํ์
๊ธฐ. */
// STRING;
// }
// ์ ๋ํ
์ด์
ํ์
๋ฌธ์ํ
/**
* Indicates that the annotated method is a test method that
* must throw the designated exception to pass.
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface ExceptionTest {
/**
* The exception that the annotated test method must throw
* in order to pass. (The test is permitted to throw any
* subtype of the type described by this class object.)
*/
Class<? extends Throwable> value();
}
// ํ๊ธ ๋ฒ์
// /**
// * ์ด ์ ๋ํ
์ด์
์ด ๋ฌ๋ฆฐ ๋ฉ์๋๋ ๋ช
์ํ ์์ธ๋ฅผ ๋์ ธ์ผ๋ง ์ฑ๊ณตํ๋
// * ํ
์คํธ ๋ฉ์๋์์ ๋ํ๋ธ๋ค.
// */
// @Retention(RetentionPolicy.RUNTIME)
// @Target(ElementType.METHOD)
// public @interface ExceptionTest {
// /**
// * ์ด ์ ๋ํ
์ด์
์ ๋จ ํ
์คํธ ๋ฉ์๋๊ฐ ์ฑ๊ณตํ๋ ค๋ฉด ๋์ ธ์ผ ํ๋ ์์ธ.
// * (์ด ํด๋์ค์ ํ์ ํ์
์์ธ๋ ๋ชจ๋ ํ์ฉ๋๋ค.)
// */
// Class<? extends Throwable> value();
// }
}
๋๋ฌด ์ ์ตํด์ ^^