βμ μ ν©ν°λ¦¬λ₯Ό μ¬μ©νλ κ² μ 리ν κ²½μ°κ° λ λ§μΌλ―λ‘,
무μμ public μμ±μλ₯Ό μ 곡νλ μ΅κ΄μ΄ μλ€λ©΄ κ³ μΉμβ
Boolean.valueOf
λ©μλpublic static Boolean valueOf(boolean b) {
return b ? Boolean.TRUE : Boolean.FALSE;
}
a) μ΄λ¦μ κ°μ§ μ μλ€.
BigInteger(int, int, Random)
κ³Ό μ μ ν©ν°λ¦¬ λ©μλ BigInteger.probablePrime
μ€ μ΄λ μͺ½μ΄ βκ°μ΄ μμμΈ BigInteger
λ₯Ό λ°ννλ€βλ μλ―Έλ₯Ό λ μ μ€λͺ
ν κ² κ°μκ°?b) νΈμΆλ λλ§λ€ μΈμ€ν΄μ€λ₯Ό μλ‘ μμ±νμ§λ μμλ λλ€.
Boolean.valueOf(boolean)
λ©μλλ κ°μ²΄λ₯Ό μμ μμ±νμ§ μμc) λ°ν νμ μ νμ νμ κ°μ²΄λ₯Ό λ°νν μ μλ λ₯λ ₯μ΄ μλ€.
java.util.Collections
μμ μ μ ν©ν°λ¦¬ λ©μλλ₯Ό ν΅ν΄ μ»μd) μ λ ₯ 맀κ°λ³μμ λ°λΌ λ§€λ² λ€λ₯Έ ν΄λμ€μ κ°μ²΄λ₯Ό λ°νν μ μλ€.
e) μ μ ν©ν°λ¦¬ λ©μλλ₯Ό μμ±νλ μμ μλ λ°νν κ°μ²΄μ ν΄λμ€κ° μ‘΄μ¬νμ§ μμλ λλ€.
a) μμμ νλ €λ©΄ public
μ΄λ protected
μμ±μκ° νμνλ μ μ ν©ν°λ¦¬ λ©μλλ§ μ 곡νλ©΄ νμ ν΄λμ€λ₯Ό λ§λ€ μ μλ€.
b) μ μ ν©ν°λ¦¬ λ©μλλ νλ‘κ·Έλλ¨Έκ° μ°ΎκΈ° μ΄λ ΅λ€.
from, of, valueOf, getType
λ± λ리 μλ €μ§ κ·μ½μ λ°λΌ μ§λ μμΌλ‘ μ΄ λ¨μ μ μνν΄μ€μΌ ν¨βμμ±μλ μ μ ν©ν°λ¦¬κ° μ²λ¦¬ν΄μΌ ν 맀κ°λ³μκ° λ§λ€λ©΄ λΉλ ν¨ν΄μ μ ννμβ
// μ μΈ΅μ μμ±μ ν¨ν΄ : κ° λ§€κ°λ³μκ° λ¬΄μμΈμ§ ν·κ°λ¦Ό
new NutrionFacts(240, 8, 100, 0, 35, 27);
new NutrionFacts(100, 7, 120, 60);
// λΉλ ν¨ν΄ : 맀κ°λ³μκ° λ¬΄μμΈμ§ ννλμ΄ μμ
new NutrionFacts.Builder(240, 8)
.calories(100).sodium(35).carbohydrate(27).build();
// μλ°λΉμ¦ ν¨ν΄
NutrionFacts cocaCola = new NutrionFacts();
cocaCola.setServingSize(240);
cocaCola.setServings(8);
cocaCola.setCalories(100);
cocaCola.setSodium(35);
cocaCola.setCarbohydrate(27);
βμ±κΈν΄μ λ§λλ μΈ κ°μ§ λ°©λ² : public static final νλ λ°©μ, μ μ ν©ν°λ¦¬ λ°©μ, μ΄κ±° νμ λ°©μβ
public class Elvis {
public static final Elvis INSTANCE = new Elvis();
private Elvis() { ... }
public void leaveTheBuilding() { ... }
}
// μ¬μ©ν λ
Elvis.INSTANCE;
public class Elvis {
private static final Elvis INSTANCE = new Elvis();
private Elvis();
public static Elvis getInstance() { return INSTANCE; }
public void leaveTheBuilding() { ... }
}
// μ¬μ©ν λ
Elvis.getInstance();
public enum Elvis {
INSTANCE;
public void leaveTheBuilding() { ... }
}
// μ¬μ©ν λ
Elvis.INSTANCE;
βprivate μμ±μ : μΈμ€ν΄μ€ν λ°©μ§, μμ λ°©μ§β
java.lang.Math
μ²λΌ μ μ λ©μλμ μ μ νλλ§μ λ΄μ ν΄λμ€λ₯Ό λ§λ€κ³ μΆμ λjava.util.Collections
μ²λΌ νΉμ μΈν°νμ΄μ€μ ꡬν체λ₯Ό μμ±ν΄μ£Όλ μ μ ν©ν°λ¦¬λ₯Ό λͺ¨μλκ³ μΆμ λfinal
ν΄λμ€μ κ΄λ ¨ν λ©μλλ€μ λͺ¨μλμ λpublic
μμ±μλ₯Ό λ§λ€μ΄ μ€λ€. (μ¦, μΈμ€ν΄μ€ν κ°λ₯)private
μμ±μλ‘ μμ μν©μ λ°©μ§ν μ μμpublic class UtilityClass {
// κΈ°λ³Έ μμ±μκ° λ§λ€μ΄μ§λ κ²μ λ§λλ€(μΈμ€ν΄μ€ν λ°©μ§μ©).
private UtilityClass() {
throw new AssertionError(); // ν΄λμ€ μμμ μ€μλ‘λΌλ μμ±μ νΈμΆνμ§ μλλ‘ λ°©μ§
}
}
private
μΌλ‘ μ μΈνμΌλ νμ ν΄λμ€κ° μμ ν΄λμ€μ μμ±μμ μ κ·Όν μ μμβμμ‘΄ κ°μ²΄ μ£Όμ μ ν΄λμ€μ μ μ°μ±, μ¬μ¬μ©μ±, ν μ€νΈ μ©μ΄μ±μ κ°μ ν΄μ€λ€.β
public class SpellChecker {
private final Lexicon dictionary;
public SpellChecker(Lexicon dictionary) {
this.dictionary = Objects.requireNonNull(dictionary);
}
public boolean isValid(String word) { ... }
public List<String> suggestions(String typo) { ... }
}
βλΆνμν κ°μ²΄λ₯Ό μμ±νκ² λλ 4κ°μ§ μμβ
String
μΈμ€ν΄μ€λ₯Ό μλ‘ λ§λ λ€.String
μΈμ€ν΄μ€κ° μλ°±λ§ κ° λ§λ€μ΄ μ§ μλ μλ κ²// μ΄λ κ² μ°μ : μ΄ λ°©μμ λκ°μ λ¬Έμμ΄ λ¦¬ν°λ΄μ μ¬μ©νλ λͺ¨λ μ½λκ° κ°μ κ°μ²΄λ₯Ό μ¬μ¬μ©ν¨
String s = "bikini";
Boolean
μΈμ€ν΄μ€λ₯Ό μλ‘ λ§λ λ€.// μ΄λ κ² μ°μ
Boolean.valueOf(String);
String.matches
λ©μλκ° λ§λλ μ κ·ννμμ© Pattern
μΈμ€ν΄μ€λ, ν λ² μ°κ³ λ²λ €μ Έμ 곧λ°λ‘ κ°λΉμ§ 컬λ μ
λμμ΄ λλ€.Pattern
μ μ
λ ₯λ°μ μ κ·ννμμ ν΄λΉνλ μ ν μν λ¨Έμ (finite state machine)μ λ§λ€κΈ° λλ¬Έμ μΈμ€ν΄μ€ μμ± λΉμ©μ΄ λλ€String.matches
λ₯Ό μ¬μ©νλ λμ μμ μ’μ μλ₯Ό μ΄ν΄λ³΄μ// λμ μ : νΈμΆλ λ λ§λ€ matchesκ° μ€ν & λ΄λΆμ μΌλ‘ Pattern μμ±
static boolean isRomanNumeral(String s) {
return s.matches("μ κ·μ");
}
/*
μ’μ μ : Pattern μΈμ€ν΄μ€λ₯Ό ν΄λμ€ μ΄κΈ°ν κ³Όμ μμ μ§μ μμ±ν΄ μΊμ±ν΄λκ³ ,
isRomanNumeral λ©μλκ° νΈμΆλ λ λ§λ€ μ¬μ¬μ©
*/
public class RomanNumerals {
private static final Pattern ROMAN = Pattern.compile("μ κ·μ");
static boolean isRomanNumeral(String s) {
return ROMAN.matcher(s).matches();
}
}
long
)κ³Ό λ°μ±λ κΈ°λ³Έ νμ
(ex. Long
)μ μμ΄ μΈ λ μλμΌλ‘ μνΈ λ³νν΄μ£Όλ κΈ°μ private static long sum() {
Long sum = 0L;
for(long i = 0; i <= Integer.MAX_VALUE; i++)
sum += i; // μ¬κΈ°μ longνμ
(i)μ Longνμ
(sum)μ λνκΈ° μν΄ LongμΈμ€ν΄μ€κ° μμ±λλ€.
return sum;
}
sum
λ³μλ₯Ό long
μ΄ μλ Long
μΌλ‘ μ μΈν΄μ λΆνμν Long
μΈμ€ν΄μ€κ° μ½ 2^31κ°λ λ§λ€μ΄ μ§κ² λλ€.β λ°μ±λ κΈ°λ³Έ νμ
보λ€λ κΈ°λ³Έ νμ
μ μ¬μ©νκ³ , μλμΉ μμ μ€ν λ°μ±μ΄ μ¨μ΄λ€μ§ μλλ‘ μ£Όμνμ
βλ©λͺ¨λ¦¬ λμλ κ²μΌλ‘ μ λλ¬λμ§ μμ μμ€ν μ μλ κ° μ 볡νλ μ¬λ‘λ μλ€β
β κ°μ²΄ μ°Έμ‘°λ₯Ό λ΄λ λ°°μ΄ λ±μ μ¬μ©ν΄μ μκΈ° λ©λͺ¨λ¦¬λ₯Ό μ§μ κ΄λ¦¬νλ ν΄λμ€μμλ μμλ₯Ό λ€ μ¬μ©ν μ¦μ κ·Έ μμκ° μ°Έμ‘°ν κ°μ²΄λ€μ λ€ null
μ²λ¦¬ ν΄μ€μΌ νλ€.
β WeakHashMap
λ₯Ό νμ©νλ λ± μν©μ λ°λΌ λ©λͺ¨λ¦¬ λμλ₯Ό λ°©μ§νμ
β μ½λ°±μ μ½ν μ°Έμ‘°(weak reference)λ‘ μ μ₯νλ©΄ κ°λΉμ§ 컬λ ν°κ° μκ±°ν΄κ°.
ex) WeakHashMap
μ ν€λ‘ μ μ₯
β
finalizer
μcleaner
λ μμΈ‘ν μ μκ³ , μΌλ°μ μΌλ‘ λΆνμνλ€.β
finalizer
μ cleaner
λ μ¦μ μνλλ€λ 보μ₯μ΄ μμfinalizer
μ cleaner
μ 맑기면 μ λ¨destructor
μ λμμ κΈ°λνλ©΄ μ λ¨finalizer
λ cleaner
μ μν μ¬λΆμ‘°μ°¨ 보μ₯νμ§ μμfinalizer
λ cleaner
μ 맑기면 μ λ¨finalizer
μ cleaner
λ κ°λΉμ§ 컬λ ν°μ ν¨μ¨μ λ¨μ΄λ¨λ¦ΌAutoCloseable
μ ꡬνν΄μ μ¬μ©νμ!finalizer
λ cleaner
λ₯Ό λμ νμ¬ κ·Έμ AutoCloseable
μ ꡬνν΄μ£Όκ³ , ν΄λΌμ΄μΈνΈμμ μΈμ€ν΄μ€λ₯Ό λ€ μ°κ³ λλ©΄ close
λ©μλλ₯Ό νΈμΆνλ©΄ λλ€.static String firstLineOfFile(String path) throws IOException {
BufferedReader br = new BufferedReader(new FileReader(path));
try {
return br.readLine();
} finally {
br.close();
}
}
try-finally
κ° μ°μλ€.try
λΈλ‘κ³Ό finally
λΈλ‘ λͺ¨λμμ λ°μν μ μλλ°, μ컨λ κΈ°κΈ°μ 물리μ μΈ λ¬Έμ κ° μκΈ΄λ€λ©΄ try
λΈλ‘ μμ readLine
λ©μλκ° μμΈλ₯Ό λμ§κ³ , κ°μ μ΄μ λ‘ close
λ©μλλ μ€ν¨ν κ²μ΄λ€. β μ΄λ° μν©μμ μ€ν μΆμ λ΄μμλ λ λ²μ§Έ μμΈμ μ λ³΄λ§ λ¨κ² λμ΄ λλ²κΉ
μ μ΄λ €μμ μ€λ€.// μμμ΄ λ μ΄μμ΄λ©΄ try-finally λ°©μμ λ무 μ§μ λΆνλ€!
static void copy(String src, String dst) throws IOException {
InputStream in = new FileInputStream(src);
try {
OutputStream out = new FileOutputStream(dst);
try {
byte[] buf = new byte[BUFFER_SIZE];
int n;
while ((n = in.read(buf)) >= 0)
out.write(buf, 0, n);
} finally {
out.close();
}
} finally {
in.close();
}
}
// 볡μμ μμμ μ²λ¦¬νλ try-with-resources - μ§§κ³ λ§€νΉμ μ΄λ€!
static void copy(String src, String dst) throws IOException {
try (InputStream in = new FileInputStream(src);
OutputStream out = new FileOutputStream(dst)) {
byte[] buf = new byte[BUFFER_SIZE];
int n;
while ((n = in.read(buf)) >= 0)
out.write(buf, 0, n);
}
}
try-with-resource
λ²μ μ΄ ν¨μ¬ κ°κ²°νκ³ κ°λ
μ±μ΄ μ’λ€.try-finally
λ°©μκ³Όλ λ€λ₯΄κ² μ¨κ²¨μ§ μμΈλ€λ κ·Έλ₯ λ²λ €μ§μ§ μκ³ , μ€ν μΆμ λ΄μμ βμ¨κ²¨μ‘λ€(suppressed)βλ 꼬리νλ₯Ό λ¬κ³ μΆλ ₯λλ€.