π Chap 11: κΈ°λ³Έ API ν΄λμ€
π Chap 11: κΈ°λ³Έ API ν΄λμ€
β¨ 11-1 java.lang ν¨ν€μ§
π java.lang ν¨ν€μ§μ μνλ μ£Όμ ν΄λμ€ & μ©λ
π οΈ 1) Object ν΄λμ€
- λͺ¨λ μλ° ν΄λμ€μ μ΅μμ μ‘°μ ν΄λμ€
- μ§μ μμνμ§ μμλ,
extends Objectκ° μλμΌλ‘ μ μ©λ¨ - μ£Όμ λ©μλ:
equals(Object obj)- κ°μ²΄κ° μ μ₯νλ βλ°μ΄ν°μ λμΌμ±β νλ¨
- κΈ°λ³Έ ꡬν: μ°Έμ‘° λΉκ΅ (
==) - 컀μ€ν ν΄λμ€μμλ μ¬μ μ(override)νμ¬ βνλ κ° λΉκ΅β λ‘μ§ μμ±
hashCode()- κ°μ²΄λ₯Ό μλ³ν μ μλ μ μκ°(ν΄μμ½λ) λ°ν
equals()λ₯Ό μ¬μ μν λ λ°λμhashCode()λ μ¬μ μν΄μΌ ν¨
toString()- κ°μ²΄λ₯Ό λ¬Έμμ΄(String)λ‘ ννν κ° λ°ν
- κΈ°λ³Έ ꡬν:
ν΄λμ€μ΄λ¦@16μ§μ_ν΄μμ½λ - λνμ μΈ μμ:
Date: νμ¬ λ μ§/μκ°μ μ¬λμ΄ μ½κΈ° μ’μ ννλ‘ λ°νString: κ°μ²΄μ μ μ₯λ λ¬Έμμ΄ μ체λ₯Ό λ°ν
π‘ Member ν΄λμ€μμ equals()λ©μλ μ¬μ μ μμ
π‘ μ°μ΅λ¬Έμ
π‘ toString() μ€λ²λΌμ΄λ© μμ
π οΈ 2) System ν΄λμ€
Systemν΄λμ€λ₯Ό μ΄μ©νλ©΄ μ΄μ체μ μ JVM μΌλΆ κΈ°λ₯μ νμ©ν μ μμ- μ£Όμ νλ & λ©μλ:
- νμ€ μ
μΆλ ₯
System.out: νμ€ μΆλ ₯ μ€νΈλ¦Ό (PrintStream)System.err: νμ€ μ€λ₯ μΆλ ₯ μ€νΈλ¦Ό (PrintStream)System.in: νμ€ μ λ ₯ μ€νΈλ¦Ό (InputStream)
- νλ‘κ·Έλ¨ μ’
λ£
System.exit(int status): JVM κ°μ μ’ λ£System.exit(0); // μ μ μ’ λ£ System.exit(1); // λΉμ μ μ’ λ£ (κ΄λ‘μ μΌλ‘ 0 μ΄μΈ κ°μ μ€λ₯)
- νμ¬ μκ° μ½κΈ°
System.currentTimeMillis(): 1970λ 1μ 1μΌ 00:00:00 UTC μ΄ν κ²½κ³Όν λ°λ¦¬μ΄(ms) λ°νSystem.nanoTime(): JVMμ΄ μμλ μ΄ν κ²½κ³Όν λλ Έμ΄(ns) λ°ν (μ£Όλ‘ μκ° μΈ‘μ μ©λ)long start = System.nanoTime(); // ... μ€νν μ½λ ... long end = System.nanoTime(); System.out.println("μ€ν μκ°: " + (end - start) + " ns");
- λ©λͺ¨λ¦¬ κ΄λ¦¬ λ° κΈ°ν
System.gc(): JVMμκ² κ°λΉμ§ 컬λ ν° μ€νμ μμ² (μ¦μ μ€νμ 보μ₯νμ§ μμ)System.getProperty(String key): μμ€ν νλ‘νΌν°(μ:"user.home","os.name") μ‘°ν
- νμ€ μ
μΆλ ₯
π‘ System μμ μ½λ: μκ° μΈ‘μ λ° μ’
λ£
public class SystemExample {
public static void main(String[] args) {
System.out.println("νλ‘κ·Έλ¨ μμ π");
// κ°λ¨ν μκ° μΈ‘μ μμ
long startMillis = System.currentTimeMillis();
// μμ λ°λ³΅λ¬Έ (λλ μ΄λ₯Ό μν μμ )
int sum = 0;
for (int i = 1; i <= 100_000; i++) {
sum += i;
}
long endMillis = System.currentTimeMillis();
System.out.println("1λΆν° 100,000κΉμ§ ν©: " + sum);
System.out.println("μ€ν μκ°: " + (endMillis - startMillis) + " ms");
System.out.println("νλ‘κ·Έλ¨ μ’
λ£ π");
//System.exit(0); // μ£Όμ ν΄μ μ νλ‘κ·Έλ¨μ΄ μ¦μ μ’
λ£λ¨
}
}
π οΈ 3) Class ν΄λμ€
- ν΄λμ€μ μΈν°νμ΄μ€μ λ©νλ°μ΄ν°(metadata) λ₯Ό κ΄λ¦¬
- λ°νμμ ν΄λμ€μ μ 보λ₯Ό λμ μΌλ‘ μ‘°ννκ±°λ,
- 리νλ μ (reflection)μ ν΅ν΄ μΈμ€ν΄μ€λ₯Ό μμ±νκ±°λ λ©μλλ₯Ό νΈμΆν λ μ¬μ©λ¨
- μ£Όμ λ©μλ:
getClass()(Objectλ‘λΆν° μμ)- μΈμ€ν΄μ€κ° μν ν΄λμ€μ
Classκ°μ²΄ λ°ν - μ:
String s = "Hello"; Class<?> cls = s.getClass();
- μΈμ€ν΄μ€κ° μν ν΄λμ€μ
Class.forName(String className)- μ£Όμ΄μ§ ν΄λμ€ μ΄λ¦(λ¬Έμμ΄)μΌλ‘λΆν°
Classκ°μ²΄λ₯Ό λμ μΌλ‘ λ‘λ© - μ:
Class<?> cls = Class.forName("com.example.MyClass");
- μ£Όμ΄μ§ ν΄λμ€ μ΄λ¦(λ¬Έμμ΄)μΌλ‘λΆν°
- 리νλ μ
νμ©
cls.getDeclaredFields(): ν΄λμ€κ° κ°μ§ νλ λͺ©λ‘ μ‘°νcls.getDeclaredMethods(): ν΄λμ€κ° κ°μ§ λ©μλ λͺ©λ‘ μ‘°νcls.getConstructor(...): νΉμ μμ±μ μ‘°ν λ°newInstance()νΈμΆ
π‘ Class μμ μ½λ: λμ ν΄λμ€ λ‘λ©
import java.util.Arrays;
import java.lang.reflect.Modifier;
public class ReflectionExample {
public static void main(String[] args) {
try {
// 1. String μΈμ€ν΄μ€μμ getClass() μ¬μ©
String str = "Hello Reflection";
Class<?> clazz1 = str.getClass();
System.out.println("clazz1: " + clazz1.getName()); // java.lang.String
// 2. Class.forName() μ¬μ©νμ¬ ν΄λμ€ λ‘λ©
Class<?> clazz2 = Class.forName("java.util.ArrayList");
System.out.println("clazz2: " + clazz2.getName()); // java.util.ArrayList
// 3. 리νλ μ
μΌλ‘ λ©μλ λͺ©λ‘ μΆλ ₯
System.out.println("=== ArrayList Methods ===");
Arrays.stream(clazz2.getDeclaredMethods())
.filter(m -> Modifier.isPublic(m.getModifiers()))
.forEach(m -> System.out.println("- " + m.getName()));
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
π οΈ 4) String ν΄λμ€ π
- String: λ¬Έμμ΄μ μ μ₯νκ³ λ€μν λ¬Έμμ΄ μ²λ¦¬ λ©μλλ₯Ό μ 곡
π‘ String μ£Όμ λ©μλ μμ
π οΈ 5) Wrapper ν΄λμ€
Wrapper ν΄λμ€ μ’ λ₯:
Byte,Short,Character,Integer,Float,Double,Boolean,Long
- λ°μ±(Boxing) & μΈλ°μ±(Unboxing)
- λ°μ±: κΈ°λ³Έ νμ
(primitive)μ Wrapper κ°μ²΄λ‘ λ³ν
int primitiveInt = 42; Integer boxedInt = Integer.valueOf(primitiveInt); // λͺ μμ λ°μ± Integer autoBoxed = primitiveInt; // μλ λ°μ± (Auto-boxing) - μΈλ°μ±: Wrapper κ°μ²΄μμ κΈ°λ³Έ νμ
κ° μΆμΆ
Integer wrapperInt = 100; int unboxed = wrapperInt.intValue(); // λͺ μμ μΈλ°μ± int autoUnboxed = wrapperInt; // μλ μΈλ°μ± (Auto-unboxing)
- λ°μ±: κΈ°λ³Έ νμ
(primitive)μ Wrapper κ°μ²΄λ‘ λ³ν
- λ¬Έμμ΄ β κΈ°λ³Έ νμ
λ³ν
- λ¬Έμμ΄ β κΈ°λ³Έ νμ
String strNum = "123"; int value1 = Integer.parseInt(strNum); // κΈ°λ³Έ νμ int Integer value2 = Integer.valueOf(strNum); // Wrapper κ°μ²΄ double d1 = Double.parseDouble("3.14"); Double d2 = Double.valueOf("3.14"); - κΈ°λ³Έ νμ
β λ¬Έμμ΄
int num = 99; String s1 = String.valueOf(num); String s2 = Integer.toString(num);
- λ¬Έμμ΄ β κΈ°λ³Έ νμ
- μ
λ ₯κ° κ²μ¬ (Input Validation)
- μ¬μ©μκ° μ
λ ₯ν λ¬Έμμ΄μ΄ μ«μμΈμ§ μλμ§λ₯Ό κ²μ¬ν λ μ μ©
String input = "456a"; try { int parsed = Integer.parseInt(input); System.out.println("μ μλ‘ λ³ν μ±κ³΅: " + parsed); } catch (NumberFormatException e) { System.err.println("μ ν¨νμ§ μμ μ«μ νμμ λλ€: " + input); }
- μ¬μ©μκ° μ
λ ₯ν λ¬Έμμ΄μ΄ μ«μμΈμ§ μλμ§λ₯Ό κ²μ¬ν λ μ μ©
- κΈ°ν μ μ©ν λ©μλ
Integer.MAX_VALUE,Integer.MIN_VALUE(μ΅λκ°/μ΅μκ° μμ)Boolean.parseBoolean(String s)(λ¬Έμμ΄ β boolean)Character.isDigit(char ch),Character.isLetter(char ch)(λ¬Έμ κ²μ¬ λ©μλ)
π οΈ 6) Math ν΄λμ€
- μν κ΄λ ¨ μ μ λ©μλ μ 곡
- λν λ©μλ:
- μΌκ°ν¨μ
Math.sin(double a),Math.cos(double a),Math.tan(double a)- μΈμλ λΌλμ(radian) λ¨μ
- μ§μ λ° λ‘κ·Έ
Math.exp(double a): (e^a)Math.log(double a): μμ°λ‘κ·Έ(base (e))Math.log10(double a): μμ©λ‘κ·Έ(base 10)Math.pow(double a, double b): (a^b)
- μ λκ°/λ°μ¬λ¦Ό/μ μ
Math.abs(int/long/float/double)Math.round(double a): κ°μ₯ κ°κΉμ΄ μ μ(μμ 첫째 μ리μμ λ°μ¬λ¦Ό)Math.ceil(double a): μ¬λ¦Ό (ex. 3.1 β 4.0)Math.floor(double a): λ΄λ¦Ό (ex. 3.9 β 3.0)
- λμ μμ±
Math.random(): [0.0, 1.0) λ²μμdoubleλμ λ°νdouble r = Math.random(); // 0.0 <= r < 1.0 int randInt = (int)(Math.random() * 100) + 1; // 1 ~ 100 μ¬μ΄ λμ
- μΌκ°ν¨μ
π‘ Math μμ μ½λ
public class MathExample {
public static void main(String[] args) {
double x = 2.7;
double y = -3.4;
System.out.println("abs(" + y + ") = " + Math.abs(y));
System.out.println("ceil(" + x + ") = " + Math.ceil(x));
System.out.println("floor(" + x + ") = " + Math.floor(x));
System.out.println("round(" + x + ") = " + Math.round(x));
double base = 2.0, exponent = 3.0;
System.out.println(base + "^" + exponent + " = " + Math.pow(base, exponent));
double angle = Math.PI / 4; // 45λ
System.out.println("sin(45Β°) = " + Math.sin(angle));
System.out.println("cos(45Β°) = " + Math.cos(angle));
// λμ μμ
System.out.println("Random [0.0,1.0): " + Math.random());
System.out.println("Random Int [1,10]: " + ((int)(Math.random() * 10) + 1));
}
}
β¨ 11-2 java.util ν¨ν€μ§
java.utilν¨ν€μ§λ λ€μν μ νΈλ¦¬ν° ν΄λμ€μ 컬λ μ νλ μμν¬λ₯Ό μ 곡
π°οΈ 1) Date ν΄λμ€
- ν¨ν€μ§:
java.util.Date - μ©λ:
- λ μ§μ μκ°μ λ°λ¦¬μ΄ λ¨μλ‘ μ μ₯νλ ν΄λμ€
- λ΄λΆμ μΌλ‘ 1970λ 1μ 1μΌ 00:00:00 UTC μ΄ν κ²½κ³Όν μκ°μ λ°λ¦¬μ΄λ‘ νν
- λ¬Έμμ΄ ννλ‘ λ μ§/μκ° μ 보 μΆλ ₯
- μ£Όμ λ©μλ:
- κΈ°λ³Έ μμ±μ
new Date(): νμ¬ μμ€ν μ λ μ§/μκ°μΌλ‘ μ΄κΈ°ν Date(long date): 1970λ 1μ 1μΌ UTC μ΄νdateλ°λ¦¬μ΄λ§νΌ μ§λ λ μ§λ‘ μ΄κΈ°νtoString(): μ¬λμ΄ μ½κΈ° μ’μ ννλ‘ λ μ§/μκ° λ°νgetTime(): λ΄λΆμ μ μ₯λ λ°λ¦¬μ΄(long) κ° λ°νafter(Date when),before(Date when): λ μ§ λΉκ΅
- κΈ°λ³Έ μμ±μ
π‘ Date μμ μ½λ
import java.util.Date;
public class DateExample {
public static void main(String[] args) {
// νμ¬ λ μ§/μκ° κ°μ²΄ μμ±
Date now = new Date();
System.out.println("νμ¬ Date: " + now.toString());
// 1μΌ(24μκ°) μ Date κ°μ²΄ μμ±
long ONE_DAY_MILLIS = 24L * 60 * 60 * 1000;
Date yesterday = new Date(now.getTime() - ONE_DAY_MILLIS);
System.out.println("μ΄μ Date: " + yesterday.toString());
// λ°λ¦¬μ΄ κ° κ°μ Έμ€κΈ°
long millis = now.getTime();
System.out.println("νμ¬ λ°λ¦¬μ΄: " + millis);
// λ μ§ λΉκ΅
if (yesterday.before(now)) {
System.out.println("μ΄μ (yesterday) λ μ§λ νμ¬(now) λ μ§λ³΄λ€ μ΄μ μ
λλ€.");
}
}
}
ποΈ 2) Calendar ν΄λμ€
- ν¨ν€μ§:
java.util.Calendar(μΆμ ν΄λμ€) - μ©λ:
- λ μ§μ μκ° νλ(Year, Month, Day, Hour, Minute λ±)λ³λ‘ μΈλΆ μ‘°μμ μ½κ² ν μ μλλ‘ μ 곡
Dateλ³΄λ€ νΈλ¦¬νκ² λ μ§ μ°μ°(λνκΈ°/λΉΌκΈ°), νλ μ‘°ν λ±μ μν
- μ£Όμ λ©μλ & νΉμ§:
- μΈμ€ν΄μ€ μμ±
// μ±κΈν€ ν¨ν΄μ²λΌ getInstance()λ‘ Calendar κ°μ²΄ μ»κΈ° Calendar cal = Calendar.getInstance(); - λ μ§ νλ μ‘°ν λ° μ€μ
cal.get(Calendar.YEAR),cal.get(Calendar.MONTH)Calendar.MONTHλ 0-based (0: January, 1: February, β¦, 11: December)
cal.set(Calendar.DAY_OF_MONTH, 15): μΌ(day) νλλ§ λ³κ²½int year = cal.get(Calendar.YEAR); int month = cal.get(Calendar.MONTH) + 1; // 0-based β 1μμ 1λ‘ νν int day = cal.get(Calendar.DAY_OF_MONTH); System.out.printf("Today: %d-%02d-%02d", year, month, day);
- λ μ§ μ°μ°
cal.add(Calendar.FIELD, amount): νΉμ νλμ amount λ§νΌ λνκ±°λ λΊcal.add(Calendar.MONTH, 1); // ν λ¬ λ€ cal.add(Calendar.DAY_OF_MONTH, -7); // 7μΌ μ
getTime()&setTime(Date date)cal.getTime():Dateκ°μ²΄λ‘ λ³νcal.setTime(Date date):Dateκ°μ²΄λ‘λΆν° Calendar νλ κ° μ€μ
- μΈμ€ν΄μ€ μμ±
π‘ Calendar μμ μ½λ
import java.util.Calendar;
import java.util.Date;
import java.text.SimpleDateFormat;
public class CalendarExample {
public static void main(String[] args) {
// 1) νμ¬ λ μ§/μκ° Calendar μΈμ€ν΄μ€ μμ±
Calendar cal = Calendar.getInstance();
// 2) νλλ³ λ μ§ μ 보 κ°μ Έμ€κΈ°
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH) + 1; // 0-based β 1~12
int day = cal.get(Calendar.DAY_OF_MONTH);
int hour = cal.get(Calendar.HOUR_OF_DAY);
int minute = cal.get(Calendar.MINUTE);
int second = cal.get(Calendar.SECOND);
System.out.printf("νμ¬: %d-%02d-%02d %02d:%02d:%02d
",
year, month, day, hour, minute, second);
// 3) λ μ§ μ°μ° μμ : ν λ¬ λ€λ‘ μ€μ
cal.add(Calendar.MONTH, 1);
System.out.println("ν λ¬ λ€: " + new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime()));
// 4) νΉμ λ μ§ μ€μ μμ : 2025λ
12μ 25μΌ (ν¬λ¦¬μ€λ§μ€)
cal.set(2025, Calendar.DECEMBER, 25);
Date xmas = cal.getTime();
System.out.println("ν¬λ¦¬μ€λ§μ€: " + xmas); // toString() μ΄μ©
// 5) Date β Calendar λ³ν
Date now = new Date();
cal.setTime(now);
System.out.println("Date β Calendar β " +
cal.get(Calendar.YEAR) + "-" + (cal.get(Calendar.MONTH) + 1) + "-" + cal.get(Calendar.DAY_OF_MONTH));
}
}