πToday...
μ μ μμλ μ£Όλ§μ΄ μ§λκ°λ€... μ μ²κΈ°λ κ°μ±μ ν΄λ΄€μλ ν©κ²©νκ²κ°λ€. λνκ΅ λ€λλλμ C++μ λ°°μ΄μ μ΄ μμλλ° κ°μ²΄μ§ν₯μ΄λΌλ κ°λ μ΄ λμ ν λ΄λ¨Έλ¦¬λ‘λ μ΄ν΄κ° μκ°κ³ μ΄λ €μ λκ²κ°λ€. μ§κΈλ μ΄λ ΅κΈ΄ νμ§λ§ κ·Έλλ³΄λ€ μ‘°κΈλ μ΄ν΄κ°λλ λλμ΄λ€. λ ΈνΈλΆλ κ³ μ₯λκ³ νκ²½μ λ§μ΄ μ΄λ ΅μ§λ§ κ³μ 곡λΆνμ! νμ΄ν
βμ€λμ TIL(Today I Learn)
μμ±μ
μμ±μ(Constructor)λ λ§ κ·Έλλ‘ κ°μ²΄λ₯Ό μμ±νλ μν μ νλ ν΄λμ€μ ꡬμ±μμμ΄λ€. μΈμ€ν΄μ€κ° μμ±λ λ νΈμΆλλ μΈμ€ν΄μ€ μ΄κΈ°ν λ©μλ μ΄λ€. new ν€μλλ₯Ό ν΅ν΄ κ°μ²΄λ₯Ό μμ±ν λ νΈμΆλλκ²μ΄ μ΄ μμ±μλΌλ κ²μ΄λ€.
μμ±μκ° μΈμ€ν΄μ€λ₯Ό μμ±νλ μν μ΄λ€ ? (X)
μΈμ€ν΄μ€ μμ±μ νλμν > new ν€μλ (O)
μΈμ€ν΄μ€ λ³μλ€μ μ΄κΈ°ν νλ μν > μμ±μ (O)
μμ±μλ λ€μκ³Ό κ°μ λ°©λ²μΌλ‘ λ§λ€μ΄μ§λ€.
class Constructor{
Constructor(){ //μμ±μ μ μΈμ΄ μμμμλ μ»΄νμΌλ¬μ μν΄ μλμμ±
}
Constructor(String str){ //μμ±μ overloading1
}
Constructor(int a,int b){ //μμ±μ overloading2
}
μμ±μ μμ±μ κ·μΉμ λ€μκ³Ό κ°λ€.
1. μμ±μμ μ΄λ¦μ λ°λμ ν΄λμ€μ μ΄λ¦κ³Ό κ°μμΌνλ€.
2. μμ±μλ return νμ μ΄ μλ€.
3. ν΄λμ€μμλ λ°λμ νλ μ΄μμ μμ±μκ° μ‘΄μ¬(μ μΈμ΄ μμμμλ default Constructorκ° μ»΄νμΌλ¬μ μν΄ μλ μμ±)
4. μμ±μκ° μ μΈλλ©΄ μ μΈλ μμ±μλ₯Ό κΈ°λ³ΈμΌλ‘ μ¬μ©νλ€.
class Car{
int num;
String str;
public Car(int num, String str){ //μμ±μ
this.num = num; //thisν€μλλ‘ Carν΄λμ€μ λ©€λ²λ³μ μ΄κΈ°ν
this.str = str; //thisν€μλλ‘ Carν΄λμ€μ λ©€λ²λ³μ μ΄κΈ°ν
}
}
public class ConstructorExample {
public static void main(String[] args) {
Car c = new Car(1118,"λ²€μΈ ");
System.out.println(c.num + "," + c.str);
}
//output
//1118,λ²€μΈ
//μμ μ¬μ μ λ κ² μ μλλ° μ€μ μ¬μ©μ Classμ λ©€λ²λ³μκ° privateμΌλ‘ μ μΈλμμλ
//μ κ·Όμ΄ λΆκ°νκ² μΊ‘μνλμ΄μμΌλ―λ‘ μΈμ€ν΄μ€μ μΈμμ μ λ κ² νλκ°μ μ€μ ν΄μ£Όκ³
//getter / setterλ‘ λΆλ¬μ€λ λ°©μμΌλ‘ μ¬μ©νλ€...!
μμ μ½λλ λ§€κ°λ³μκ° μλ μμ±μλ‘ λ§€κ°λ³μλ₯Ό ν΅ν΄ νΈμΆμμ ν΄λΉκ°μ λ°μμ μΈμ€ν΄μ€μ λ©€λ²λ³μλ₯Ό μ΄κΈ°ννλ€.
this vs this()
# this()
this()λ μμ μ΄ μν ν΄λμ€μμ λ€λ₯Έμμ±μλ₯Ό νΈμΆνλ κ²½μ°μ μ¬μ©νλ€. μλ μ½λλ‘ νμΈν΄λ³΄μ.
public class Test {
public static void main(String[] args) {
Example example = new Example();
Example example2 = new Example(5);
}
}
class Example {
public Example() {
System.out.println("Exampleμ κΈ°λ³Έ μμ±μ νΈμΆ!");
};
public Example(int x) {
this(); //<-------this() μ¬μ©!!
System.out.println("Exampleμ λ λ²μ§Έ μμ±μ νΈμΆ!");
}
}
//Output
Exampleμ κΈ°λ³Έ μμ±μ νΈμΆ!
Exampleμ κΈ°λ³Έ μμ±μ νΈμΆ!
Exampleμ λ λ²μ§Έ μμ±μ νΈμΆ!
μμλ λ€μκ³Ό κ°λ€. 4λ²μ§Έ μ€μμ Example example2 = new Example(5)λ₯Ό ν΅ν΄μ Example(int x) μμ±μκ° μ€νλ κ²μ΄κ³ this()λ₯Ό ν΅ν΄μ Example()μμ±μλ₯Ό νΈμΆνλ€. κ·Έλ¦¬κ³ Example(int x)μ λ¬Έμ₯μ΄ μ€νλλ€.
this()λ₯Ό μ¬μ©νλ €λ©΄ λ¬Έλ²μμλ₯Ό μΆ©μ‘±μμΌμΌνλ€.
- this() λ©μλλ λ°λμ μμ±μμ λ΄λΆμμλ§ μ¬μ© κ°λ₯
- this() λ©μλλ λ°λμ μμ±μμ 첫μ€μ μμΉνλ€.
# this
thisλ μΈμ€ν΄μ€ μμ μ κ°λ¦¬ν¨λ€. μ°λ¦¬κ° μ°Έμ‘°λ³μλ₯Ό ν΅ν΄ μΈμ€ν΄μ€λ©€λ²μ μ κ·Όν μ μλκ² μ²λΌ thisλ₯Ό ν΅ν΄μ μΈμ€ν΄μ€ μμ μ λ³μμ μ κ·Όμ΄ κ°λ₯νλ€. κ·Έλ¦¬κ³ μΈμ€ν΄μ€ λ³μμ λ§€κ°λ³μλ₯Ό μ΄λ¦λ§μΌλ‘λ ꡬλΆνκΈ°κ° μ΄λ €μ΄λ°, μ΄λ μ΄λ₯Ό ꡬλΆν΄ μ£ΌκΈ° μν μ©λλ‘ μ¬μ©λλκ²μ΄ λ°λ‘ this ν€μλμ΄λ€.
class Car{
int num;
String str;
public Car(int num, String str){ //μμ±μ
this.num = num; //thisν€μλλ‘ Carν΄λμ€μ λ©€λ²λ³μ μ΄κΈ°ν
this.str = str; //thisν€μλλ‘ Carν΄λμ€μ λ©€λ²λ³μ μ΄κΈ°ν
//num = num; ---γ±
//str = str; ---> μ§μλ³μλ‘ κ°μ£Όλμ΄ μλ¬λ°μ
}
}
public class Main {
public static void main(String[] args) {
Car c = new Car(1118,"λ²€μΈ ");
System.out.println(c.num + "," + c.str);
}
}
* μ£Όλ‘ μΈμ€ν΄μ€ νλλͺ κ³Ό μ§μλ³μλ₯Ό ꡬλΆνκΈ° μν μ©λλ‘ μ¬μ©λλ€.
λ΄λΆ ν΄λμ€(Inner Class)
λ΄λΆν΄λμ€(inner class)λ ν΄λμ€ λ΄λΆμ μ μΈλ ν΄λμ€λ‘ μΈλΆν΄λμ€μ λ΄λΆν΄λμ€κ° μλ‘ μ°κ΄λμ΄μμλ μ¬μ©νλ€.
λ΄λΆν΄λμ€λ₯Ό μ¬μ©νλ©΄ μΈλΆν΄λμ€μ λ©€λ²μ μ½κ² μ κ·Όμ΄ κ°λ₯νκ³ , μ½λμ 볡μ‘μ±μ μ€μΌμμλ€. λν μΈλΆμ μΌλ‘ λΆνμν λ°μ΄ν°λ₯Ό κ°μΆμ μμ΄ μΊ‘μνλ₯Ό λ¬μ±νλλ° μ μ©νλ€.
class Outer { // μΈλΆ ν΄λμ€
class Inner {
// μΈμ€ν΄μ€ λ΄λΆ ν΄λμ€
}
static class StaticInner {
// μ μ λ΄λΆ ν΄λμ€
}
void run() {
class LocalInner {
// μ§μ λ΄λΆ ν΄λμ€
}
}
}
μ’ λ₯ | μ μΈμμΉ | μ¬μ©κ°λ₯νλ³μ |
μΈμ€ν΄μ€ λ΄λΆ ν΄λμ€(instance inner class) | μΈλΆ ν΄λμ€μ λ©€λ²λ³μ μ μΈμμΉμ μ μΈ (λ©€λ² λ΄λΆ ν΄λμ€) |
μΈλΆ μΈμ€ν΄μ€ λ³μ, μΈλΆ μ μ λ³μ |
μ μ λ΄λΆ ν΄λμ€(static inner class) | μΈλΆ ν΄λμ€μ λ©€λ²λ³μ μ μΈμμΉμ μ μΈ (λ©€λ² λ΄λΆ ν΄λμ€) |
μΈλΆ μ μ λ³μ |
μ§μ λ΄λΆ ν΄λμ€(local inner class) | μΈλΆ ν΄λμ€μ λ©μλλ μ΄κΈ°νλΈλ‘ μμ μ μΈ | μΈλΆ μΈμ€ν΄μ€ λ³μ, μΈλΆ μ μ λ³μ |
μ΅λͺ λ΄λΆ ν΄λμ€(anonymous inner class) | ν΄λμ€μ μ μΈκ³Ό κ°μ²΄μ μμ±μ λμμ νλ μΌνμ© μ΅λͺ ν΄λμ€ | μΈλΆ μΈμ€ν΄μ€ λ³μ, μΈλΆ μ μ λ³μ |
λ΄λΆν΄λμ€λ μΌλ¨ κ°λ λ§ μκ³ λμ΄κ°μ! λ€μλ²μ κΈ°νκ° λλ©΄ λ€μνλ² κ³΅λΆλ₯Ό μ§νν΄μΌκ² λ€.
πνΌμμ ν΄κ²°νκΈ°
1. ν μ€νΈ μ€νν¬λννΈ λ§λ€κΈ°