ν°μ€ν 리 λ·°
π μμ
: κΈ°μ‘΄ ν΄λμ€λ₯Ό μ¬μ¬μ©νμ¬ μλ‘μ΄ ν΄λμ€λ₯Ό μμ±νλ κ²
: (+) μ½λ μ¬μ¬μ©μ±↑, νλ‘κ·Έλ¨ μμ°μ±↑, μ μ§λ³΄μππ»
: extends ν€μλ μ¬μ©
class Child extends Parent { ... }
: μμ±μμ μ΄κΈ°ν λΈλμ μμX
: Object ν΄λμ€λ λͺ¨λ ν΄λμ€μ μ‘°μ
β μλ°λ λ¨μΌ μμλ§ μ§μ (λͺ λ£νκ³ μ λ’°μ± μλ μ½λλ₯Ό μ 곡νκΈ° μν΄)
βοΈ ν΄λμ€κ°μ κ΄κ³
1οΈβ£ μμκ΄κ³(is-a)
2οΈβ£ ν¬ν¨κ΄κ³(has-a) : ν ν΄λμ€μ λ©€λ²λ³μλ‘ λ€λ₯Έ ν΄λμ€ νμ μ μ°Έμ‘°λ³μλ₯Ό μ μΈνλ κ²
π μ€λ²λΌμ΄λ©
: μ‘°μ ν΄λμ€λ‘λΆν° μμλ°μ λ©μλμ λ΄μ©μ λ³κ²½νλ κ²
βοΈ μ€λ²λΌμ΄λ© 쑰건
1οΈβ£ μ‘°μ ν΄λμ€μ μ μΈλΆ(λ©μλλͺ , λ§€κ°λ³μ, λ°νκ°)κ° μΌμΉν΄μΌλ¨!
2οΈβ£ μ κ·Ό μ μ΄μλ₯Ό μ‘°μ ν΄λμ€μ λ©μλλ³΄λ€ μ’μ λ²μλ‘ λ³κ²½X
3οΈβ£ μμΈλ μ‘°μ ν΄λμ€μ λ©μλλ³΄λ€ λ§μ΄ μ μΈX
4οΈβ£ μΈμ€ν΄μ€ λ©μλλ₯Ό static λ©μλλ‘ λλ κ·Έ λ°λλ‘ λ³κ²½X
βοΈ super
: μμ ν΄λμ€μμ μ‘°μ ν΄λμ€λ‘λΆν° μμλ°μ λ©€λ²λ₯Ό μ°Έμ‘°νλ λ° μ¬μ©λλ μ°Έμ‘°λ³μ
: μμν΄λμ€μ λ©€λ²κ° μ‘°μ ν΄λμ€μ λ©€λ²μ μ€λ³΅ μ μλμ΄ μλ‘ κ΅¬λ³ν΄μΌ λλ κ²½μ°μλ§ μ¬μ©!
βοΈ super()
: μ‘°μ ν΄λμ€μ μμ±μλ₯Ό νΈμΆνλλ° μ¬μ©
: μ§μ νΈμΆνμ§ μμΌλ©΄ μ»΄νμΌλ¬κ° μλμΌλ‘ μμ ν΄λμ€ μμ±μ 첫 μ€μ super();λ₯Ό μΆκ°
: μ‘°μ ν΄λμ€μ μμ±μ νΈμΆμ ν΄λμ€μ μμκ΄κ³λ₯Ό κ±°μ¬λ¬ μ¬λΌκ°λ©΄μ λ§μ§λ§μλ λͺ¨λ ν΄λμ€μ μ΅κ³ μ‘°μμΈ Object()κΉμ§ λλ¬
π μ μ΄μ
: ν΄λμ€, λ³μ λλ λ©μλμ μ μΈλΆμ ν¨κ» μ¬μ©λμ΄ λΆκ°μ μΈ μλ―Έλ₯Ό λΆμ¬
βοΈ static
: ν΄λμ€ λ³μ(static λ³μ), ν΄λμ€ λ©μλ(static λ©μλ)λ₯Ό μμ±ν λ μ¬μ©!
: ν΄λμ€ λ©€λ²λ μΈμ€ν΄μ€κ° μλ ν΄λμ€μ κ΄κ³ λ¨. κ·Έλμ μΈμ€ν΄μ€λ₯Ό μμ±νμ§ μκ³ λ μ¬μ©O
→ static λ©μλλ μΈμ€ν΄μ€ λ©€λ²λ₯Ό μ¬μ©ν μ μμ!
→ μΈμ€ν΄μ€ λ©μλλ³΄λ€ λΉ λ₯΄κ² νΈμΆ κ°λ₯!
βοΈ final
: λ³μμ μ¬μ©λλ©΄ κ°μ λ³κ²½ν μ μλ μμκ° λ¨
: λ©μλμ μ¬μ©λλ©΄ μ€λ²λΌμ΄λ©X
: ν΄λμ€μ μ¬μ©λλ©΄ λ€λ₯Έ ν΄λμ€μμ μμν μ μμ
: finalμ΄ λΆμ μΈμ€ν΄μ€ λ³μλ μμ±μμμ μ΄κΈ°ν κ°λ₯O! → λ°λΌμ κ° μΈμ€ν΄μ€λ§λ€ finalμ΄ λΆμ λ©€λ²λ³μκ° λ€λ₯Έ κ°μ κ°λλ‘ ν μ μμ!
βοΈ abstract
: μΆμ λ©μλ(μ μΈλΆO, ꡬνλΆX)μ μΆμ ν΄λμ€(μΆμ λ©μλλ₯Ό κ°μ§κ³ μμμ μλ―Έ)λ₯Ό μ μΈνλ λ° μ¬μ©!
: μΆμ ν΄λμ€λ‘ μΈμ€ν΄μ€ μμ± λΆκ°λ₯!
: μΆμ λ©μλλ μμμ ν΅ν΄ μμ ν΄λμ€μ μ€λ²λΌμ΄λ©μΌλ‘ ꡬνλ μ μμ!
βοΈ μ κ·Ό μ μ΄μ(public, protected, default, private)
: λ©€λ² λ³μ, λ©μλ, ν΄λμ€λ₯Ό μΈλΆμμ μ κ·Όνμ§ λͺ»νλλ‘ μ ννλ μν
1οΈβ£ private
: κ°μ ν΄λμ€ λ΄μμλ§ μ κ·ΌO
2οΈβ£ default
: κ°μ ν¨ν€μ§ λ΄μμλ§ μ κ·ΌO
3οΈβ£ protected
: μμ ν΄λμ€μμ μ κ·ΌO, κ°μ ν¨ν€μ§ λ΄μμ μ κ·ΌO
4οΈβ£ public
: μ κ·Ό μ νX
π μΊ‘μν
: ν΄λμ€ λ΄λΆμ μ μΈλ λ°μ΄ν°λ₯Ό 보νΈνλ κ²
: λ°μ΄ν°(λ©€λ² λ³μ)κ° μ ν¨ν κ°μ μ μ§νλλ‘, μΈλΆμμ ν¨λΆλ‘ λ³κ²½νμ§ λͺ»νλλ‘ λ°μ΄ν°λ₯Ό κ°μΆλ κ²!
: μΈλΆμμ μ κ·Όν νμκ° μλ λ©€λ²λ€μ privateμΌλ‘ μ§μ νμ¬ λ³΅μ‘μ±μ μ€μ΄λ κ² μμ μΊ‘μν!
β 보νΈν΄μΌ νλ λ©€λ²λ³μ(λ°μ΄ν°)λ₯Ό private, protected(μμμ ν΅ν΄ νμ₯λ κ²μ΄ μμλλ ν΄λμ€μΌ λ)λ‘ μ ννκ³ λ©€λ² λ³μμ κ°μ μ½κ³ λ³κ²½ν μ μλ publicλ©μλ(ex. getter(), setter())λ₯Ό μ 곡νμ!
β(μ°Έκ³ ) νλμ μμ€νμΌ(.java)μλ public ν΄λμ€κ° λ¨ νλλ§ μ‘΄μ¬O, μμ€νμΌμ μ΄λ¦μ λ°λμ public ν΄λμ€μ μ΄λ¦κ³Ό κ°μμΌ ν¨!
βοΈ μμ±μμ μ κ·Ό μ μ΄μ
: λ³΄ν΅ μμ±μμ μ κ·Ό μ μ΄μλ ν΄λμ€μ μ κ·Ό μ μ΄μμ κ°μ
: μμ±μλ₯Ό privateμΌλ‘ μ§μ νλ©΄, μΈλΆμμ μμ±μμ μ κ·ΌX → μΈμ€ν΄μ€ μμ±X
: private μμ±μλ‘ μ§μ ν΄ μΈμ€ν΄μ€ μμ±μ λ§κ³ public λ©μλλ₯Ό ν΅ν΄ μΈμ€ν΄μ€μ μ κ·Όνκ² ν¨μΌλ‘μ¨ μ¬μ©ν μ μλ μΈμ€ν΄μ€μ κ°μλ₯Ό μ νO
: μμ±μκ° privateμ΄λ©΄ λ€λ₯Έ ν΄λμ€κ° μμν μ μμΌλ―λ‘ classμ final ν€μλλ₯Ό λΆμ¬μ£Όλ κ²μ΄ μ’μ! (μμμ μμ±μμμ λΆλͺ¨μ μμ±μλ₯Ό νΈμΆν΄μΌ νλλ° κ·Έλ΄ μ μκΈ° λλ¬Έ!)
βμ±κΈν€ ν¨ν΄
: ν΄λμ€μ μΈμ€ν΄μ€κ° μ€μ§ 1κ°λ§ μμ±λλ ν¨ν΄
: (+) λ©λͺ¨λ¦¬λ₯Ό λλΉλ₯Ό λ§μ
: (+) λ€λ₯Έ ν΄λμ€ κ° λ°μ΄ν° 곡μ κ° μ¬μ
: (-) λμμ± λ¬Έμ κ° λ°μν μ μμ
: (-) ν μ€νΈκ° μ΄λ €μ
: (-) ν΄λΌμ΄μΈνΈκ° ꡬ체 ν΄λμ€μ μμ‘΄(SOLIDμμΉ μ€ DIPμμΉ μλ°)
class Singleton {
private static Singleton s = new Singleton();
private static Singleton() { ... }
public static Singleton getInstance() {
return s;
}
}
π λ€νμ±
: μ‘°μν΄λμ€ νμ μ μ°Έμ‘°λ³μλ‘ μμν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°ν μ μλ κ²(ex. Object o = new String())
: κ°μ²΄μ§ν₯μ μ€μν νΉμ§(μμ, μΊ‘μν, λ€νμ±, μΆμν) μ€ νλ
//μμΌλ‘ κ³μ μΈ μμ
class Animal {
String name;
String food;
void move() { ... }
}
class Rabbit extends Animal { ... }
class Cat extends Animal { ... }
βοΈ μ°Έμ‘°λ³μμ νμ μ (1)μ°Έμ‘°ν μ μλ κ°μ²΄μ μ’ λ₯μ (2)μ¬μ©ν μ μλ λ©€λ²μ μλ₯Ό κ²°μ !
- μ°Έμ‘°λ³μκ° μ¬μ©ν μ μλ λ©€λ²μ κ°―μλ μΈμ€ν΄μ€ λ©€λ² κ°―μλ³΄λ€ κ°κ±°λ μμ
- λ°λΌμ, μ‘°μνμ μ°Έμ‘°λ³μ → μμνμ μΈμ€ν΄μ€ O / μμνμ μ°Έμ‘°λ³μ → μ‘°μνμ μΈμ€ν΄μ€ X
- μ‘°μνμ μ°Έμ‘°λ³μ → μμνμ μΈμ€ν΄μ€ Ok μ΄κΈ° λλ¬Έμ μ°Έμ‘°λ³μμ νμ κ³Ό μΈμ€ν΄μ€μ νμ μ΄ νμ μΌμΉνμ§λ μμ!
Animal animal = new Rabbit();
βοΈ μ°Έμ‘°λ³μ νλ³ν
μμνμ → μ‘°μνμ (Up-casting) : νλ³ν μλ΅ Ok
μ‘°μνμ → μμνμ (Down-casting) : νλ³ν μλ΅ X
Cat cat = new Cat();
Animal animal = cat; // Up-casting
Cat cat2 = (Cat) animal; // Down-casting
βνλ³νμ μ°Έμ‘°λ³μμ νμ μ λ³ννλ κ²! μΈμ€ν΄μ€λ₯Ό λ³ννλ κ²μ΄ μλ!
Animal animal = new Animal();
Cat cat = (Cat) animal; //λ°νμ μλ¬!
ππ»βοΈ μ΄λ° μ€μλ₯Ό νμ§ μμΌλ €λ©΄ μ΄λ»κ² ν΄μΌ ν κΉ?
π‘ instanceOf μ°μ°μλ₯Ό μ΄μ©! μ°μ°κ²°κ³Ό trueλ₯Ό μ»μλ€λ©΄ μ°Έμ‘°λ³μκ° κ²μ¬ν νμ μΌλ‘ νλ³νμ΄ κ°λ₯νλ€λ κ²μ μλ―Έ!
if(animal instanceOf Cat)
Cat cat = (Cat)animal;
βοΈ μ°Έμ‘°λ³μμ νμ μ κ΄κ³μμ΄ νμ μ€μ μΈμ€ν΄μ€μ λ©μλκ° νΈμΆλμ§λ§, λ©€λ²λ³μμ κ²½μ° μ°Έμ‘°λ³μμ νμ μ μμ‘΄.
class Animal {
static int count = 10;
String name = "animal_name";
String food;
void move() {
System.out.println("Animal is moving");
}
}
class Dog extends Animal {
static int count = 0;
String name = "dog_name";
String food;
@Override
void move() {
System.out.println("A dog is moving");
}
}
Dog dog = new Dog();
Animal animal = dog;
1οΈβ£ μ€λ³΅λ λ©€λ²λ³μ
: μ°Έμ‘°λ³μ νμ κ³Ό κ°μ ν΄λμ€μ λ©€λ²λ³μ λ°ν!
dog.name //dog_name
animal.name //animal_name
2οΈβ£ μ€λ²λΌμ΄λ©λ λ©μλ
: μΈμ€ν΄μ€ λ©μλ νΈμΆ!
dog.move(); //A Dog is moving
animal.move() //A Dog is moving
3οΈβ£ static λ©μλ
: μ°Έμ‘°λ³μ νμ μ μμ‘΄. ν΄λμ€λͺ .λ©μλ()λ‘ νΈμΆνκΈ°
dog.count() //0
animal.count() //10
→ μ°Έμ‘°λ³μ νμ μ λ°λΌ μ¬μ©λλ μΈμ€ν΄μ€ λ³μκ° λ¬λΌμ§ μ μμΌλ―λ‘ λ©€λ²λ³μλ€μ μ£Όλ‘ privateμΌλ‘ μ κ·Όμ μ ννκ³ , μΈλΆμμλ λ©μλλ₯Ό ν΅ν΄μλ§ μ κ·Όν μ μλλ‘ ν΄μΌν¨! (μΊ‘μν)
ππ»βοΈ κ·ΈλΌ λ€νμ±μ μ°λ©΄ λκ° μ’μλ°?
π‘ μ¬λ¬ νμ (Class)λ₯Ό νλμ νμ μΌλ‘ λ€λ£° μ μμ! → μ μ°νκ³ νμ₯μ±μκ³ , μ μ§λ³΄μκ° νΈλ¦¬ν νλ‘κ·Έλ¨μ λ§λ€ μ μμ
public void feed(Rabbit rabbit) {
System.out.println(rabbit.name + "μκ² " + rabbit.food + "λ₯Ό μ£Όμλ€!");
}
public void feed(Animal animal) {
System.out.println(animal.name + "μκ² " + animal.food + "λ₯Ό μ£Όμλ€!");
}
π μΆμν΄λμ€
: λ―Έμμ± ν΄λμ€. abstract ν€μλλ₯Ό μ¬μ©ν΄μ μμ±!
: λ°λΌμ μΆμ ν΄λμ€λ‘λ μΈμ€ν΄μ€λ₯Ό λ§λ€ μ μμ!
: μΆμ λ©μλ(μ μΈλΆO, ꡬνλΆX)λ₯Ό ν¬ν¨νκ³ μμ. μμμ ν΅ν΄μ μΆμλ©μλλ₯Ό ꡬνν΄μ£Όμ΄μΌ ν¨!(νμ!)
βοΈ μΆμν
: ν΄λμ€κ°μ 곡ν΅μ μ μ°Ύμλ΄μ 곡ν΅μ μ‘°μ(μμν΄λμ€)μ λ§λλ μμ
βοΈ κ΅¬μ²΄ν
: μμμ ν΅ν΄ ν΄λμ€λ₯Ό ꡬν, νμ₯νλ μμ
βοΈ μ‘°μν΄λμ€ λ©μλ μ€λ²λΌμ΄λ© VS μΆμλ©μλ ꡬν
: μΆμλ©μλλ ꡬνμ΄ νμμ§λ§ λΆλͺ¨ν΄λμ€ λ©μλλ₯Ό μ€λ²λΌμ΄λ© νλ κ²μ μ ν!
ππ»βοΈ κ·ΈλΌ μΆμν΄λμ€λ₯Ό μ μ°λ건λ°?
1οΈβ£ κ°μ²΄λ€μ λ©€λ²λ³μμ λ©μλμ μ΄λ¦μ ν΅μΌνμ¬ μμ€μ κ°λ μ±↑
: κ°λ°μκ° λ©€λ²λ³μμ λ©μλλ₯Ό μΆμΈ‘ν μ μμ(ex. rabbitμ foodκ° μμΌλκΉ dogμλ foodκ° μκ² μ§?)
2οΈβ£ μμκ³Ό λ€νμ±μ μ₯μ μ λ릴 μ μμ!
: μΆμν΄λμ€λ₯Ό μμν νμ ν΄λμ€λ₯Ό μΆμν΄λμ€λ‘ λ€λ£° μ μμ!
π μΈν°νμ΄μ€
: μΌμ’ μ μΆμν΄λμ€(but μΆμν↑)
: μΌλ° λ©μλ λλ λ©€λ² λ³μλ₯Ό ꡬμ±μμΌλ‘ X. μ€μ§ μΆμ λ©μλ(public abstract)μ μμ(public static final)λ§μ λ©€λ²λ‘ κ°μ§!
: μ μ΄μ μλ΅ κ°λ₯(μλ΅λ μ μ΄μλ μ»΄νμΌλ¬κ° μλμ μΌλ‘ μΆκ°)
: μΈν°νμ΄μ€μ Objectκ°μ μ΅κ³ μ‘°μμ λ°λ‘ μμ!
: μ¬λ¬κ°μ μΈν°νμ΄μ€λ₯Ό μμνλ κ²μ΄ κ°λ₯!
: μΈν°νμ΄μ€λ₯Ό μμνκ³ μΆμΌλ©΄ implements ν€μλλ₯Ό μ¬μ©!
interface Movable {
void move(int x, int y);
}
class Rabbit extends Animal implements Movable {
public void move(int x, int y) { ... }
}
βοΈ μΈν°νμ΄μ€λ₯Ό μ΄μ©ν λ€νμ±
: μΈν°νμ΄μ€ νμ μΌλ‘ ν΄λΉ μΈν°νμ΄μ€λ₯Ό ꡬνν ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°ν μ μμ!
: 리ν΄νμ μ΄ μΈν°νμ΄μ€λΌλ κ²μ λ©μλκ° ν΄λΉ μΈν°νμ΄μ€λ₯Ό ꡬνν ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό λ°ννλ€λ κ²μ μλ―Έ!
ππ»βοΈ μΈν°νμ΄μ€λ₯Ό μ μ°λλ°?
1οΈβ£ κ°λ° μκ° λ¨μΆ
: μΈν°νμ΄μ€λ₯Ό μ¬μ©νλ μͺ½μμλ μΈν°νμ΄μ€κ° ꡬνλμ§ μμλλΌλ λ©μλμ μ μΈλΆλ§ λ³΄κ³ νλ‘κ·Έλ¨μ μμ±ν μ μμ! μΈν°νμ΄μ€λ₯Ό μ¬μ©νλ μͺ½κ³Ό ꡬννλ μͺ½μ΄ λμμ κ°λ° κ°λ₯!
2οΈβ£ νμ€ν
: νλ‘μ νΈμ μ¬μ©λλ κΈ°λ³Έ νμ μΈν°νμ΄μ€λ‘ μμ±ν λ€ μ΄λ₯Ό ꡬννμ¬ νλ‘κ·Έλ¨μ μμ±νλ©΄ μΌκ΄λκ³ μ ννλ νλ‘κ·Έλ¨μ κ°λ° κ°λ₯!
3οΈβ£ ν΄λμ€ κ°μ κ΄κ³λ₯Ό λ§Ίμ΄ μ€!
: μμ κ΄κ³X, κ°μ μ‘°μXμΈ κ²½μ° μΈν°νμ΄μ€λ₯Ό 곡ν΅μ μΌλ‘ ꡬννλλ‘ ν¨μΌλ‘μ¨ κ΄κ³λ₯Ό λ§Ίμ΄ μ€ μ μμ
: μμ κ΄κ³(μ§μ μ μΈ κ΄κ³)λ₯Ό μΈν°νμ΄μ€λ₯Ό μ΄μ©ν΄μ κ°μ μ μΈ κ΄κ³λ‘ λ³κ²½ν μ μμ
4οΈβ£ λ 립μ νλ‘κ·Έλλ°(ex. νΉμ DBμ μμ‘΄μ μ΄μ§ μλ νλ‘κ·Έλ¨)
: μΈν°νμ΄μ€λ₯Ό μ΄μ©ν΄ ν΄λμ€μ ν΄λμ€ κ°μ μ§μ μ μΈ κ΄κ³λ₯Ό κ°μ μ μΈ κ΄κ³λ‘ λ³κ²½νλ©΄, ν ν΄λμ€μ λ³κ²½μ΄ κ΄λ ¨λ λ€λ₯Έ ν΄λμ€μ μν₯μ λ―ΈμΉμ§ μλ λ 립μ μΈ νλ‘κ·Έλλ°μ΄ κ°λ₯!
βοΈ μΈν°νμ΄μ€μ μ΄ν΄
- ν΄λμ€λ₯Ό μ¬μ©νλ μͺ½(User)μ ν΄λμ€λ₯Ό μ 곡νλ μͺ½(Provider)
- λ©μλλ₯Ό νΈμΆνλ μͺ½(User)μμλ μ¬μ©νλ €λ λ©μλμ μ μΈλΆλ§ μλ©΄ λ¨!
class User {
private MySql db = new MySql();
public void connectDb() {
db.connectDb();
}
}
↑ ν΄λμ€ Userμ MySql(Provider)λ μ§μ μ μΈ κ΄κ³κ° μμ(MySqlκ° λ³κ²½λλ©΄ Userλ μν₯μ λ°μ)
(1) μΈν°νμ΄μ€λ₯Ό ν΅ν΄ Databaseμ μ μΈκ³Ό ꡬνμ λΆλ¦¬
interface Database {
public abstract void connectDb();
}
(2) MySqlκ° Databaseλ₯Ό ꡬν
class MySql implements Database {
public void connectDb() {
// ꡬνλΆ
}
}
(3) Userκ° Database μΈν°νμ΄μ€μ μμ‘΄νλλ‘ λ³κ²½
class User {
Database db = new MySql();
public void loadBd() {
db.connectDb();
}
}
- μ΄μ Userμ MySqlλ κ°μ μ μΈ κ΄κ³! (User - Database - MySql)
ππ»βοΈ μ΄μ¨λ Userκ° dbλ₯Ό μ΄κΈ°νν λ, MySql()μ λμ μΌλ‘ μ 곡λ°μμμ! κ·ΈλΌ Userκ° μμ§ MySqlμ μμ‘΄νκ³ μλκ±° μλκ°μ?
π‘ O! μ¬μ€ Userλ μ¬μ ν MySql()μ μμ‘΄μ μ!! μ΄λ₯Ό ν΄κ²°νκΈ° μν΄μ μ 3μ ν΄λμ€κ° Database ꡬν체λ₯Ό μ 곡ν΄μ£Όλ κ²μΌλ‘ μ΄λ₯Ό ν΄κ²°ν΄μ€ μ μλ€!
class User {
Database db = DbManager.getDb();
public void loadBd() {
db.connectDb();
}
}
class DbManager {
public static Database getDb() {
return new MySql();
}
}
βοΈ JDK1.8 λΆν° λν΄νΈ λ©μλμ static ν΄λμ€λ μΈν°νμ΄μ€μ μΆκ°ν μ μκ² λ¨!
π λ΄λΆ ν΄λμ€
: ν΄λμ€ λ΄μ μ μΈλ ν΄λμ€
: μΈμ€ν΄μ€ ν΄λμ€, μ€νν± ν΄λμ€, μ§μ ν΄λμ€, μ΅λͺ ν΄λμ€(λ³μμ²λΌ λ΄λΆ ν΄λμ€ μ μΈ μμΉμ λ°λΌ μ ν¨λ²μμ μ κ·Όμ±μ΄ λ¬λΌμ§!)
ππ»βοΈ λ΄λΆ ν΄λμ€ μ μ°λλ°?
βοΈ ν΄λΉ ν΄λμ€(Outer Class)μ κΈ΄λ°ν κ΄κ³κ° μλλ° μΈλΆμλ λΆνμν ν΄λμ€λ₯Ό λ΄λΆ ν΄λμ€λ‘ λ§λ¬!
β λ΄λΆ ν΄λμ€μμ μΈλΆ ν΄λμ€μ λ©€λ²λ€μ μ½κ² μ κ·Όν μ μμ
β μ½λμ 볡μ‘μ±μ μ€μΌ μ μμ(μΊ‘μν)
βοΈ μ΅λͺ ν΄λμ€
: ν΄λμ€μ μ μΈκ³Ό κ°μ²΄μ μμ±μ λμμ νκΈ° λλ¬Έμ λ¨ νλ²λ§ μ¬μ©! μ€μ§ νλμ κ°μ²΄λ§μ μμ±ν μ μλ μΌνμ© ν΄λμ€
class Outer {
public static void main(String[] args) {
Button b = new Button("Start");
b.addActionListener(new ActionListener() { //ActionListenerκ° μΈν°νμ΄μ€!
public void actionPerformed(ActionEvent e) {
// ...
}
})
}
}
π package
: μλ‘ κ΄λ ¨λ ν΄λμ€λ€μ λ¬Άμ
: 물리μ μΌλ‘ νλμ ν΄λμ€ νμΌ(.class)μ ν¬ν¨νλ νλμ λλ ν 리
: ν΄λμ€μ μ€μ μ΄λ¦μ ν¨ν€μ§λͺ μ ν¬ν¨ν κ² → λ°λΌμ κ°μ μ΄λ¦μ ν΄λμ€ μΌμ§λΌλ μλ‘ λ€λ₯Έ ν¨ν€μ§μ μ‘΄μ¬νλ κ²μ΄ κ°λ₯!
: ν¨ν€μ§λ μ (.)μ ꡬλΆμλ‘ νμ¬ κ³μΈ΅κ΅¬μ‘°λ‘ ꡬμ±ν μ μμ
βοΈ ν¨ν€μ§ μ μΈ
package ν¨ν€μ§λͺ
;
- νλμ μμ€νμΌμλ 첫 λ²μ§Έ λ¬Έμ₯μΌλ‘ λ¨ ν λ²μ ν¨ν€μ§ μ μΈλ§μ νμ©
- λͺ¨λ ν΄λμ€λ λ°λμ νλμ ν¨ν€μ§μ μν΄μΌν¨!
- ν¨ν€μ§λ₯Ό μ§μ νμ§ μμ ν΄λμ€λ 'μ΄λ¦μλ ν¨ν€μ§'μ μνκ² λ¨!
javac -d . PackageTest.java
- terminalμμ -dμ΅μ μ μ€μ μλ°νμΌ(.java)μ μ»΄νμΌνλ©΄ μμ€νμΌμ μ§μ λ κ²½λ‘λ₯Ό ν΅ν΄ ν¨ν€μ§ μμΉλ₯Ό μ°Ύμμ ν΄λμ€νμΌ(.class)μ μμ±
- -dλ€μλ ν΄λΉ ν¨ν€μ§μ λ£¨νΈ λλ ν 리 κ²½λ‘λ₯Ό μ μ΄μ€(↑ μμμλ νμ¬ λλ ν 리λ₯Ό μλ―Ένλ . )
- μ΄ν ν¨ν€μ§μ λ£¨νΈ λλ ν 리λ₯Ό ν΄λμ€ν¨μ€(CLASSPATH)μ ν¬ν¨μμΌμΌ ν¨! κ·ΈλμΌ JVMμ΄ ν΄λΉ ν΄λμ€λ₯Ό μ°Ύμ μ μμ(νκ²½λ³μ μ€μ !)
π import
: μ¬μ©νκ³ μ νλ ν΄λμ€μ ν¨ν€μ§λ₯Ό 미리 λͺ μ (μ»΄νμΌλ¬μκ² ν΄λμ€μ ν¨ν€μ§μ λν μ 보λ₯Ό μ 곡)
→ μμ€μ½λμ μ¬μ©λλ ν΄λμ€μ΄λ¦μμ ν¨ν€μ§λͺ μ μλ΅ν μ μκ² ν΄μ€!
: μ»΄νμΌλ¬λ μ»΄νμΌ μμ μ importλ¬Έμ ν΅ν΄ ν΄λμ€λ€μ ν¨ν€μ§λ₯Ό μμ λΈ λ€μ, λͺ¨λ ν΄λμ€μ΄λ¦ μμ ν¨ν€μ§λͺ μ λΆμ¬μ€!
→ importλ¬Έμ μ»΄νμΌ μλλ₯Ό μ‘°κΈ λλ¦¬κ² ν λΏ, νλ‘κ·Έλ¨ μ±λ₯μ μ ν μν₯X.
import java.util.*; // import java.*;λ‘ νλ©΄ μλ¨!
- *μ μ¬μ©νλ κ²μ΄ νμ ν¨ν€μ§μ ν΄λμ€κΉμ§ ν¬ν¨ν κ²μ X
β *μ μ¬μ©νλ©΄ importνλ ν¨ν€μ§ μκ° λ§μ λλ μ΄λ ν΄λμ€κ° μ΄λ ν¨ν€μ§μ μνλμ§ κ΅¬λ³νκΈ° μ΄λ €μ!
βοΈ java.lang ν¨ν€μ§λ λ§€μ° λΉλ²ν μ¬μ©λλ ν΄λμ€λ€μ΄ μν ν¨ν€μ§μ΄κΈ° λλ¬Έμ λ°λ‘ importλ¬ΈμΌλ‘ μ§μ νμ§ μμλ λ¨! (λͺ¨λ μμ€νμΌμ 묡μμ μΌλ‘ import java.lang.*;λ¬Έμ΄ μ μΈλμ΄ μμ)
βοΈ static importλ¬Έ
: static λ©€λ²λ₯Ό νΈμΆν λ ν΄λμ€ μ΄λ¦μ μλ΅ν μ μκ² ν΄μ€!
import static java.lang.Math.random; //Math.random()μ΄ μλ random()μΌλ‘ μ¬μ© κ°λ₯!
'μΈμ΄ > μλ°' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
java.langν¨ν€μ§μ μ μ©ν ν΄λμ€ (0) | 2023.06.29 |
---|---|
μμΈμ²λ¦¬ (0) | 2023.06.25 |
κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°β - 2 (0) | 2023.04.27 |
κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°β - 1 (0) | 2023.04.27 |
λ°°μ΄ (0) | 2023.04.20 |