ì ìž ìì¹ì ë°ë¥ž ë³ìì ì¢ ë¥
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();
}
}
'ð¹ððð' 칎í ê³ ëŠ¬ì ë€ë¥ž êž
[Java] ìì±ì / this (1) | 2024.04.17 |
---|---|
[Java] ë³ìì ìŽêž°í & íŽëì€ì ìžì€íŽì€ì ìŽêž°í ìì (0) | 2024.04.16 |
[Java] íŽëì€ì ê°ì²Ž (0) | 2024.04.14 |
[Java] ê°ì²Ž ì§í¥ ìžìŽì ìì¬ & í¹ì§ (0) | 2024.04.13 |
[Java] ìììŽë / ììíŽëì€ / í¬íšêŽê³ / ëšìŒ ìì / ë€ì€ ìì / Object íŽëì€ (1) | 2024.04.12 |