java.lang

BaeSeBinΒ·2025λ…„ 1μ›” 9일

😊java.lang Package

μžλ°”μ—μ„œ κ°€μž₯ 기본적인 νŒ¨ν‚€μ§€λ‘œ, λͺ¨λ“  μžλ°” ν”„λ‘œκ·Έλž¨μ— μžλ™μœΌλ‘œ ν¬ν•¨λ˜λŠ” νŒ¨ν‚€μ§€μž„. 클래슀λ₯Ό μž‘μ„±ν•  λ•Œ 클래슀 상속을 λͺ…μ‹œν•˜μ§€ μ•Šμ•˜λ‹€λ©΄ ν΄λž˜μŠ€λŠ” μ•”μ‹œμ μœΌλ‘œ java.lang.Objet 클래슀λ₯Ό μƒμ†ν•˜κ²Œ 됨. 즉, μžλ°”μ˜ λͺ¨λ“  ν΄λž˜μŠ€λŠ” Object 클래슀의 μžμ‹μ΄κ±°λ‚˜ μžμ† ν΄λž˜μŠ€μž„. Object ν΄λž˜μŠ€λŠ” μžλ°”μ˜ μ΅œμƒμœ„ λΆ€λͺ¨ ν΄λž˜μŠ€μ— 해당됨.

😊Object Class

