[Java] λ³μ μ’ λ₯ / ν΄λμ€μ μλͺ μ£ΌκΈ° / λ©μλ / JVMμ λ©λͺ¨λ¦¬ ꡬ쑰 / κΈ°λ³Έν & μ°Έμ‘°ν 맀κ°λ³μ
μ μΈ μμΉμ λ°λ₯Έ λ³μμ μ’ λ₯
staticμ΄ λΆμΌλ©΄ ν΄λμ€ λ³μμ΄κ³ , staticμ΄ λΆμ§ μμΌλ©΄ μΈμ€ν΄μ€ λ³μμ΄λ€.
1οΈβ£ ν΄λμ€ λ³μ (Class Variables)
public class Student {
static String schoolName; // ν΄λμ€ λ³μ
String name; // μΈμ€ν΄μ€ λ³μ
int age; // μΈμ€ν΄μ€ λ³μ
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public static void main(String[] args) {
// ν΄λμ€ λ³μ κ° μ€μ
Student.schoolName = "ABC High School";
// κ°κ°μ μΈμ€ν΄μ€λ κ°λ³μ μΈ κ°μ κ°μ§λλ€.
Student student1 = new Student("Alice", 18);
Student student2 = new Student("Bob", 17);
// μΆλ ₯
System.out.println("Student 1 - Name: " + student1.name + ", Age: " + student1.age + ", School: " + Student.schoolName);
System.out.println("Student 2 - Name: " + student2.name + ", Age: " + student2.age + ", School: " + Student.schoolName);
/*
Student 1 - Name: Alice, Age: 18, School: ABC High School
Student 2 - Name: Bob, Age: 17, School: ABC High School
*/
}
}
ν΄λμ€ λ³μλ λͺ¨λ μΈμ€ν΄μ€κ° 곡ν΅λ μ μ₯곡κ°(λ³μ)μ 곡μ νκ² λλ€.
ν΄λμ€ λ³μλ μΈμ€ν΄μ€λ³μμ λ¬λ¦¬ μΈμ€ν΄μ€λ₯Ό μμ±νμ§ μκ³ λ μΈμ λΌλ λ°λ‘ μ¬μ©ν μ μλ€λ νΉμ§μ΄ μμΌλ©°, ν΄λμ€μ΄λ¦.ν΄λμ€λ³μ
μ κ°μ νμμΌλ‘ μ¬μ©νλ€.
βμΈμ μμ±λΌβ
ν΄λμ€κ° λ©λͺ¨λ¦¬μ ‘λ‘λ©(loading)’λ λ μμ±λμ΄ νλ‘κ·Έλ¨μ΄ μ’ λ£λ λκΉμ§ μ μ§λλ©°, publicμ μμ λΆμ΄λ©΄ κ°μ νλ‘κ·Έλ¨ λ΄μμ μ΄λμλ μ κ·Όν μ μλ μ μλ³μμ μ±κ²©μ κ°λλ€.
2οΈβ£ μΈμ€ν΄μ€ λ³μ (Instance Variables)
ν΄λμ€ μμμ μ μΈλλ€.
μΈμ€ν΄μ€λ λ 립μ μΈ μ μ₯곡κ°μ κ°μ§λ―λ‘ μλ‘ λ€λ₯Έ κ°μ κ°μ§ μ μλ€.
βμΈμ μ¬μ©β
μΈμ€ν΄μ€λ§λ€ κ³ μ ν μνλ₯Ό μ μ§ν΄μΌ νλ μμ±μ κ²½μ°, μΈμ€ν΄μ€ λ³μλ‘ μ μΈνλ€.
βμΈμ μμ±λΌβ
ν΄λΉ ν΄λμ€μ κ°μ²΄κ° μμ±λ λ μμ±λκ³ , κ°μ²΄μ μλͺ μ£ΌκΈ°μ λ°λΌ μ μ§λλ€.
3οΈβ£ μ§μ λ³μ (Local Variables)
public class Example {
public static void main(String[] args) {
int a = 5; // μ§μ λ³μ
System.out.println("Value of a: " + a);
}
}
βμΈμ μμ±λΌβ
ν΄λΉ λΈλ‘μ΄ μ€νλ λ μμ±λκ³ λΈλ‘μ λ²μκ° μ’ λ£λ λ μλ©Έλλ€.
βκ·ΈλΌ ν΄λμ€ λ³μλ μΈμ€ν΄μ€ λ³μλ μμ±λλ μκ° μ°¨μ΄κ° μΌλ§λ λλκ±°μ§β
→ ν΄λμ€μ μλͺ
μ£ΌκΈ°κ° μλλ° μμλ λ°κ³Ό κ°μ΄ μ§νλλ€.
β λ‘λ©(λ©λͺ¨λ¦¬μ λ‘λ)
β‘ λ§ν¬
β’ μ΄κΈ°ν(static) : ν΄λμ€ λ³μ
β£ μΈμ€ν΄μ€ν(new) : μΈμ€ν΄μ€ λ³μ
β€ μ¬μ©
β₯ μλ©Έ
λ°λΌμ, ν΄λμ€ λ³μλ ν΄λμ€ λ‘λ© λ° μ΄κΈ°ν μμ μ μμ±λλ©°, μΈμ€ν΄μ€ λ³μλ κ·Έ μ΄νμ κ°μ²΄κ° μμ±λ λλ§λ€ μμ±λλ€.
μκ° μ°¨μ΄λ ν΄λμ€ λ‘λ© μμ κ³Ό 첫 κ°μ²΄ μμ± μμ κ°μ μ°¨μ΄μΈλ°, νλ‘κ·Έλ¨μ λ°λΌ μ΄ μκ° μ°¨μ΄λ λ§€μ° μ§§μ μλ, μλμ μΌλ‘ κΈΈ μλ μλ€.
ν΄λμ€μ μλͺ μ£ΌκΈ°
1οΈβ£ λ‘λ©(Loading) : ν΄λμ€ νμΌμ΄ λ©λͺ¨λ¦¬μ λ‘λλλ λ¨κ³
- ν΄λμ€ νμΌμ λ°μ΄λ리 λ°μ΄ν°λ₯Ό μ½μ΄μ JVM λ΄μ λ©λͺ¨λ¦¬μ μ¬λ¦°λ€.
- μ΄ κ³Όμ μμ ν΄λμ€μ μ½λλ₯Ό κ²μ¦νκ³ , νμν μμμ μ€λΉ
2οΈβ£ λ§ν¬(Linking) : λ‘λ©λ ν΄λμ€ νμΌμ΄ νμν λ€λ₯Έ ν΄λμ€μ μ°κ²°λλ λ¨κ³
- λ‘λ© λ¨κ³μμ μ½μ΄μ¨ ν΄λμ€μ λ°μ΄λ리 λ°μ΄ν°λ₯Ό λ©λͺ¨λ¦¬μ μ¬λ¦° ν, JVM λ΄λΆμ λ°νμ μμ νμ ν΄λΉνλ ν΄λμ€μ λν μ°Έμ‘°λ₯Ό ν΄κ²°
- μ΄ λ¨κ³μμλ ν΄λμ€ λ³μμ λ©μλμ μ€μ λ©λͺ¨λ¦¬ μ£Όμκ° ν λΉ
3οΈβ£ μ΄κΈ°ν(Initialization) : static λ³μκ° μ΄κΈ°νλλ λ¨κ³
- ν΄λμ€ λ³μ(static λ³μ)κ° ν΄λΉ ν΄λμ€μ μΈμ€ν΄μ€ν μμ΄ μ¬μ©λ λ μ΄κΈ°ν
- ν΄λμ€ λ³μλ ν΄λΉ ν΄λμ€κ° λ‘λ©λκ³ λ§ν¬λ νμ μ΄κΈ°ν
- ν΄λμ€μ μ΄κΈ°ν λΈλ‘ λ° static λ³μλ€μ΄ μ μΈλ μμλλ‘ μ΄κΈ°ν
4οΈβ£ μΈμ€ν΄μ€ν(Instantiation) : ν΄λμ€μ κ°μ²΄κ° μμ±λλ λ¨κ³
new
ν€μλλ₯Ό μ¬μ©νμ¬ ν΄λμ€μ κ°μ²΄(μΈμ€ν΄μ€)κ° μμ±- μ΄λ
new
ν€μλλ‘ μμ±λ μΈμ€ν΄μ€λ ν(heap) λ©λͺ¨λ¦¬μ ν λΉ - μΈμ€ν΄μ€ λ³μλ ν΄λΉ κ°μ²΄κ° μμ±λ λλ§λ€ μμ±λκ³ , μΈμ€ν΄μ€μ μ΄κΈ°ν λΈλ‘μ΄λ μμ±μμ μν΄ μ΄κΈ°ν
5οΈβ£ μ¬μ©(Usage)
6οΈβ£ μλ©Έ(Garbage Collection)
λ μ΄μ μ¬μ©λμ§ μλ κ°μ²΄λ λ©λͺ¨λ¦¬μμ μ κ±°λλ€.
λ©μλ
νΉμ μμ μ μννλ μΌλ ¨μ λ¬Έμ₯λ€μ νλλ‘ λ¬Άμ κ².
κΈ°λ³Έμ μΌλ‘ μνμ ν¨μμ μ μ¬
λ©μλλ₯Ό μ¬μ©νλ μ΄μ
1οΈβ£ λμ μ¬μ¬μ©μ±(reusability)
2οΈβ£ μ€λ³΅λ μ½λμ μ κ±°
3οΈβ£ νλ‘κ·Έλ¨μ ꡬ쑰ν
int add (int x, int y) // μ μΈλΆ
{ // ꡬνλΆ
int result = x + y;
return result;
} // ꡬνλΆ
int
: λ°ννμ
(μΆλ ₯)
add
: λ©μλ μ΄λ¦
(int x, int y)
: 맀κ°λ³μ μ μΈ(μ
λ ₯)
return
: κ²°κ³Όλ₯Ό λ°ν
λ©μλμ λ°ν νμ μ΄ voidκ° μλ κ²½μ°, ꡬνλΆ{} μμ ‘return λ°νκ°;’μ΄ λ°λμ ν¬ν¨λμ΄ μμ΄μΌ νλ€.
λ°νκ°μ μ΅λ νλλ§ νμ©
int add(int x, int y) { ... } // OK.
int add(int x, y) { ... } // μλ¬. 맀κ°λ³μ yμ νμ
μ΄ μλ€.
voidλ return; νμνμλ€.
void helloWorld(){
System.out.println("Hellow World!!");
return; // λ°ν νμ
μ΄ voidμ΄λ―λ‘ μλ΅ κ°λ₯. μ»΄νμΌλ¬κ° μλμΆκ°
}
μ»΄νμΌλ¬κ° μλμΌλ‘ μΆκ°ν΄μ€¬λ κ².
κ·Έλ₯ μ무 μκ° μμ΄ μ°κ³ μμλ€.
맀κ°λ³μμ μ ν¨μ± κ²μ¬
λ©μλμ ꡬνλΆ{}λ₯Ό μμ±ν λ, μ μΌ λ¨Όμ ν΄μΌ νλ μΌμ΄ 맀κ°λ³μμ κ°μ΄ μ μ ν κ²μΈμ§ νμΈνλ κ²μ΄λ€.
‘νΈμΆνλ μͺ½μμ μμμ μ μ ν κ°μ λκ²¨μ£Όκ² μ§.’λΌλ μκ°μ μ λλ‘ κ°μ Έμλ μ λλ€.
float divide(int x, int y) {
// μμ
νκΈ° μ μ λλλ μκ° 0μΈμ§ νμΈν΄μΌ νλ€.
if ( y == 0 ) {
System.out.println("0μΌλ‘ λλ μ μμ΅λλ€.");
return 0;
}
}
λ©μλλ₯Ό μμ±ν λλ 맀κ°λ³μμ μ ν¨μ± κ²μ¬νλ μ½λλ₯Ό λ°λμ λ£λ κ² μ’λ€.
맀κ°λ³μμ μ ν¨μ± κ²μ¬λ λ©μλμ μμ±μ μμ΄μ κ°κ³ΌνκΈ° μ¬μ΄ μ€μν λΆλΆμ΄λ€.
JVMμ λ©λͺ¨λ¦¬ ꡬ쑰
1οΈβ£ Method Area
2οΈβ£ Call Stack
3οΈβ£ Heap
1οΈβ£ Method Area
νλ‘κ·Έλ¨ μ€ν μ€ μ΄λ€ ν΄λμ€κ° μ¬μ©λλ©΄, JVMμ ν΄λΉ ν΄λμ€μ ν΄λμ€ νμΌ(.class)μ μ½μ΄μ λΆμνμ¬ ν΄λμ€μ λν μ 보(ν΄λμ€ λ°μ΄ν°)λ₯Ό μ΄κ³³μ μ μ₯νλ€.
ν΄λμ€μ ν΄λμ€λ³μ(class variable)λ μ΄ μμμ ν¨κ» μμ±λλ€.
βν΄λμ€μ λν μ 보λβ
public class MyClass {
private int myField;
public MyClass() {
myField = 0;
}
public void setMyField(int value) {
myField = value;
}
public int getMyField() {
return myField;
}
public static void staticMethod() {
System.out.println("This is a static method.");
}
}
- ν΄λμ€μ μ΄λ¦:
MyClass
- νλ:
myField
- μμ±μ:
MyClass()
- λ©μλ:
setMyField(int value)
,getMyField()
,staticMethod()
μ΄λ° μ 보λ€μ μ μ₯νλ€.
2οΈβ£ Call Stack(νΈμΆ μ€ν λλ execution stack)
λ©μλμ μμ μ νμν λ©λͺ¨λ¦¬ 곡κ°μ μ 곡νλ€.
λ©μλκ° μμ μ μννλ λμ μ§μλ³μλ€κ³Ό μ°μ°μ μ€κ° κ²°κ³Ό λ±μ μ μ₯νλλ° μ¬μ©λλ€.
κ·Έλ¦¬κ³ λ©μλκ° μμ μ λ§μΉλ©΄ ν λΉλμλ λ©λͺ¨λ¦¬κ³΅κ°μ λ°νλμ΄ λΉμμ§λ€.
νΉμ§
- λ©μλκ° νΈμΆλλ©΄ μνμ νμν λ§νΌμ λ©λͺ¨λ¦¬λ₯Ό μ€νμ ν λΉλ°λλ€.
- λ©μλκ° μνμ λ§μΉκ³ λλ©΄ μ¬μ©νλ λ©λͺ¨λ¦¬λ₯Ό λ°ννκ³ μ€νμμ μ κ±°λλ€.
- νΈμΆμ€νμ μ μΌ μμ μλ λ©μλκ° νμ¬ μ€ν μ€μΈ λ©μλμ΄λ€.
- μλμ μλ λ©μλκ° λ°λ‘ μμ λ©μλλ₯Ό νΈμΆν λ©μλμ΄λ€.
3οΈβ£ Heap
μΈμ€ν΄μ€κ° μμ±λλ κ³΅κ° (μΈμ€ν΄μ€λ³μλ€μ΄ μμ±λλ 곡κ°)
κΈ°λ³Έν 맀κ°λ³μμ μ°Έμ‘°ν 맀κ°λ³μ
κΈ°λ³Έν 맀κ°λ³μ : λ³μμ κ°μ μ½κΈ°λ§ ν μ μλ€. (read only)
μ°Έμ‘°ν 맀κ°λ³μ : λ³μμ κ°μ μ½κ³ λ³κ²½ν μ μλ€. (read & wrtie)
β κ·Όλ° λλ체 μ? μμ΄? ν΅μΌμ±μ΄ μκ² κΈ°λ³Έν 맀κ°λ³μλ read onlyμ΄κ³ , μ°Έμ‘°ν 맀κ°λ³μλ read & writeμΌκΉβ
κΈ°λ³Ένκ³Ό μ°Έμ‘°ν 맀κ°λ³μμ μ°¨μ΄λ λ©λͺ¨λ¦¬μ μ μ₯λλ λ°©μμ μ°¨μ΄ λλ¬Έμ΄λ€.
- κΈ°λ³Έν 맀κ°λ³μ
- κΈ°λ³Έν 맀κ°λ³μλ κ°μ 볡μ¬νμ¬ μ λ¬νλ€.
- 맀κ°λ³μμ μ λ¬λ κ°μ ν¨μ λ΄μμ λ³κ²½λμ΄λ νΈμΆν ν¨μμ λ³μμλ μν₯μ λ―ΈμΉμ§ μλλ€.
- μ΄λ κΈ°λ³Ένμ΄ λ©λͺ¨λ¦¬μ μ§μ μ μ₯λλ κ°μ΄κΈ° λλ¬Έμ΄λ€.
- μ°Έμ‘°ν 맀κ°λ³μ
- μ°Έμ‘°ν 맀κ°λ³μλ λ³μμ μ£Όμλ₯Ό μ λ¬νλ€.
- 맀κ°λ³μμ μ λ¬λ λ³μμ κ°μ λ³κ²½νλ©΄ νΈμΆν ν¨μμ λ³μμλ μν₯μ λ―ΈμΉλ€.
- μ΄λ μ°Έμ‘°νμ΄ λ©λͺ¨λ¦¬μ κ°μ μ μΌλ‘ μ μ₯λλ κ°μ΄κΈ° λλ¬Έμ΄λ€.
μ°Έμ‘°νμ΄λ©΄ μΈμ€ν΄μ€μ μ£Όμκ° λ³΅μ¬λλ€.
μ£Όμλ₯Ό μ μ μκΈ° λλ¬Έμ κ°μ μ½μ΄ μ€λ κ²μ λ¬Όλ‘ κ°μ λ³κ²½νλ κ²λ κ°λ₯νλ€.
class Data { int x; }
class ReferenceParamEx {
public static void main(String[] args) {
Data d = new Data();
d.x = 10;
change(d);
System.out.println(d.x) // 1000
}
static void change(Data d){
d.x = 1000;
}
}
μ°Έμ‘°ν λ°ννμ
맀κ°λ³μλΏλ§ μλλΌ λ°ννμ λ μ°Έμ‘°νμ΄ λ μ μλ€.
λ°ννμ μ΄ μ°Έμ‘°νμ΄λΌλ κ²μ λ©μλκ° κ°μ²΄μ μ£Όμλ₯Ό λ°ννλ€λ κ²μ μλ―Ένλ€.
μ¬κ·νΈμΆ(recursive call)
void method() {
method(); // μ¬κ·νΈμΆ. λ©μλ μμ μ νΈμΆνλ€.
}
λ°λ³΅λ¬Έλ³΄λ€ μ¬κ·νΈμΆμ μνμκ°μ΄ λ μ€λ κ±Έλ¦°λ€.
→ λ°λ³΅λ¬Έμ κ·Έμ κ°μ λ¬Έμ₯μ λ°λ³΅ν΄μ μννλ κ²μ΄μ§λ§,
λ©μλλ₯Ό νΈμΆνλ κ²μ λ°λ³΅λ¬Έλ³΄λ€ λͺ κ°μ§ κ³Όμ μ΄ μΆκ°λ‘ νμνκΈ° λλ¬Έμ΄λ€.
(ex. 맀κ°λ³μ 볡μ¬μ μ’ λ£ ν 볡κ·ν μ£Όμμ μ₯ λ±)
βκ·Έλ λ€λ©΄ κ΅³μ΄ μ? μ¬μ©ν κΉ?β
→ μ¬κ·νΈμΆμ΄ μ£Όλ λ
Όλ¦¬μ κ°κ²°ν¨ λλ¬Έμ΄λ€.
λ°λ³΅λ¬Έλ³΄λ€ λ λ¨μν κ΅¬μ‘°λ‘ λ°λ μλ μλ€.
μμ보기 μ½κ² μμ±νλ κ²μ΄ (λΉν¨μ¨μ μ΄λλΌλ) λ Όλ¦¬μ μ€λ₯κ° λ°μν νλ₯ λ μ€μ΄λ€κ³ λμ€μ μμ νκΈ°λ μ’λ€.
κ·Έλμ λ¨Όμ λ°λ³΅λ¬ΈμΌλ‘ μμ±μ ν΄λ³΄κ³ , μ¬κ·νΈμΆλ‘ κ°λ¨ν ν μ μλμ§ κ³ λ―Όν΄λ³Ό νμκ° μλ€.
f(n) = n * f(n-1), λ¨ f(1) =1
ν©ν 리μΌμ μ¬κ·νΈμΆμ μ¬μ©νκΈ° μ’μ μμ μ΄λ€.
ν΄λμ€ λ©μλ(staticλ©μλ)μ μΈμ€ν΄μ€ λ©μλ
ν΄λμ€ λ©μλλ ν΄λμ€λ³μμ²λΌ, κ°μ²΄λ₯Ό μμ±νμ§ μκ³ λ ‘ν΄λμ€μ΄λ¦.λ©μλμ΄λ¦(맀κ°λ³μ)’μ κ°μ μμΌλ‘ νΈμΆμ΄ κ°λ₯νλ€.
λ°λ©΄μ μΈμ€ν΄μ€ λ©μλλ λ°λμ κ°μ²΄λ₯Ό μμ±ν΄μΌλ§ νΈμΆν μ μλ€.
1οΈβ£ ν΄λμ€λ₯Ό μ€κ³ν λ, λ©€λ²λ³μ μ€ λͺ¨λ μΈμ€ν΄μ€μ 곡ν΅μΌλ‘ μ¬μ©νλ κ²μ staticμ λΆμΈλ€.
2οΈβ£ ν΄λμ€ λ³μ(static λ³μ)λ μΈμ€ν΄μ€λ₯Ό μμ±νμ§ μμλ μ¬μ©ν μ μλ€.
3οΈβ£ ν΄λμ€ λ©μλ(static λ³μ)λ μΈμ€ν΄μ€ λ³μλ₯Ό μ¬μ©ν μ μλ€.
4οΈβ£ λ©μλ λ΄μμ μΈμ€ν΄μ€ λ³μλ₯Ό μ¬μ©νμ§ μλλ€λ©΄, staticμ λΆμ΄λ κ²μ κ³ λ €νλ€.
→ ν΄λμ€μ λ©€λ²λ³μ μ€ λͺ¨λ μΈμ€ν΄μ€μ 곡ν΅λ κ°μ μ μ§ν΄μΌνλ κ²μ΄ μλμ§ μ΄ν΄λ³΄κ³ μμΌλ©΄, staticμ λΆμ¬μ€λ€.
→ μμ±ν λ©μλ μ€μμ μΈμ€ν΄μ€ λ³μλ μΈμ€ν΄μ€ λ©μλλ₯Ό μ¬μ©νμ§ μλ λ©μλμ staticμ λΆμΌ κ²μ κ³ λ €νλ€.
class MyMath2 {
long a, b;
// μΈμ€ν΄μ€λ³μ a, bλ§μ μ΄μ©ν΄μ μμ
νλ―λ‘ λ§€κ°λ³μκ° νμ μλ€.
long add() {
return a + b;
}
// μΈμ€ν΄μ€ λ³μμ κ΄κ³μμ΄ λ§€κ°λ³μλ§μΌλ‘ μμ
μ΄ κ°λ₯νλ€.
static long add(long a, long b) {
return a+ b;
}
}
class MyMathTest2{
public static void main(String args[]) {
// ν΄λμ€λ©μλ νΈμΆ. μΈμ€ν΄μ€ μμ±μμ΄ νΈμΆκ°λ₯
System.out.println(MyMath2.add(200L, 100L));
MyMath2 mm = new MyMath2(); // μΈμ€ν΄μ€λ₯Ό μμ±
mm.a = 200L;
mm.b = 100L;
// μΈμ€ν΄μ€λ©μλμμλ κ°μ²΄μμ± νμλ§ νΈμΆμ΄ κ°λ₯ν¨
System.out.println(mm.add());
}
}
ν΄λμ€ λ©€λ²μ μΈμ€ν΄μ€ λ©€λ²κ°μ μ°Έμ‘°μ νΈμΆ
ν΄λμ€λ©€λ²λ μΈμ λ μ°Έμ‘° λλ νΈμΆμ΄ κ°λ₯!
νμ§λ§ μΈμ€ν΄μ€ λ©€λ²λ λ°λμ κ°μ²΄λ₯Ό μμ±ν νμλ§ μ°Έμ‘° λλ νΈμΆμ΄ κ°λ₯νκΈ° λλ¬Έμ ν΄λμ€λ©€λ²κ° μΈμ€ν΄μ€ λ©€λ²λ₯Ό μ°Έμ‘°, νΈμΆνκΈ° μν΄μλ κ°μ²΄λ₯Ό μμ±νμ¬μΌ νλ€.
class MemberCall {
int iv = 10;
static int cv = 20;
int iv2 = cv;
// static int cv2 = iv; // μλ¬. ν΄λμ€λ³μλ μΈμ€ν΄μ€ λ³μλ₯Ό μ¬μ©ν μ μμ
static int cv2 = new MemberCall().iv; // μ΄μ²λΌ κ°μ²΄λ₯Ό μμ±ν΄μΌ μ¬μ©κ°λ₯.
static void staticMethod1() {
System.out.println(cv);
// System.out.println(iv); // μλ¬. ν΄λμ€λ©μλμμ μΈμ€ν΄μ€λ³μλ₯Ό μ¬μ©λΆκ°.
MemberCall c = new MemberCall();
System.out.println(c.iv); // κ°μ²΄λ₯Ό μμ±ν νμμΌ μΈμ€ν΄μ€λ³μμ μ°Έμ‘°κ°λ₯.
}
void instanceMethod1() {
System.out.println(cv);
System.out.println(iv); // μΈμ€ν΄μ€λ©μλμμλ μΈμ€ν΄μ€λ³μλ₯Ό λ°λ‘ μ¬μ©κ°λ₯.
}
static void staticMethod2() {
ststicMethod1();
// instanceMethod1(); // μλ¬. ν΄λμ€λ©μλμμλ μΈμ€ν΄μ€λ©μλλ₯Ό νΈμΆν μ μμ.
MemberCall c =new MemberCall();
c.instanceMethod1(); // μΈμ€ν΄μ€λ₯Ό μμ±ν νμμΌ νΈμΆν μ μμ.
}
void instanceMethod2() {
// μΈμ€ν΄μ€λ©μλμμλ μΈμ€ν΄μ€λ©μλμ ν΄λμ€λ©μλ λͺ¨λ μΈμ€ν΄μ€ μμμμ΄ λ°λ‘ νΈμΆμ΄ κ°λ₯νλ€.
staticMethod1();
instanceMethod1();
}
}