μλ°μ μ₯λ¨μ
μ₯μ
- JVMμ ν΅ν΄ λ€μν νλ«νΌμμ μ€ν κ°λ₯νλ€. (νλ«νΌ λ 립μ±)
- κ°μ²΄ μ§ν₯ μΈμ΄λ‘ κ°μ²΄ μ§ν₯ νλ‘κ·Έλ¨μ ν΅ν΄ λͺ¨λν, μ μ§λ³΄μμ±, μ¬μ¬μ©μ± ν₯μ.
- κ°λΉμ§ 컬λ μ μΌλ‘ λ©λͺ¨λ¦¬ λμ λ°©μ§
- λ©ν°μ€λ λ©μ μ§μν΄ λμμ± νλ‘κ·Έλλ°μ΄ μ©μ΄νλ€.
- ν΄λμ€λ‘λμ μν΄ λμ λ‘λ©μ μ§μν΄μ μ€ν μ λͺ¨λ κ°μ²΄λ₯Ό μμ±νμ§ μκ³ , νμν μμ μ ν΄λμ€λ₯Ό μμ±νλ€.
λ¨μ
- λ€μ΄ν°λΈ μ½λμ λΉν΄ μλμ μΌλ‘ λ리λ€.
- JVM μ¬μ©μΌλ‘ μΈν μΆκ°μ μΈ λ©λͺ¨λ¦¬ μλΉ
JDK, JRE, JVMμ μ°¨μ΄λ?
JDK(Java Development Kit)
Java νλ‘κ·Έλ¨μ κ°λ°νκ³ μ€ννκΈ° μν λꡬμ λͺ¨μ. JREμ κ°λ°λꡬ(javac, java, javadoc...)μ ν¬ν¨.
JRE(Java Runtime Environment)
Java νλ‘κ·Έλ¨μ μ€ννκΈ° μν νκ²½. JVMκ³Ό ν΅μ¬ λΌμ΄λΈλ¬λ¦¬λ±μ ν¬ν¨.
JVM(Java Virtual Machine)
Java λ°μ΄νΈμ½λλ₯Ό μ€ννλ κ°μ₯ λ¨Έμ . νλ«νΌ λ
립μ±μ μ 곡νμ¬ λ©λͺ¨λ¦¬ κ΄λ¦¬μ κ°λΉμ§ 컬λ μ
μ λ΄λΉν¨.
JAVAμ μ€ν κ³Όμ
1. μ½λ μμ± (.javaνμΌ)
2. μ»΄νμΌ : λ°μ΄νΈμ½λ(.classνμΌ)
3. ν΄λμ€ λ‘λ© : JVMμΌλ‘ λ°μ΄νΈμ½λ λ‘λ©
4. λ°μ΄νΈμ½λ κ²μ¦ : λ°μ΄νΈμ½λ μ ν¨μ± κ²μ¦
5. ν΄μ : λ°μ΄νΈμ½λμμ κΈ°κ³μ΄λ‘ λ³ν
6. μ€ν : JVM μΈν°ν리ν°κ° κΈ°κ³μ΄ μ½λ μ€ν
μ»΄νμΌλ¬μ μΈν°ν리ν°μ μ°¨μ΄?
- μ»΄νμΌλ¬μ μΈν°νλ¦¬ν° λͺ¨λ νλ‘κ·Έλλ° μΈμ΄μ μμ€ μ½λλ₯Ό μ€ν κ°λ₯ν ννλ‘ λ°κΎΈλ λꡬμ΄μ§λ§, λμ λ°©μμ μμ΄ μ°¨μ΄κ° μμ΅λλ€.
- μ»΄νμΌλ¬(Compiler)
- μμ€ μ½λλ₯Ό μμ±ν ν μ»΄νμΌλ¬λ₯Ό μ΄μ©ν΄ μ»΄νμΌ κ³Όμ μ κ±°μΉ©λλ€.
- μ»΄νμΌλ¬λ μ 체 μμ€ μ½λλ₯Ό λΆμνμ¬ κΈ°κ³μ΄ μ½λλ‘ λ³ννκ³ , μ€ν νμΌμ μμ±ν©λλ€.
- μμ±λ μ€ν νμΌμ μ€ννμ¬ νλ‘κ·Έλ¨μ λμμν΅λλ€.
- μ₯μ
- μ΄λ―Έ κΈ°κ³μ΄λ‘ λ²μλ μνμ΄λ―λ‘ μ€ν μ μΆκ°μ μΈ λ²μ κ³Όμ μ΄ νμ μλ€.
- μ΅μ νλ κΈ°κ³μ΄ μ½λλ₯Ό μμ±νκΈ° λλ¬Έμ μ±λ₯μ λμΌ μ μλ€.
- λ¨μ
- μμ€μ½λκ° λ³κ²½λλ©΄ λ€μ μ»΄νμΌν΄μΌ νλ€.
- μΈν°ν리ν°(Interpreter)
- μμ€μ½λλ₯Ό ν μ€μ© μ½κ³ μ¦μ μ€ννλ€. λ²μκ³Ό μ€νμ΄ λμμ μ΄λ£¨μ΄μ§λ€.
- μ₯μ
- λλ²κΉ κ³Ό ν μ€ν μ΄ μ½λ€.
- μμ€μ½λλ₯Ό μμ ν μ¦μ μ€ννμ¬ κ²°κ³Όλ₯Ό νμΈν μ μλ€.
- λ¨μ
- λ§€ μ€νλ§λ€ μμ€μ½λλ₯Ό ν΄μν΄μΌ νκΈ° λλ¬Έμ μ€νμλκ° λ립λλ€.
κ·Έλ λ€λ©΄ μλ°λ??
μλ°λ μ»΄νμΌμΈμ΄ μ΄λ©΄μ μΈν°νλ¦¬ν° μΈμ΄μ νΉμ§μ λͺ¨λ κ°μΆ νμ΄λΈλ¦¬λ μΈμ΄λΌκ³ ν μ μλ€.
1. μ»΄νμΌ λ¨κ³
.javaνμΌμ μλ° μ»΄νμΌλ¬(javac)μ μν΄ λ°μ΄νΈμ½λ(.class)νμΌλ‘ μ»΄νμΌλλ€.
2. μΈν°νλ¦¬ν° λ¨κ³
μμ±λ λ°μ΄νΈμ½λλ JVMμ μν΄ μ€νλλ€. JVMμ μΈν°ν리ν°λ λ°μ΄νΈμ½λλ₯Ό ν μ€μ© μ½κ³ κΈ°κ³μ΄λ₯Ό λ³ννμ¬ μ¦μ μ€ννλ€.
* JIT μ»΄νμΌ
μλ°λ Just-In-Time(JIT) μ»΄νμΌλ¬λ₯Ό μ¬μ©νμ¬ μ€νμλλ₯Ό λμΈλ€. JIT μ»΄νμΌλ¬λ μμ£Ό μ¬μ©λλ λ°μ΄νΈ μ½λλ₯Ό κΈ°κ³μ΄λ‘ λ³ννμ¬ μΊμ±μ ν΄ λμ λμΌ μ½λ μ€νλ μ ν΄μ μμ΄ λΉ λ₯΄κ² μ€νν μ μλ€.
-> JIT μ»΄νμΌλ¬λ₯Ό ν΅ν΄ μλ°λ μ€ν μ±λ₯μ λμΈλ€!!
String, StringBuilder, StringBufferμ μ°¨μ΄
μ λͺ¨λ μλ°μμ λ¬Έμμ΄μ λ€λ£¨κΈ° μν ν΄λμ€μ΄μ§λ§ μ©λμ νΉμ±μλ μ°¨μ΄μ μ΄ μλ€.
- String
- Stringκ°μ²΄λ λΆλ³(immutable)μ΄λ€. ν λ² μμ±λ 'String' κ°μ²΄λ κ·Έ κ°μ λ³κ²½ν μ μλ€.
- λ¬Έμμ΄μ λ³κ²½νκ² λλ©΄ μλ‘μ΄ 'String' κ°μ²΄κ° μμ±λλ€.
- λ¬Έμμ΄μ μμ£Ό λ³κ²½νμ§ μλ μμ λ¬Έμμ΄, λ¬Έμμ΄ λ¦¬ν°λ΄, λ‘κ·Έ λ©μμ§ λ±μ μ ν©νλ€.
- StringBuilder
- StringBuilder κ°μ²΄λ κ°λ³μ΄λ€. κ°μ²΄κ° μμ±λ νμλ κ·Έ κ°μ λ³κ²½ν μ μλ€.
- StringBuilderλ λκΈ°νλ₯Ό μ§μνμ§ μμ μ€λ λ μΈμ΄ν νμ§ μλ€.
- λκΈ°νκ° νμ μλ λ¨μΌ μ€λ λ νκ²½μμ λ¬Έμμ΄μ μμ£Ό λ³κ²½ν΄μΌ ν λ μ ν©νλ€.
- StringBuffer
- StringBufferλ κ°λ³μ΄λ€. κ°μ λ³κ²½ν μ μλ€.
- StringBufferλ λκΈ°νλ₯Ό μ§μνλ€. λ©ν° μ€λ λ νκ²½μλ μμ νκ² μ¬μ©ν μ μλ€.
- λκΈ°νλ₯Ό μ 곡νκΈ° λλ¬Έμ StringBuilder보λ€λ λ리μ§λ§, λ©ν°μ€λ λ νκ²½μμ μμ νκ² μ¬μ©κ°λ₯νλ€.
StirngBuffer ν΄λμ€μ μ£Όμ λ©μλλ€μ synchronized ν€μλλ₯Ό μ¬μ©νμ¬ λκΈ°νλμ΄ μλ€.
Synchronized ν€μλκ° λΆμ λ©μλλ ν΄λΉ λ©μλκ° νΈμΆλ λ κ°μ²΄μ λͺ¨λν° λ½(Monitor Lock)μ νλνλ€.
λ€λ₯Έ μ€λ λκ° λμΌν κ°μ²΄μ λ€λ₯Έ λκΈ°νλ λ©μλλ₯Ό νΈμΆνλ €λ©΄ νμ¬ λ©μλκ° μ€νμ μλ£νκ³ λ½μ ν΄μ ν λκΉμ§ λκΈ°ν΄μΌ νλ€.
μ€λ λ μΈμ΄νλ?
- μ¬λ¬ μ€λ λκ° λμμ μ κ·Όνκ±°λ μμ ν λ, λ°μ΄ν°μ μΌκ΄μ±κ³Ό μ νμ±μ 보μ₯ν μ μλλ‘ νλ‘κ·Έλ¨μ΄λ μ½λλ₯Ό μλ―Ένλ€.
- μ€λ λ μΈμ΄νν μ½λλ λμμ± λ¬Έμ λ₯Ό νΌνκΈ° μν΄ νΉμ λ©μ»€λμ¦μ μ¬μ©ν΄ λ°μ΄ν° μΌκ΄μ±μ μ μ§νλ€.
- λκΈ°ν(Synchronization)
- λ½(Lock)
- μμμ±(Atomicity)
- λΆλ³ κ°μ²΄
- μ€λ λ-λ‘컬 λ³μ
- λ©ν°μ€λ λ νκ²½μμ μ€λ λ μΈμ΄ν νμ§ λͺ»νλ©΄ Race Condition μνκ° λ°μν μ μλ€. μ€λ λ μΈμ΄νλ μ΄λ¬ν λ¬Έμ λ₯Ό λ°©μ§νμ¬ νλ‘κ·Έλ¨μ΄ μ¬λ°λ₯΄κ² λμνλλ‘ νλ€.
κ°μ²΄μ§ν₯μ΄λ?
νλ‘κ·Έλ¨μ κ°μ²΄μ μ§ν©μΌλ‘ λ³΄κ³ , κ°μ²΄ κ°μ μνΈμμ©μ ν΅ν΄ νλ‘κ·Έλλ°μ μ€κ³νκ³ κ΅¬ννλ νλ‘κ·Έλλ° ν¨λ¬λ€μ.
κ°μ²΄μ§ν₯ 4κ°μ§ νΉμ§
1. μΆμν
- λΆνμν μ 보λ μ¨κΈ°κ³ μ€μν μ λ³΄λ§ ννν¨μΌλ‘ 곡λμ μμ±μ΄λ κΈ°λ₯μ λ¬Άμ΄ μ΄λ¦μ λΆμΈλ€.
2. μΊ‘μν
- μνμ νμλ₯Ό ν΄λμ€λΌλ μΊ‘μμ λ΄ν λͺ¨λν ν¨
3. μμ
- λΆλͺ¨ ν΄λμ€μ μμ±κ³Ό κΈ°λ₯μ μ΄μ΄λ°μ μ¬μ©
- κΈ°λ₯μ μμ νκ³ μΆμ λ μ€λ²λΌμ΄λ©μ μ¬μ©
4. λ€νμ±
- νλμ λ©μλλ ν΄λμ€κ° μ¬λ¬ ννλ₯Ό κ°μ§ μ μλ κ²μ λ§ν¨.
- λ€νμ±μ μ£Όλ‘ λ©μλ μ€λ²λ‘λ©(overloading)κ³Ό λ©μλ μ€λ²λΌμ΄λ©(Overriding)μΌλ‘ ꡬν
OOPμ 5κ°μ§ μμΉ(SOLID)
- Single Responsibility Principle (SRP, λ¨μΌ μ±
μμ μμΉ)
- κ° ν΄λμ€λ νλμ κΈ°λ₯μ΄λ μν λ§ λ΄λΉνμ¬μΌ νλ€. (μ½λμ μ μ§ λ³΄μμ ν μ€νΈκ° μ¬μμ§)
- Open/Closed Principle (OCP, κ°λ°©-νμ μμΉ)
- κΈ°μ‘΄ μ½λλ₯Ό λ³κ²½νμ§ μκ³ λ κΈ°λ₯μ νμ₯ν μ μμ΄μΌ ν¨.
- μ£Όλ‘ μμκ³Ό μΈν°νμ΄μ€λ₯Ό ν΅ν΄ μ΄λ£¨μ΄μ§λ€.
- Liskov Substitution Principle (LSP, 리μ€μ½ν μΉν μμΉ)
- μμ ν΄λμ€λ λΆλͺ¨ ν΄λμ€μ κΈ°λ₯μ λ체ν΄λ, νλ‘κ·Έλ¨μ μ νμ±μ΄ 보μ₯λμ΄μΌ νλ€.
- Interface Segregation Principle (ISP, μΈν°νμ΄μ€ λΆλ¦¬ μμΉ)
- νλμ μΌλ°μ μΈ μΈν°νμ΄μ€λ³΄λ€ μ¬λ¬ κ°μ ꡬ체μ μΈ μΈν°νμ΄μ€λ₯Ό μ¬μ©νμ¬ ν΄λΌμ΄μΈνΈκ° λΆνμν λ©μλμ μμ‘΄νμ§ μλλ‘ ν΄μΌνλ€.
- Dependency Inversion Principle (DIP, μμ‘΄μ± μμ μμΉ)
- ꡬ체μ μΈ κ΅¬νμ΄ μλ, μΆμνλ μΈν°νμ΄μ€λ μΆμ ν΄λμ€μ μμ‘΄νκ² νμ¬ μ μ°μ±κ³Ό νμ₯μ±μ λμΈλ€.
CμΈμ΄μ Javaμ μ°¨μ΄μ
- CμΈμ΄
- μ μ°¨μ§ν₯, ꡬ쑰μ νλ‘κ·Έλλ°.
- μμ°¨μ νλ‘κ·Έλλ°μ΄λ€.
- μμ μμλλ‘ μ½λ©νλ€.
- λ©λͺ¨λ¦¬λ₯Ό κ°λ°μκ° μ§μ κ΄λ¦¬νλ€.
- λ€μ΄ν°λΈ κΈ°κ³μ΄λ‘ μ»΄νμΌ λμ΄ νλ«νΌ μ’ μμ μ΄λ€.
- Java
- κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°
- λͺ¨λ κ²μ ν΄λμ€μ κ°μ²΄λ‘ ꡬμ±λμ΄ μλ€.
- λ©λͺ¨λ¦¬λ₯Ό μλμΌλ‘ κ΄λ¦¬νκΈ° μν κ°λΉμ§ 컬λ μ μ΄ μλ€.
- λ°μ΄νΈμ½λλ‘ μ»΄νμΌ λν JVM μμ μ€νλμ΄ νλ«νΌ λ 립μ μ΄λ€.
ν΄λμ€, κ°μ²΄, μΈμ€ν΄μ€μ μ°¨μ΄?
- ν΄λμ€(Class)
- κ°μ²΄λ₯Ό μμ±νκΈ° μν μ€κ³λ.
- ν΄λμ€λ κ°μ²΄κ° κ°μ ΈμΌν λ°μ΄ν° νλμ λ©μλλ₯Ό μ μνλ€.
- κ°μ²΄(Object)
- ν΄λμ€λ₯Ό κΈ°λ°μΌλ‘ μμ±λ μ€μ μΈμ€ν΄μ€.
- ν΄λμ€λ₯Ό ν΅ν΄ μ μλλ μμ±κ³Ό λ©μλλ₯Ό μ€μ λ‘ κ°μ§κ³ μμΌλ©°, ν΄λμ€λ₯Ό ν΅ν΄ μ μλ λλ‘ λμν¨.
- ν΄λμ€μ μ€μ²΄νλ νν
- μΈμ€ν΄μ€(Instance)
- μΈμ€ν΄μ€λ ν΄λμ€μ ꡬ체μ μΈ κ΅¬ν체λ₯Ό μ§μΉνλ μ©μ΄.
- κ°μ²΄λ ν΄λμ€μ μΈμ€ν΄μ€.
μ€λ²λΌμ΄λ©κ³Ό μ€λ²λ‘λ©
- μ€λ²λΌμ΄λ© (Overriding)
- μμ ν΄λμ€μμ μ μλ λ§€μλλ₯Ό νμ ν΄λμ€μμ μ¬μ μ νλκ²μ μλ―Έ.
- μμ ν΄λμ€μ λ©μλλ₯Ό νμ ν΄λμ€μμ λ€λ₯Έ λμμ νλλ‘ λ³κ²½ν μ μλ€.
- νΉμ§
- λ©μλμ μ΄λ¦, λ§€κ°λ³μ λͺ©λ‘, λ°ν νμ μ΄ λͺ¨λ λμΌν΄μΌ ν¨.
- μ κ·Ό μ μ΄μλ λ λμ λ²μλ‘ λ³κ²½ κ°λ₯, μ’μ λ²μλ λΆκ°λ₯
- λ©μλμ μ¬μ©λ μμΈλ λ μ κ±°λ νμ μμΈλ‘ λ³κ²½ κ°λ₯
- @Override μ λν μ΄μ μ μ¬μ©ν΄ λͺ μμ μΌλ‘ νμνλ κ²μ΄ μ’μ
Class Animal {
void makeSound(){
System.out.println("Animal makes a sound!");
}
}
class Dog extends Animal{
@Override
void makeSound(){
System.out.println("Dog BARKS!!");
}
}
public class Main{
public static void main(String[] args){
Animal myDog = new Dog();
myDog.makeSound(); //Dog BARKS!!
}
}
- μ€λ²λ‘λ©(Overloading)
- μ€λ²λ‘λ©μ κ°μ μ΄λ¦ λ©μλλ₯Ό μ¬λ¬κ° μ μνμ§λ§, λ§€κ° λ³μμ λͺ©λ‘μ΄ λ€λ₯΄κ² νλ κ²μ μλ―Ένλ€.
- λ©μλμ μ΄λ¦μ μ¬μ¬μ©νλ©΄μ μλ‘ λ€λ₯Έ μΈμλ₯Ό μ²λ¦¬ν μ μλ€.
- νΉμ§
- λ§€μλμ μ΄λ¦μ κ°μ§λ§, λ§€κ° λ³μμ μλ νμ μ λ¬λΌμΌ ν¨.
- λ°ν νμ μ λ¬λΌλ λμ§λ§, μ€λ²λ‘λ©μ κ²°μ μ§λ μμλ μλ
- μ κ·Ό μ μ΄μμ μμΈλ μκ΄ μμ
class MathUtils {
int add(int a, int b) {
return a + b;
}
double add(double a, double b) {
return a + b;
}
int add(int a, int b, int c) {
return a + b + c;
}
}
public class Main {
public static void main(String[] args) {
MathUtils utils = new MathUtils();
System.out.println(utils.add(1, 2)); // 3
System.out.println(utils.add(1.5, 2.5)); // 4.0
System.out.println(utils.add(1, 2, 3)); // 6
}
}
Javaμμ λ€μ€ μμμ νμ©νμ§ μλ μ΄μ λ?
κ°μ μ΄λ¦μ λ©μλλ₯Ό κ°μ§ λ ν΄λμ€μκ² μμλ°λ ν΄λμ€κ° μλ κ²½μ° μ΄ ν΄λμ€λ μ΄λ€ ν΄λμ€μ λ©μλλ₯Ό μ¬μ©ν΄μΌν μ§ λͺ¨νΈνμ¬ μΆ©λμ΄ λ°μνλ€.
Javaμμλ μΈν°νμ΄μ€λ₯Ό μ¬μ©νμ¬ λ€μ€ μμμ κΈ°λ₯μ ꡬννλ€. (λ©μλλ₯Ό λ°λ‘ μμ±ν΄ μ£Όλ―λ‘ λ¬Έμ κ° λ°μνμ§ μλλ€. )
μΈν°νμ΄μ€μ μΆμ ν΄λμ€
λ κ°λ λͺ¨λ ν΄λμ€μ κ°μ²΄μ νλμ μ μνλλ° μ¬μ©λλ€.
- μΈν°νμ΄μ€(Interface)
- μΈν°νμ΄μ€λ ν΄λμ€κ° ꡬνν΄μΌ νλ λ©μλμ μκ·Έλμ²λ§μ μ μνλ ꡬ쑰μ΄λ€.
- μΈν°νμ΄μ€λ₯Ό ꡬννλ ν΄λμ€λ μΈν°νμ΄μ€μ μ μλ λͺ¨λ λ©μλλ₯Ό ꡬνν΄μΌ νλ€.
- νΉμ§
- λͺ¨λ λ©μλλ κΈ°λ³Έμ μΌλ‘ μΆμ λ©μλμ΄λ©° ꡬνμ΄ μλ€.
- νλλ μλμ μΌλ‘ public static finalμ΄λ€.
- ν΄λμ€λ μ¬λ¬ μΈν°νμ΄μ€ ꡬν κ°λ₯(λ€μ€ μμμ νν)
interface Animal {
void eat();
void sleep();
}
class Dog implements Animal {
public void eat() {
System.out.println("Dog eats");
}
public void sleep() {
System.out.println("Dog sleeps");
}
}
- μΆμ ν΄λμ€(Abstract Class)
- μΆμ ν΄λμ€λ νλ μ΄μμ μΆμ λ©μλ(ꡬνμ΄ μλ λ©μλ)λ₯Ό ν¬ν¨ν μ μμΌλ©°, μΌλΆ λ©μλλ ꡬνμ΄ ν¬ν¨λ μ μλ€.
- μΆμ ν΄λμ€λ μΈμ€ν΄μ€νλ μ μμΌλ©°, μ΄λ₯Ό μμνλ μλΈν΄λμ€λ μΆμ λ©μλλ₯Ό ꡬνν΄μΌ ν¨.
- νΉμ§
- μΆμ λ©μλμ μΌλ° λ©μλλ₯Ό λͺ¨λ κ°μ§ μ μλ€.
- νλ, λ©μλ, μμ±μ ν¬ν¨ κ°λ₯
- λ¨μΌ μμλ§μ΄ κ°λ₯(ν ν΄λμ€λ νλμ μΆμ ν΄λμ€λ§ μμ λ°μ μ μλ€.)
abstract class Animal {
abstract void eat();
abstract void sleep();
void breathe() {
System.out.println("Animal breathes");
}
}
class Dog extends Animal {
void eat() {
System.out.println("Dog eats");
}
void sleep() {
System.out.println("Dog sleeps");
}
}
- μΈν°νμ΄μ€λ ν΄λμ€κ° ꡬνν΄μΌ νλ νλμ κ³μ½μ μ μν λ μ¬μ©ν©λλ€. μλ₯Ό λ€μ΄, μ¬λ¬ ν΄λμ€κ° νΉμ κΈ°λ₯μ λ°λμ ꡬνν΄μΌ νλ κ²½μ° μΈν°νμ΄μ€λ₯Ό μ¬μ©ν©λλ€.
- μΆμ ν΄λμ€λ μμμ ν΅ν΄ 곡ν΅λ νλμ 곡μ νλ©΄μ, μΌλΆλ μλΈν΄λμ€κ° ꡬ체μ μΌλ‘ ꡬννλλ‘ ν λ μ¬μ©ν©λλ€. 곡ν΅λ κΈ°λ₯κ³Ό μνλ₯Ό μμλ°μΌλ©΄μ, νΉμ λ©μλλ μλΈν΄λμ€λ§λ€ λ€λ₯΄κ² ꡬνλ λ μ ν©ν©λλ€.
- μΈν°νμ΄μ€λ νμ₯μ κ΄λ ¨λμ΄ μκ³ , μΆμ ν΄λμ€λ 곡ν΅λ λΆλΆμ λ¬Άλλ° λ§μ΄ μ¬μ©λλ€.
Garbage Collectorλ?
κ°λΉμ§ 컬λ ν°λ Javaμμ μλμΌλ‘ λ©λͺ¨λ¦¬λ₯Ό κ΄λ¦¬νλ μμ€ν
μ΄λ€.
νλ‘κ·Έλ¨μμ λ μ΄μ μ¬μ©λμ§ μλ κ°μ²΄λ₯Ό μλμΌλ‘ μλ³νκ³ μ κ±°νμ¬ λ©λͺ¨λ¦¬ λμλ₯Ό λ°©μ§νκ³ , νλ‘κ·Έλ¨μ ν¨μ¨μ μΈ μ€νμ 보μ₯νλ€.
κ°λΉμ§ 컬λ ν°μ μλ μ리
- λ§ν¬(Mark) : λͺ¨λ κ°μ²΄λ₯Ό νμνμ¬ κ° κ°μ²΄κ° μ¬μ ν μ°Έμ‘°λκ³ μλμ§ νμΈ. μ°Έμ‘°λκ³ μλ κ°μ²΄λ "λ§ν¬"νμ
- μ€μ(sweep) : λ§ν¬λμ§ μμ(λ μ΄μ μ°Έμ‘°λμ§ μλ)κ°μ²΄λ₯Ό λ©λͺ¨λ¦¬μμ μ κ±°
- μμΆ(Compaction) : μ νμ¬ν, λ©λͺ¨λ¦¬ ννΈμ μ€μ΄κΈ° μν΄μ λ¨μμλ κ°μ²΄λ₯Ό νμͺ½μΌλ‘ λͺ¨μ
Java Reflection μ΄λ?
ꡬ체μ μΈ ν΄λμ€ νμ
μ μμ§ λͺ»ν΄λ ν΄λμ€μ λ©μλ, νμ
, λ³μλ€μ μ κ·Όν μ μκ² ν΄μ£Όλ μλ° apiμ΄λ€.
μλ° λ¦¬νλ μ
μ κ°μ²΄λ₯Ό ν΅ν΄ ν΄λμ€μ μ 보λ₯Ό λΆμνμ¬ λ°νμμ ν΄λμ€μ λμμ κ²μ¬νκ±°λ μ‘°μκ°λ₯νλ€.
ν΄λμ€ νμΌμ μμΉλ μ΄λ¦λ§ μλ€λ©΄ ν΄λΉ ν΄λμ€μ μ 보λ₯Ό μ»μ΄λ΄κ³ , κ°μ²΄λ₯Ό μμ±νλ κ²μ΄ κ°λ₯ν΄ μ μ°ν νλ‘κ·Έλλ°μ΄ κ°λ₯νλ€.
리νλ μ
μ μ£Όλ‘ νλ μμν¬ λΌμ΄λΈλ¬λ¦¬μμ λ§μ΄ μ¬μ©λλ©° λνμ μΌλ‘ μ€νλ§μ DIκ° μλ€.
Genericsλ?
μ λ€λ¦μ μλ°μμ λ°μ΄ν°νμ μ μΌλ°ννμ¬ μ½λμ μ¬μ¬μ©μ±μ λμ΄κ³ , μ»΄νμΌ μ μμ μ±μ 보μ₯νκΈ° μν κΈ°λ₯μ΄λ€. μ λ€λ¦μ μ¬μ©νλ©΄ μΈν°νμ΄μ€, λ©μλμμ μ¬μ©ν λ°μ΄ν° νμ μ μΌλ°ννμ¬ νΉμ νμ μ μμ‘΄νμ§ μκ³ λ€μν λ°μ΄ν° νμ μ μ¬μ©ν μ μλ€.
public class Box<T> {
private T value;
public void set(T value){
this.value = value;
}
public T get() {
return value;
}
}
public static void main(String[] args){
Box<String> stringBox = new Box<>();
stringBox.set("HELLO WORLD!");
System.out.println(stringBox.get());
Box<Integer> integerBox = new Box<>();
intergerBox.set(1234);
System.out.println(integerBox.get());
}
μ»΄νμΌ κ³Όμ μμ κ°μ²΄μ νμ
μ 체ν¬νμ¬ λ£μ΄μ€λ€.
κ°μ²΄μ μμ μ±μ λμ΄κ³ ν λ³νμ λ²κ±°λ‘μμ μ€μ¬μ€λ€.
Javaμ μ κ·Ό μ μ΄μ
μ κ·Ό μ μ΄μλ ν΄λμ€, λ©μλ, νλλ±μ μ κ·Ό κΆνμ μ€μ νμ¬ λ°μ΄ν°μ μΊ‘μνμ 보νΈλ₯Ό λλ μν μ νλ€.
- public
- λͺ¨λ ν΄λμ€μμ μ κ·Όν μ μλ€.
- protected
- κ°μ ν¨ν€μ§ λ΄μ ν΄λμ€μ μμλ°μ νμ ν΄λμ€μμ μ κ·Όν μ μλ€.
- default
- μ κ·Όμ μ΄μλ₯Ό λͺ μνμ§ μμ μ κΈ°λ³Έμ μΌλ‘ μ μ©λ¨. κ°μ ν¨ν€μ§μ ν΄λμ€μμλ§ μ κ·Ό κ°λ₯νλ€.
- private
- κ°μ ν΄λμ€ λ΄μμλ§ μ κ·Ό κ°λ₯νλ€.
μ κ·Ό μ μ΄μ | λμΌ ν΄λμ€ | λμΌ ν¨ν€μ§ | μμλ°μ νμ ν΄λμ€ | λͺ¨λ ν΄λμ€ |
public | O | O | O | O |
protected | O | O | O | X |
default | O | O | X | X |
private | O | X | X | X |
final
μλ°μμ final ν€μλλ νΉμ μμλ₯Ό μμ ν μ μλλ‘ νκΈ° μν΄ μ¬μ©λλ€.
- final ν΄λμ€
- final ν΄λμ€λ₯Ό μ μΈνλ©΄ λ€λ₯Έ ν΄λμ€μμ μ΄λ₯Ό μμν μ μλ€.
- final λ©μλ
- final λ©μλλ₯Ό μ μΈνλ©΄ μ΄ λ©μλλ₯Ό νμ λ©μλμμ μ€λ²λΌμ΄λν μ μλ€.
- final λ³μ
- final λ³μλ₯Ό μ μΈνλ©΄ ν΄λΉ λ³μμ κ°μ ν λ²λ§ ν λΉν μ μλ€.
μλ°μ μ€λ λ
μ€λ λλ νλ‘μΈμ€ λ΄μμ μ€νλλ μ΅μ μμ
λ¨μμ΄λ€. κ° μ€λ λλ λ
립μ μΈ μμ
μ μνν μ μμΌλ©°, μμμ ν¨μ¨μ μΈ μ¬μ©κ³Ό
λ³λ ¬μ²λ¦¬λ₯Ό κ°λ₯νκ² νλ€.
μλ°μμλ λ κ°μ§ λ°©λ²μΌλ‘ μ€λ λλ₯Ό μμ±ν μ μλ€.
1. Thread ν΄λμ€ μμ
2. Runnable μΈν°νμ΄μ€ ꡬν
Call by Value VS Call by Reference
λ κ°μ§ λͺ¨λ ν¨μμ μΈμλ₯Ό μ λ¬νλ μ£Όμ λ°©λ²μ΄λ€.
- Call by Value
- ν¨μ νΈμΆ μ μΈμμ κ°μ 볡μ¬νμ¬ ν¨μμ μ λ¬νλ λ°©μ
- ν¨μ λ΄μμ μΈμλ₯Ό μμ ν΄λ μΈμμλ μν₯μ λ―ΈμΉμ§ μλλ€.
- κΈ°λ³Έ νμ μ κ°μ΄ 볡μ¬λλ©°, μ°Έμ‘°νμ κ°μ΄ 볡μ¬λμ§λ§ μ°Έμ‘° μ체λ λ³κ²½ν μ μλ€.
public class CallByValueExample {
public static void main(String[] args) {
int a = 10;
modifyPrimitive(a);
System.out.println("Value of a after modifyPrimitive: " + a); // μΆλ ₯: 10
MyClass obj = new MyClass();
obj.value = 20;
modifyObject(obj);
System.out.println("Value of obj.value after modifyObject: " + obj.value); // μΆλ ₯: 30
}
public static void modifyPrimitive(int num) {
num = 50;
}
public static void modifyObject(MyClass obj) {
obj.value = 30;
}
}
class MyClass {
int value;
}
- Call by Reference
- ν¨μ νΈμΆ μ μΈμμ μ£Όμλ₯Ό μ§μ μ λ¬νλ λ°©μ
- ν¨μ λ΄μμ μΈμλ₯Ό μμ νλ©΄ νΈμΆμμ μΈμλ λ³κ²½λλ€.
public class CallByReferenceExample {
public static void main(String[] args) {
MyClass obj = new MyClass();
obj.value = 20;
modifyObject(obj);
System.out.println("Value of obj.value after modifyObject: " + obj.value); // μΆλ ₯: 30
}
public static void modifyObject(MyClass obj) {
obj.value = 30; // κ°μ²΄μ μνλ₯Ό μμ ν μ μμ΅λλ€.
obj = new MyClass(); // μλ‘μ΄ κ°μ²΄λ₯Ό ν λΉν΄λ νΈμΆμμ objλ λ³κ²½λμ§ μμ΅λλ€.
obj.value = 40;
}
}
class MyClass {
int value;
}
μλ°μμλ κ°μ²΄μ μ°Έμ‘°λ₯Ό κ°μΌλ‘ μ λ¬νκΈ° λλ¬Έμ κ°μ²΄μ μνλ₯Ό μμ ν μ μμ§λ§, κ°μ²΄ μ체μ μ°Έμ‘°λ₯Ό λ³κ²½ν μ μλ€.
HashMap vs HashTable vs ConcurrentHashMap?
- HashMap
- κ°μ₯ λ리 μ¬μ©λλ ν΄μ κΈ°λ°μ λ§΅
- ν€-κ°μ μ μ₯νλ©°, λͺ¨λ nullμ νμ©νλ€.
- λκΈ°νλμ§ μμΌλ―λ‘ λ©ν°μ€λ λ νκ²½μμ μ€λ λ μΈμ΄ν νμ§ μλ€.
- HashTable
- λ©μλκ° λκΈ°νλμ΄ μμ΄ μ€λ λ μμ μ±μ 보μ₯νλ€.
- nullκ°μ νμ©νμ§ μλλ€.
- ConcurrentHashMap
- μ€λ λ μμ μ±μ 보μ₯νλ©΄μλ λμ μ±λ₯μ μ μ§νλ€
- nullκ°μ νμ©νμ§ μλλ€.
'πCS-λ©΄μ ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
κΈ°μ λ©΄μ μ€λΉνκΈ° - μλ£κ΅¬μ‘° (0) | 2024.07.31 |
---|---|
κΈ°μ λ©΄μ μ€λΉνκΈ° - μ΄μ체μ (0) | 2024.07.31 |
κΈ°μ λ©΄μ μ€λΉνκΈ° - μΉ / λ€νΈμν¬ (0) | 2024.07.29 |
κΈ°μ λ©΄μ μ€λΉνκΈ° - λ°μ΄ν°λ² μ΄μ€ (0) | 2024.07.29 |
κΈ°μ λ©΄μ μ€λΉνκΈ° - Spring/SpringBoot (0) | 2024.07.27 |