🍧객체 비ꡐ (equals())
두 객체가 λ™μΌν•œ 객체라면 trueλ₯Ό λ¦¬ν„΄ν•˜κ³  κ·Έλ ‡μ§€ μ•Šλ‹€λ©΄ falseλ₯Ό 리턴함.
public boolean equals(Objet obj) { ``` }

😊Object.equals() vs String.equals()

μš©λ„ 차이 : Object.equals()λŠ” ν”ΌλΉ„κ΅λŒ€μƒμžμΈ 두 객체가 데이터가 λ™μΌν•˜λ‹€λŠ” 것을 μ˜λ―Έν•¨ // String.equals()λŠ” λ¬Έμžμ—΄μ΄ λ™μΌν•œμ§€ μ‘°μ‚¬ν•΄μ„œ κ°™λ‹€λ©΄ trueλ₯Ό λ¦¬ν„΄ν•˜κ³ , κ·Έλ ‡μ§€ μ•Šλ‹€λ©΄ falseλ₯Ό 리턴함.
κ°€λŠ₯ν•œ 이유 : String.equals()λŠ” Object.equals()λ₯Ό μ˜€λ²„λΌμ΄λ“œν•˜μ—¬ μ •μ˜ν–ˆκΈ° λ•Œλ¬Έμž„.
🍧객체 ν•΄μ‹œμ½”λ“œ(hashCode())
객체λ₯Ό 식별할 ν•˜λ‚˜μ˜ μ •μˆ˜κ°’μ„ 말함. Object.hashCode()λŠ” 객체의 λ©”λͺ¨λ¦¬ λ²ˆμ§€λ₯Ό μ΄μš©ν•΄μ„œ ν•΄μ‹œμ½”λ“œλ₯Ό λ§Œλ“€μ–΄ λ¦¬ν„΄ν•˜κΈ° λ•Œλ¬Έμ— κ°μ²΄λ§ˆλ‹€ λ‹€λ₯Έ 값을 κ°€μ§€κ³  있음.
즉, ν•΄μ‹œμ½”λ“œ 값이 λ‹€λ₯΄λ©΄ λ‹€λ₯Έ 객체둜 νŒλ‹¨ν•˜κ³  ν•΄μ‹œμ½”λ“œ 값이 κ°™μœΌλ©΄ equals() λ©”μ†Œλ“œλ‘œ λ‹€μ‹œ 비ꡐ함.
🍧객체 문자 정보 (toString())
Object 클래슀의 toString() λ©”μ†Œλ“œλŠ” 객체 문자 정보λ₯Ό 리턴함. 객체 문자 μ •λ³΄λŠ” 객체λ₯Ό λ¬Έμžμ—΄λ‘œ ν‘œν˜„ν•œ 값을 말함.
기본적으둜 Object 클래슀의 toString() λ©”μ†Œλ“œλŠ” "클래슀λͺ…@16μ§„μˆ˜ν•΄μ‹œμ½”λ“œ"둜 κ΅¬μ„±λœ λ¬Έμžμ •λ³΄λ₯Ό 리턴함.
보톡 μ˜€λ²„λΌμ΄λ“œ ν•˜μ—¬ μ‚¬μš©ν•¨ + Lombok의 @ToString μ‚¬μš©
🍧객체 볡제(clone())
원본 객체의 ν•„λ“œ κ°’κ³Ό λ™μΌν•œ 값을 κ°€μ§€λŠ” μƒˆλ‘œμš΄ 객체λ₯Ό μƒμ„±ν•˜λŠ” 것을 말함. 객체λ₯Ό λ³΅μ œν•˜λŠ” μ΄μœ λŠ” 원본 객체λ₯Ό μ•ˆμ „ν•˜κ²Œ λ³΄ν˜Έν•˜κΈ° μœ„ν•΄μ„œμž„. μ‹ λ’°ν•˜μ§€ μ•ŠλŠ” μ˜μ—­μœΌλ‘œ 원본 객체λ₯Ό λ„˜κ²¨ μž‘μ—…ν•  경우 원본 객체의 데이터가 훼손될 수 있기 λ•Œλ¬Έμž„. 객체 λ³΅μ œλŠ” 얕은 λ³΅μ œμ™€ κΉŠμ€ λ³΅μ œκ°€ 있음.
πŸ§μ–•μ€ 볡제(thin clone)
λ‹¨μˆœνžˆ ν•„λ“œκ°’μ„ λ³΅μ‚¬ν•΄μ„œ μƒˆλ‘œμš΄ 객체λ₯Ό λ§Œλ“œλŠ” 것 즉, ν•„λ“œκ°’μ΄ κΈ°λ³Έ νƒ€μž…μΌ 경우 κ°’ 볡사가 μΌμ–΄λ‚˜κ³ , ν•„λ“œκ°’μ΄ μ°Έμ‘° νƒ€μž…μΌ κ²½μš°μ—λŠ” 객체의 λ²ˆμ§€κ°€ 볡사됨. ν•„λ“œκ°’μ΄ λ°°μ—΄ νƒ€μž…μΈ κ²½μš°μ—λŠ” μƒˆλ‘œμš΄ 객체와 원본 객체가 같은 λ°°μ—΄ 객체λ₯Ό 참쑰함.
clone() λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” 원본 κ°μ²΄μ—μ„œ java.lang.Cloneable μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•΄μ•Όν•¨. 즉, 클래슀 μ„€κ³„μžκ°€ Cloneable μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜μ§€ μ•ŠμœΌλ©΄ 볡제λ₯Ό ν—ˆμš©ν•˜μ§€ μ•ŠλŠ” λ‹€λŠ” μ˜λ―Έμž„. λ§Œμ•½ Clonealbe μΈν„°νŽ˜μ΄μŠ€κ°€ κ΅¬ν˜„ μ•ˆλœ 객체λ₯Ό λ³΅μ‚¬ν•˜λ €κ³  ν•˜λ©΄ CloneNotSupportedException μ˜ˆμ™Έκ°€ λ°œμƒν•˜μ—¬ λ³΅μ œκ°€ μ‹€νŒ¨ν•¨. λ”°λΌμ„œ μ˜ˆμ™Έμ²˜λ¦¬ ν•„μš”ν•¨.
πŸ§κΉŠμ€ 볡제(deep clone)
μ°Έμ‘°ν•˜κ³  μžˆλŠ” 객체도 λ³΅μ œν•˜λŠ” 것, 얕은 λ³΅μ œμ™€ λ§ˆμ°¬κ°€μ§€λ‘œ Object.clone() λ©”μ†Œλ“œλ₯Ό μ˜€λ²„λΌμ΄λ“œ ν•˜μ—¬ μ°Έμ‘° 객체λ₯Ό λ³΅μ œν•˜λŠ” μ½”λ“œλ₯Ό 직접 μž‘μ„±ν•΄μ•Όν•¨.
λ‹€μŒκ³Ό 같은 방법을 가짐.
1. clone() μž¬μ •μ˜
class Address implements Cloneable {
    String city;
    String street;

    public Address(String city, String street) {
        this.city = city;
        this.street = street;
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

class Person implements Cloneable {
    String name;
    Address address;

    public Person(String name, Address address) {
        this.name = name;
        this.address = address;
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        // 얕은 볡제 μˆ˜ν–‰
        Person cloned = (Person) super.clone();
        // μ°Έμ‘° νƒ€μž… ν•„λ“œλ₯Ό κΉŠμ€ 볡제
        cloned.address = (Address) address.clone();
        return cloned;
    }
}

public class Main {
    public static void main(String[] args) throws CloneNotSupportedException {
        Address address = new Address("Seoul", "Gangnam");
        Person person1 = new Person("John", address);

        // κΉŠμ€ 볡제
        Person person2 = (Person) person1.clone();

        // 볡제된 객체와 원본 객체의 독립성 확인
        person2.address.city = "Busan";
        System.out.println(person1.address.city); // Seoul
        System.out.println(person2.address.city); // Busan
    }
}
2. 직렬화(Serialization) ν™œμš©
import java.io.*;

class Address implements Serializable {
    String city;
    String street;

    public Address(String city, String street) {
        this.city = city;
        this.street = street;
    }
}

class Person implements Serializable {
    String name;
    Address address;

    public Person(String name, Address address) {
        this.name = name;
        this.address = address;
    }

    public Person deepCopy() throws IOException, ClassNotFoundException {
        // 직렬화
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(bos);
        oos.writeObject(this);

        // 역직렬화
        ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
        ObjectInputStream ois = new ObjectInputStream(bis);
        return (Person) ois.readObject();
    }
}

public class Main {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        Address address = new Address("Seoul", "Gangnam");
        Person person1 = new Person("John", address);

        // κΉŠμ€ 볡제
        Person person2 = person1.deepCopy();

        // 볡제된 객체와 원본 객체의 독립성 확인
        person2.address.city = "Busan";
        System.out.println(person1.address.city); // Seoul
        System.out.println(person2.address.city); // Busan
    }
}
3. μˆ˜λ™μœΌλ‘œ 볡제 κ΅¬ν˜„.
class Address {
    String city;
    String street;

    public Address(String city, String street) {
        this.city = city;
        this.street = street;
    }

    public Address deepCopy() {
        return new Address(this.city, this.street);
    }
}

class Person {
    String name;
    Address address;

    public Person(String name, Address address) {
        this.name = name;
        this.address = address;
    }

    public Person deepCopy() {
        return new Person(this.name, this.address.deepCopy());
    }
}

public class Main {
    public static void main(String[] args) {
        Address address = new Address("Seoul", "Gangnam");
        Person person1 = new Person("John", address);

        // κΉŠμ€ 볡제
        Person person2 = person1.deepCopy();

        // 볡제된 객체와 원본 객체의 독립성 확인
        person2.address.city = "Busan";
        System.out.println(person1.address.city); // Seoul
        System.out.println(person2.address.city); // Busan
    }
}

😊System 클래슀

μžλ°”λŠ” 운영체제 μœ„μ—μ„œ λ°”λ‘œ μ‹€ν–‰λ˜λŠ” 것이 μ•„λ‹˜ JVM μœ„μ—μ„œ 싀행됨 λ”°λΌμ„œ 운영체제의 λͺ¨λ“  κΈ°λŠ₯을 μžλ°” μ½”λ“œλ‘œ 직접 μ ‘κ·Όν•˜κΈ°λž€ 어렀움. BUT 운영체제 κΈ°λŠ₯ μ‚¬μš©ν•˜κ³  μ‹Άλ‹€λ©΄ μ΄λ•Œ μ‚¬μš©ν•˜λŠ” 것이 java.lang.System ν΄λž˜μŠ€μž„.
System 클래슀의 λͺ¨λ“  λ³€μˆ˜μ™€ λ©”μ†Œλ“œλŠ” 정적 ν•„λ“œμ™€ 정적 λ©”μ†Œλ“œλ‘œ κ΅¬μ„±λ˜μ–΄ 있음.
πŸ§ν˜„μž¬ μ‹œκ°„ 읽기(currentTimeMillis(), nanoTime())
System 클래슀의 currentTimeMillis() λ©”μ†Œλ“œ(λ°€λ¦¬μ„Έμ»¨λ“œ λ‹¨μœ„)와 nanoTime() λ©”μ†Œλ“œ(λ‚˜λ…Έμ„Έμ»¨λ“œ λ‹¨μœ„)λŠ” 운영체제의 μ‹œκ³„λ‘œλΆ€ν„° ν˜„μž¬ μ‹œκ°„μ„ μ½μ–΄μ„œ longκ°’μœΌλ‘œ 리턴함.
long time = System.out.currentTimeMillis();
long time2 = System.out.nanoTime();
리턴 값은 주둜 ν”„λ‘œκ·Έλž¨μ˜ μ‹€ν–‰ μ†Œμš” μ‹œκ°„ 츑정에 μ‚¬μš©λ¨. 즉, ν”„λ‘œκ·Έλž¨ μ‹œμž‘μ‹œμ— μ‹œκ°μ„ 읽고 ν”„λ‘œκ·Έλž¨μ΄ 끝날 λ•Œ μ‹œκ°μ„ μ½μ–΄μ„œ 차이λ₯Ό κ΅¬ν•˜λ©΄ ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ μ†Œμš” μ‹œκ°„μ΄ λ‚˜μ˜΄.
import java.io.*;
import java.util.*;
import java.util.stream.Collectors;

public class Main {

    public static void main(String[] args) {

        long time1 = System.nanoTime();


        int sum = 0;
        for (int i = 0; i < 100000; i++) {
            sum += i;
        }


        System.out.println("10000000κΉŒμ§€μ˜ 합은 : " + sum);

        long time2 = System.nanoTime();
        System.out.println("ν”„λ‘œκ·Έλž¨ μ‹€ν–‰λœ μ‹œκ° : " + (time2 - time1) * 1e-9);


    }

}
πŸ§μ‹œμŠ€ν…œ ν”„λ‘œνΌν‹° 읽기(getProperty())
JVM이 μ‹œμž‘ν•  λ•Œ μžλ™ μ„€μ • λ˜λŠ” μ‹œμŠ€ν…œμ˜ 속성값을 말함. Java ν”„λ‘œκ·Έλž¨ μ‹€ν–‰μ‹œν‚¨ μ‚¬μš©μž 아이디, JVM의 버전, μš΄μ˜μ²΄μ œμ—μ„œ μ‚¬μš©ν•˜λŠ” 파일 경둜 κ΅¬λΆ„μž λ“± ..
public class Main {
    public static void main(String[] args) {
        // 운영 체제 이름 κ°€μ Έμ˜€κΈ°
        String osName = System.getProperty("os.name");
        System.out.println("Operating System: " + osName);

        // μ‚¬μš©μž 디렉토리 κ°€μ Έμ˜€κΈ°
        String userDir = System.getProperty("user.dir");
        System.out.println("User Directory: " + userDir);

        // Java 버전 κ°€μ Έμ˜€κΈ°
        String javaVersion = System.getProperty("java.version");
        System.out.println("Java Version: " + javaVersion);
    }
}

😊Class 클래슀

μžλ°”λŠ” ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€μ˜ 메타 데이터λ₯Ό java.lang νŒ¨ν‚€μ§€μ— μ†Œμ†λœ Class 클래슀둜 관리함.
메타 데이터 : 클래슀의 이름, μƒμ„±μž 정보, ν•„λ“œ 정보, λ©”μ†Œλ“œ 정보λ₯Ό 말함.
🍧Class 객체 μ–»κΈ°(getClass(), forName())
ν”„λ‘œκ·Έλž¨μ—μ„œ Class 객체λ₯Ό μ–»κΈ°μœ„ν•΄μ„œλŠ” Object ν΄λž˜μŠ€κ°€ κ°–κ³  μžˆλŠ” getClass() λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜λ©΄ 됨.
getClass()λŠ” ν•΄λ‹Ή 클래슀둜 객체λ₯Ό μƒμ„±ν–ˆμ„ λ•Œλ§Œ μ‚¬μš©ν•  수 있음.
Class clasz = obj.getClass();
ClassλŠ” μƒμ„±μžλ₯Ό 감좔고 있기 λ•Œλ¬Έμ— new μ—°μ‚°μžλ‘œ 객체λ₯Ό λ§Œλ“€ 수 μ—†κ³ , 정적 λ©”μ†Œλ“œμΈ forName()을 μ΄μš©ν•˜λ©΄ 객체 λ§Œλ“€μ§€ μ•Šκ³  λ°”λ‘œ 객체 κ°€μ Έμ˜¬ 수 있음. 즉, forName() λ©”μ†Œλ“œλŠ” ν΄λž˜μŠ€μ „μ²΄ 이름을 λ§€κ°œκ°’μœΌλ‘œ λ°›κ³  객체λ₯Ό 리턴함.
try{
	Class clazz = Class.forName(String className);

}

catch (ClassNotFoundException e){}
πŸ§λ¦¬ν”Œλ ‰μ…˜(getDeclaredConstructors(), getDeclaredFields(), getDeclaredMethods())
λ¦¬ν”Œλ ‰μ…˜ : Java ν”„λ‘œκ·Έλž˜λ°μ—μ„œ λŸ°νƒ€μž„ μ‹œμ μ— ν”„λ‘œκ·Έλž¨μ˜ ꡬ쑰(Class, Method, Field λ“±)λ₯Ό λΆ„μ„ν•˜κ³  μ‘°μž‘ν•  수 μžˆλŠ” κΈ°λŠ₯
πŸ§λ™μ  객체 생성(newInstance())
Class 객체λ₯Ό ν™œμš©(Class.forName())ν•˜μ—¬ new μ—°μ‚°μž μ‚¬μš©ν•˜μ§€ μ•Šμ•„λ„ λ™μ μœΌλ‘œ 객체λ₯Ό 생성 ν•  수 있음. 이 방법은 μ½”λ“œ μž‘μ„± μ‹œμ— 클래슀 이름을 κ²°μ •ν•  수 μ—†μŒ.
newInstance() λ©”μ†Œλ“œλŠ” κΈ°λ³Έ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•΄μ„œ 객체λ₯Ό μƒμ„±ν•˜κΈ° λ•Œλ¬Έμ— λ°˜λ“œμ‹œ ν΄λž˜μŠ€μ— κΈ°λ³Έ μƒμ„±μžκ°€ μ‘΄μž¬ν•΄μ•Όν•¨.
newInstance() λ©”μ†Œλ“œμ˜ 리턴 νƒ€μž…μ€ Objectμž„μœΌλ‘œ 이것을 μ›λž˜ 클래슀 νƒ€μž…μœΌλ‘œ λ³€ν™˜ν•΄μ•Όλ§Œ λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•  수 있음.
μ˜ˆμ‹œ
// Action은 μΈν„°νŽ˜μ΄μŠ€μž„.
Class clasz = Class.forName("클래슀 이름 μ‚½μž…");
Action action = (Action) clasz.newInstance();
action.execute();

😊String 클래슀

String λ©”μ†Œλ“œ
1. char charAt(int index)
λ§€κ°œλ³€μˆ˜μ— μ£Όμ–΄μ§„ 인덱슀의 λ¬Έμžμ—΄μ„ 리턴함.
public class Main {
    public static void main(String[] args) {
        String str = "Hello";
        char ch = str.charAt(1); // 인덱슀 1의 문자
        System.out.println(ch);  // 좜λ ₯: e
    }
}
2. boolean equals(Object anObject)
μžλ°”λŠ” λ¬Έμžμ—΄ λ¦¬ν„°λŸ΄μ΄ λ™μΌν•˜λ‹€λ©΄ λ™μΌν•œ String 객체λ₯Ό μ°Έμ‘°ν•˜λ„λ‘ λ˜μ–΄μžˆμŒ. λ”°λΌμ„œ 문자λ₯Ό 비ꡐ할 λ•ŒλŠ” == μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜λ©΄ μ›μΉ˜ μ•Šμ€ κ²°κ³Όκ°€ λ‚˜μ˜¬ 수 있음.
λ¦¬ν„°λŸ΄ : μ†ŒμŠ€μ½”λ“œμ— μ˜ν•΄ μ •ν•΄μ§„ κ³ μ •λœ κ°’
new μ—°μ‚°μž μ‚¬μš©ν•΄μ„œ λ¬Έμžμ—΄ λ¦¬ν„°λŸ΄ λ§Œλ“€μ—ˆμ„ λ•Œ vs κ·Έλƒ₯ μ„ μ–Έκ³Ό λ™μ‹œμ— λ¬Έμžμ—΄ λ¦¬ν„°λŸ΄ λ§Œλ“€μ—ˆμ„ λ•Œ
String strvar1 ="손ν₯λ―Ό";
String strvar2 = new String("손ν₯λ―Ό");
if(strvar1 != strvar2)
	System.out.println("λ‘˜μ€ λ‹€λ₯Έ 객체λ₯Ό μ°Έμ‘°ν•©λ‹ˆλ‹€");
λ”°λΌμ„œ 두 String 객체의 λ¬Έμžμ—΄ λ§Œμ„ λΉ„κ΅ν•˜κ³  μ‹Άλ‹€λ©΄ ==μ—°μ‚°μž λŒ€μ‹ μ— equals() λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•΄μ•Ό 함.
String strvar1 ="손ν₯λ―Ό";
String strvar2 = new String("손ν₯λ―Ό");
if(strvar1.equals(strvar2))
	System.out.println("손ν₯λ―Ό!!!");
3. byte[] getByte[];
4. int indexOf(String str)
indexOf() λ©”μ†Œλ“œλŠ” μ£Όμ–΄μ§„ λ¬Έμžμ—΄μ΄ μ‹œμž‘λ˜λŠ” 인덱슀λ₯Ό 리턴함.λ§Œμ•½ μ£Όμ–΄μ§„ λ¬Έμžμ—΄μ΄ ν¬ν•¨λ˜μ–΄ μžˆμ§€ μ•ŠμœΌλ©΄ -1(intν˜• νƒ€μž…)을 리턴함
public class Main {
    public static void main(String[] args) {
        String str = "Hello World";
        int index = str.indexOf("World");
        System.out.println(index); // 좜λ ₯: 6
    }
}
5. int length()
length() λ©”μ†Œλ“œλŠ” λ¬Έμžμ—΄μ˜ 길이(곡백 ν¬ν•¨ν•œ 문자의 수)λ₯Ό 리턴함.
public class Main {
    public static void main(String[] args) {
        String str = "Hello";
        int len = str.length();
        System.out.println(len); // 좜λ ₯: 5
    }
}
6. replace(CharSequence target, CharSequence replacement)
replace()λ©”μ†Œλ“œλŠ” 첫 번째 λ§€κ°œκ°’μΈ λ¬Έμžμ—΄μ„ μ°Ύμ•„ 두 번째 λ§€κ°œκ°’μΈ λ¬Έμžμ—΄λ‘œ λŒ€μΉ˜ν•œ μƒˆλ‘œμš΄ λ¬Έμžμ—΄μ„ μƒμ„±ν•˜κ³  리턴함.
String oldStr = "μžλ°” ν”„λ‘œκ·Έλž˜λ°";
String newStr = oldStr.replace("μžλ°”", "JAVA");
7. toLowerCase() & toUpperCase()
toLowerCase() λ©”μ†Œλ“œλŠ” λ¬Έμžμ—΄μ„ λͺ¨λ‘ μ†Œλ¬Έμžλ‘œ λ°”κΎΌ μƒˆλ‘œμš΄ λ¬Έμžμ—΄μ„ μƒμ„±ν•œ ν›„ 리턴함.
toUpperCase() λ©”μ†Œλ“œλŠ” λ¬Έμžμ—΄μ„ λͺ¨λ‘ λŒ€λ¬Έμžλ‘œ λ°”κΎΌ μƒˆλ‘œμš΄ λ¬Έμžμ—΄μ„ μƒμ„±ν•œ ν›„ 리턴함.
String original = "Java Programming";
String lowercase = original.toLowerCase();
String uppercase = original.toUpperCase();
8. trim() & strip()
trim() λ©”μ†Œλ“œλŠ” λ¬Έμžμ—΄μ„ μ•žλ’€ 곡백을 μ œκ±°ν•œ μƒˆλ‘œμš΄ λ¬Έμžμ—΄μ„ μƒμ„±ν•˜κ³  리턴함. 쀑간 곡백은 μ œκ±°ν•˜μ§€ μ•ŠμŒ. 쀑간 곡백 제거 원할 μ‹œμ— λ¬Έμžμ—΄ λΆ„ν•  ν•œλ’€ 쀑간 곡백 μ œκ±°ν•  것!. ASCII 곡백만 μ²˜λ¦¬ν•¨, μœ λ‹ˆμ½”λ“œ 곡백은 λ‚¨μŒ
String oldStr = "    java programming ":
String newstr = oldStr.trim();
strip() λ©”μ†Œλ“œλŠ” λ¬Έμžμ—΄ μ–‘μͺ½μ— μžˆλŠ” 곡백 문자λ₯Ό μ œκ±°ν•¨. trim()κ³Ό λ‹€λ₯Έμ μ€ μœ λ‹ˆμ½”λ“œ 곡백을 μ²˜λ¦¬ν•  수 μžˆλŠ” κΈ°λŠ₯을 μ œκ³΅ν•¨.
κΈ°λ³Έ μ‚¬μš©λ²• :
String result = λ¬Έμžμ—΄.strip();
μ•ž 곡백만 제거 (stripLeading()) / λ’€ 곡백만 제거(stripTrailing())
String text = "   μ•žμͺ½ 곡백 제거";
String result = text.stripLeading();
System.out.println(result);  // 좜λ ₯: "μ•žμͺ½ 곡백 제거"
String text = "λ’€μͺ½ 곡백 제거   ";
String result = text.stripTrailing();
System.out.println(result);  // 좜λ ₯: "λ’€μͺ½ 곡백 제거"
9. valueOf()
κΈ°λ³Έ νƒ€μž…μ˜ 값을 λ¬Έμžμ—΄λ‘œ λ³€ν™˜ν•˜λŠ” κΈ°λŠ₯을 κ°–κ³  있음. String ν΄λž˜μŠ€μ—λŠ” 맀개 λ³€μˆ˜μ˜ νƒ€μž…λ³„λ‘œ valueOf() λ©”μ†Œλ“œκ°€ μ˜€λ²„λΌμ΄λ”© λ˜μ–΄μžˆμŒ.
String str1 = String.valueOf(10);

😊Wrapper 클래슀

μžλ°”λŠ” κΈ°λ³Έ νƒ€μž…(byte, int ,char, long, float, double, boolean)의 값을 κ°–λŠ” 객체λ₯Ό 생성할 수 있음. 이런 객체λ₯Ό Wrapper 객체라고 함. μ§κ΄€μ μœΌλ‘œ μƒκ°ν•˜λ©΄ κΈ°λ³Έ νƒ€μž…μ˜ 값을 μ•ˆμ— 두고 포μž₯ν•œλ‹€κ³  μƒκ°ν•˜λ©΄ 됨. κΈ°λ³Έ νƒ€μž… 값은 μ™ΈλΆ€μ—μ„œ λ³€κ²½ν•  수 μ—†μŒ.
λ¬Έμžμ—΄μ„ κΈ°λ³Έ νƒ€μž… κ°’μœΌλ‘œ λ³€ν™˜ν•  λ•Œ 많이 μ‚¬μš©ν•¨.
Wrapper ν΄λž˜μŠ€λŠ” "parse+κΈ°λ³Ένƒ€μž…"λͺ…μœΌλ‘œ λ˜μ–΄μžˆλŠ” 정적 λ©”μ†Œλ“œκ°€ 있음.
int num = Integer.parseInt("1000");
// λ‹€μŒκ³Ό 같이 λ¬Έμžμ—΄μ—μ„œ κΈ°λ³Έ νƒ€μž… 값인 int둜 λ³€ν™˜ν•¨.
Boxing : κΈ°λ³Έ νƒ€μž…μ˜ 값을 포μž₯ 객체둜 λ§Œλ“œλŠ” κ³Όμ •
1. μƒμ„±μž 이용
Byte obj = new Byte(10);
Byte obj = new Byte("10"); // λ¬Έμžμ—΄μ„ μ£ΌλŠ” 경우
Integer obj = new Integer("1000"); // λ¬Έμžμ—΄μ„ μ£ΌλŠ” 경우
2. valueOf μ‚¬μš©
Integer obj = Integer.valueOf("1000");
Integer obj = Integer.valueOf(1000);
Unboxing : 포μž₯ κ°μ²΄μ—μ„œ κΈ°λ³Έ νƒ€μž…μ˜ 값을 μ–»μ–΄λ‚΄λŠ” κ³Όμ •
"κΈ°λ³Έ νƒ€μž…λͺ… + Value()" λ©”μ†Œλ“œλ₯Ό 호좜
int num = obj.intValue();
πŸ§μžλ™ λ°•μ‹±
List<Integer> list = new ArrayList<Integer>();
list.add(200);
🍧포μž₯ κ°’ 비ꡐ
포μž₯ κ°μ²΄λŠ” λ‚΄λΆ€μ˜ 값을 λΉ„κ΅ν•˜κΈ° μœ„ν•΄ ==와 != μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•  수 μ—†μŒ. ==와 != μ—°μ‚°μžλŠ” λ‚΄λΆ€μ˜ 값을 λΉ„κ΅ν•˜λŠ” 것이 μ•„λ‹ˆλΌ 객체의 μ°Έμ‘°λ₯Ό λΉ„κ΅ν•˜λŠ” 것이기 λ•Œλ¬Έμž„.
λ‚΄λΆ€μ˜ κ°’λ§Œ 비ꡐ할 것이라면 μ–Έλ°•μ‹±ν•œ 뒀에 μ–Έλ°•μ‹± 값을 μ–»μ–΄μ„œ 비ꡐ해야함.

😊Math 클래슀

μˆ˜ν•™ 계산에 μ‚¬μš© ν•  수 μžˆλŠ” λ©”μ†Œλ“œλ₯Ό μ œκ³΅ν•¨. Math 클래슀 λ‚΄λΆ€ λ©”μ†Œλ“œλŠ” μ „λΆ€λ‹€ 정적 λ©”μ†Œλ“œμž„.
🍧Math.random() λ©”μ†Œλ“œ
Math.random()λ©”μ†Œλ“œλŠ” 0.0 <= Math.random() < 1.0 μ‚¬μ΄μ˜ λ²”μœ„μ— μ†ν•˜λŠ” ν•˜λ‚˜μ˜ double νƒ€μž…μ˜ 값을 리턴함.
μ£Όμ‚¬μœ„ 번호 뽑기 λ‚œμˆ˜ 생성
int num = (int) (Math.random() * 6) + 1; 
둜또 번호 뽑기 λ‚œμˆ˜ 생성
int num = (int) (Math.random() * 45) + 1;

0개의 λŒ“κΈ€