[ μ€μ²© ν΄λμ€ / λ΄λΆ ν΄λμ€]
- ν΄λμ€λ₯Ό μ½λ λΈλ‘ λ΄λΆμ μ μνλ ννλ‘μ
λ€λ₯Έ ν΄λμ€μ λ©€λ²λ‘ μ μλλ κΈ°λ₯μ μλ―Έν¨
- S(μΈλΆν΄λμ€)$Y(λ΄λΆν΄λμ€).classμ κ°μ ννμ ν΄λμ€ νμΌμ μλ―Έ
(μΈλΆν΄λμ€ ν΄λμ€ S μ μ€μ²©λ λ΄λΆν΄λμ€ Y ν΄λμ€)

[ μ€νν± ν΄λμ€ (static class) ]
- static ν€μλκ° λΆμ λ΄λΆ ν΄λμ€
- μΌλ° ν¨ν€μ§ λ©€λ² ν΄λμ€μ μ μ¬νλ ꡬμ±μ νΈλ¦¬μ±μ μν΄
λ€λ₯Έ ν΄λμ€λ μΈν°νμ΄μ€μ ν¬ν¨λμ΄ μλ ννλ₯Ό μλ―Έ
· λ€λ₯Έ ν΄λμ€ λ΄μ μ μλ ν΄λμ€ λλ μΈν°νμ΄μ€
· νμ staticμΌλ‘ μ μΈ
· κ°λ μ± ν₯μ
· μλ‘μ private νλμ λ©μλμ μ κ·Ό κ°λ₯
β» κ°κΈμ μ΄λ©΄ μΈλΆ μ°Έμ‘°λ₯Ό νμ§ μλ λ΄λΆ ν΄λμ€μΌ κ²½μ° μ€νν± ν΄λμ€λ‘ μμ± ν κ²!!!
μ°Έμ‘° : inpa.tistory.com/entry/JAVA-β-μλ°μ-λ΄λΆ-ν΄λμ€λ-static-μΌλ‘-μ μΈνμ
[ μ€νν± ν΄λμ€ μμ ]
class Nesting{
private int i = 1;
private static int si = 2;
// Nesting ν΄λμ€λ₯Ό ν¬ν¨νλ μ€νν± ν΄λμ€ Nested
static class Nested{
int j = 3;
private static int sj = 4;
void display() {
// System.out.println(i); // μ€λ₯ λ°μ => Nesting ν΄λμ€μ privateν λ©€λ²λ μ κ·Ό λΆκ°
System.out.println("Nesting.si : " + si); // privateν λ©€λ²μ΄λ staticμΌλ‘ μ μΈλμ΄ μ€μ²© ν΄λμ€μμλ μ κ·Ό κ°λ₯
System.out.println("Nested.j : " + j);
}
}
// -- Nesting Construct --
Nesting(){
// Nested ν΄λμ€μ display()μ λ§μ°¬κ°μ§λ‘ Nested ν΄λμ€μ private static λ©€λ²μ μ κ·Ό κ°λ₯
System.out.println("Nested.sj : " + Nested.sj);
}
}
public class TestCode {
public static void main(String[] args) {
Nesting.Nested nested = new Nesting.Nested();
Nesting nesting = new Nesting(); // Nesting ν΄λμ€μ μμ±μλ₯Ό ν΅ν΄ Nested.sj μΆλ ₯
nested.display();
}
}
/* [μΆλ ₯ κ²°κ³Ό]
Nested.sj : 4
Nesting.si : 2
Nested.j : 3
*/
· static ν€μλμ΄μ§λ§ new μμ±μ μ΄κΈ°ν κ°λ₯
· μΌλ° static λ©€λ² λ³μ, static λ©μλμ static λ΄λΆ ν΄λμ€λ λ©λͺ¨λ¦¬ ꡬ쑰μ κΈ°λ₯μ΄ λ€λ¦
· λ΄λΆ ν΄λμ€λ€κ° private static λ©€λ²νλμλ μλ‘ μ κ·Ό κ°λ₯
[ λ΄λΆ μΈμ€ν΄μ€ ν΄λμ€ (Instance class) ]
- μΈμ€ν΄μ€ ν΄λμ€ λ΄λΆμλ μΈμ€ν΄μ€ λ©€λ² νλλ§ μ μΈ κ°λ₯
(μ΄λ ν static λ©€λ²λ κ°μ§ μ μμ)
- μΈμ€ν΄μ€ ν΄λμ€ λ©μλλ λ©€λ² ν΄λμ€μ νλλΏ μλλΌ
ν΄λΉ ν΄λμ€λ₯Ό ν¬ν¨μ€μΈ μΈλΆ ν΄λμ€μ λͺ¨λ νλ μ°Έμ‘° κ°λ₯
- μΈλΆ ν΄λμ€μ κ°μ²΄ λ©€λ² νλμ κ΄λ ¨λ μμ μ μ¬μ©
[ λ΄λΆ μΈμ€ν΄μ€ ν΄λμ€ μμ ]
class OuterClass{
// μΈμ€ν΄μ€ λ©€λ² λ³μ
String first_name = "ν";
int age = 25;
class InnerClass{
String last_name ="κΈΈλ";
int kor_age = 24;
// static String region = "μμμ"; // μλ¬ λ°μ => λ΄λΆ ν΄λμ€λ static ν€μλ μ¬μ© λΆκ°
// μμΉμ μΌλ‘ λ΄λΆ ν΄λμ€μμ static ν€μλ μ μΈμ λΆκ° νλ
// static finalμ κ²½μ° μμμ΄λ―λ‘ νμ©
static final String COUNTRY = "νκ΅";
void getProfile() {
// λ³λ€λ₯Έ Getter&Setter λ©μλμμ΄ μΈλΆ λ©μλμ λ΄λΆ λ©μλ μλ‘ μ κ·Ό κ°λ₯
System.out.println("μ΄λ¦ : " + first_name + last_name);
System.out.println("λμ΄ : " + age + " νκ΅μ λμ΄ : " + kor_age);
System.out.println("κ΅κ° : " + COUNTRY);
}
}
}
public class TestCode {
public static void main(String[] args) {
// -- λ΄λΆ ν΄λμ€ μ μΈ λ°©μ --
OuterClass oc = new OuterClass(); // 1. μΈλΆ ν΄λμ€ κ°μ²΄ μ μΈ
OuterClass.InnerClass ic = oc.new InnerClass(); // 2. μΈλΆ ν΄λμ€.λ΄λΆν΄λμ€ νμμΌλ‘ λ΄λΆ ν΄λμ€ μ΄κΈ°ν. μ μΈ
ic.getProfile(); System.out.println("");
// νμ€λ‘ μΆμ½ κ°λ₯
OuterClass.InnerClass ic2 = new OuterClass().new InnerClass();
ic2.getProfile();
}
}
/* [μΆλ ₯ κ²°κ³Ό]
μ΄λ¦ : νκΈΈλ
λμ΄ : 25 νκ΅μ λμ΄ : 24
κ΅κ° : νκ΅
μ΄λ¦ : νκΈΈλ
λμ΄ : 25 νκ΅μ λμ΄ : 24
κ΅κ° : νκ΅
*/
· μΈλΆ ν΄λμ€ κ°μ²΄ μ μΈ μ μΈλΆ ν΄λμ€μ μ½λκ° λ©λͺ¨λ¦¬μ νμ±
· μ΄ λ μμ°μ€λ½κ² μΈλΆ ν΄λμ€ λ΄λΆμ μλ λ΄λΆ ν΄λμ€μ μ½λλ λ©λͺ¨λ¦¬μ μ¬λΌμ΄
· κ·Έλ κΈ°μ μΈλΆ ν΄λμ€ κ°μ²΄λ₯Ό μ°μ μ μΈ ν λ΄λΆ ν΄λμ€λ₯Ό μ μΈ(μμ±) κ°λ₯
[ μ§μ ν΄λμ€ (local class) ]
- μΈλΆ ν΄λμ€μ λ©μλλ μ΄κΈ°ν λΈλ λ΄λΆμ μ μΈ
- λ©μλ λ΄λΆμ μ§μμ μΌλ‘ μ μΈλ ν΄λμ€
· λΈλ‘ μΈλΆμμ μ°Έμ‘° λΆκ°
· μ΄λ ν static λ©€λ²λ κ°μ§ μ μμ
· λ©€λ² ν΄λμ€μ λ¬λ¦¬ μ κ·Ό μ§μ μ λΆμ¬ λΆκ°
[ μ§μ ν΄λμ€ μμ ]
class OuterClass{
String first_name = "ν";
String last_name = "κΈΈλ";
// -- Constructor --
public OuterClass() {
System.out.println("μ± : " + this.first_name );
System.out.println("μ΄λ¦ : " + this.last_name);
}
// -- display Method --
public void display() {
int age = 25;
// -- Local class -- λ©μλ λ΄λΆμμ ν΄λμ€ μ μΈ
class LocalClass{
int kor_age = 24;
public void getLocalClass() {
System.out.println("λμ΄ : " + age); // OuterClass.display() λ©μλ μ§μ μμ μΆλ ₯
System.out.println("λμ΄(λ§) : " + kor_age); // LocalClass μΈμ€ν΄μ€ λ³μ μΆλ ₯
}
}
new LocalClass().getLocalClass();
System.out.println("OuterClass.display().LocalClass.getLocalClass() νΈμΆ μλ£");
}
}
public class TestCode {
public static void main(String[] args) {
OuterClass oc = new OuterClass();
oc.display();
}
}
/* [μΆλ ₯ κ²°κ³Ό]
μ± : ν
μ΄λ¦ : κΈΈλ
λμ΄ : 25
λμ΄(λ§) : 24
OuterClass.display().LocalClass.getLocalClass() νΈμΆ μλ£
*/
· λ©μλ λ΄μμ μμλ‘ μ¬μ©λλ μ§μ λ³μμ κ°μ΄ μμλ‘ μ¬μ©νλ κ°λ
· display() λ©μλ λ΄μμ κ°μ²΄ μμ± ν μ¬μ©ν λ€ λ©μλ μ’ λ£μ ν¨κ» ν λ©λͺ¨λ¦¬ μμμ μ€μ λ°μ΄ν°λ
GC(κ°λΉμ§ 컬λ ν°)μ μν΄ μμ
LocalClass.getLocalClass() λ©μλ λ΄λΆ μ½λλ₯Ό λ³΄κ² λλ©΄
display() λ©μλ λ΄ μ§μ λ³μμΈ ageμ μ κ·Όνμ¬ μ¬μ© μ€μ.
λ§μ½ λ©μλ λ΄ μ§μ ν΄λμ€μμ μ§μ λ³μμ μ κ·Όν κ²½μ°μλ
λ°λμ final ν€μλλ₯Ό ν΅ν΄ μμν λ μ§μ λ³μλ§ κ°λ₯ν¨.
μμ μ½λκ° μ€λ₯κ° λμ§ μλ μ΄μ λ μ΄λ¬ν κ²½μ°
μλ°8 μ΄ ν μ»΄νμΌλ¬μμ 묡μμ μΌλ‘ final ν€μλλ₯Ό μ§μ λ³μμ λΆμ¬μ£ΌκΈ° λλ¬Έμ
π μλ μμ μ½λ νμΈ π
[ μ§μ ν΄λμ€ μμ μ κ·Ό μμ ]
// -- display Method --
public void display() {
int age = 25; // 묡μμ μΌλ‘ final ν€μλκ° λΆμ΄ μλ μνμ
age = 24; // age κ°μ λ³κ²½νκ² λλ©΄ final ν€μλ(μμ)κ° μλ λ³μλ‘ μΈμ
// -- Local class -- λ©μλ λ΄λΆμμ ν΄λμ€ μ μΈ
class LocalClass{
int kor_age = 24;
public void getLocalClass() {
// System.out.println("λμ΄ : " + age); // μλ¬ λ°μ
System.out.println("λμ΄(λ§) : " + kor_age); // LocalClass μΈμ€ν΄μ€ λ³μ μΆλ ₯
}
}
new LocalClass().getLocalClass();
System.out.println("OuterClass.display().LocalClass.getLocalClass() νΈμΆ μλ£");
}
μμ μ½λμ κ°μ΄ display() λ©μλμ μ§μλ³μ ageμ κ°μ λ³κ²½ μ
λ΄λΆ μ§μ ν΄λμ€μΈ LocalClassμμ ν΄λΉ λ³μμ μ κ·Όνμ§ λͺ»νλ κ²μ νμΈ κ°λ₯
[ μ΅λͺ ν΄λμ€ (anonymous class) ]
- ν΄λμ€μ μ μΈ λ° κ°μ²΄ μμ±μ λμμ νλ μ΅λͺ ν΄λμ€
- ν΄λμ€λ₯Ό μΌνμ©μΌλ‘ μ¬μ©ν λ μμ£Ό μ΄μ©
- ν΄λμ€λͺ μ΄ μ‘΄μ¬νμ§ μλ λ΄λΆ ν΄λμ€μ (JSμ μ΅λͺ ν¨μμ μ μ¬)
- λ¨ νλμ κ°μ²΄λ§μ μμ±νλ μΌνμ© ν΄λμ€
- μμ±μκ° μ‘΄μ¬νμ§ μμ
- μΈν°νμ΄μ€λ₯Ό ꡬννλ ν΄λμ€λ νμ Objectμ μλΈ ν΄λμ€
- κΈ°μ‘΄ ν΄λμ€λ₯Ό λ©μλ λ΄λΆμμ μ΅λͺ ν΄λμ€λ‘ μ μΈνμ¬ λ©μλλ₯Ό μ¬μ μ νλ κΈ°λ²
[ λ΄λΆ μ΅λͺ ν΄λμ€ μμ ]
public class TestCode {
public static void main(String[] args) {
Object obj = new Object() {
@Override
public String toString() {
return "toString() μ€λ²λΌμ΄λ© μλ£";
}
};
String txt = obj.toString();
System.out.println(txt);
}
}
/* [μΆλ ₯ κ²°κ³Ό]
toString() μ€λ²λΌμ΄λ© μλ£
*/
· Object ν΄λμ€λ₯Ό μΌνμ±μΌλ‘ μ¬μ©νκΈ° μν΄ μ΅λͺ ν΄λμ€λ‘ μ μΈ
· μ΅λͺ ν΄λμ€ κ°μ²΄ objμμ μ€λ²λΌμ΄λ©ν toString() νΈμΆ
# μ°Έκ³ λΈλ‘κ·Έ : https://inpa.tistory.com/entry/JAVA-β-λ΄λΆ-ν΄λμ€Inner-Class-μ₯μ -μ’ λ₯