- Today
- Total
- pytorch
- 벨λ§ν¬λ
- leetcode
- λ°μ΄ν°λ² μ΄μ€
- BFS
- λ°±μ€
- ꡬν
- λ¬Έλ²
- λ€μ΅μ€νΈλΌ
- PS
- μμμ λ ¬
- dp
- μΈν΄
- Algorithm
- μλ°μμ μ
- νλ‘κ·Έλλ¨Έμ€
- OOP
- μ‘Έμ μν
- μλ°
- CS
- 그리λ
- java
- Graph
- tree
- array
- database
- MST
- spring
- μλ£κ΅¬μ‘°
- λ°±μλ
Partially Committed
[CH06] κ°μ²΄μ§ν₯νλ‘κ·Έλλ°1 (OOP) λ³Έλ¬Έ
λ³Έ ν¬μ€ν μ μλ°μ μ μ κ΅μ¬λ₯Ό 곡λΆνλ©°, κ°λ¨ν μ 리/κΈ°λ‘ μ©λλ‘ μμ±νμμ΅λλ€. νΉμ¬, μλͺ»λ λ΄μ©μ΄ μλ€λ©΄ μ§μ ν΄μ£Όμλ©΄ κ°μ¬νκ² μ΅λλ€.
κΈ°μ μ΄ λ°μ ν μλ‘ νλ‘κ·Έλ¨μ κ·λͺ¨κ° 컀μ§κ³ μ¬μ©μλ€μ μκ΅¬κ° λΉ λ₯΄κ² λ³νν΄λκ°λ μν©μ μ μ°¨μ μΈμ΄λ‘λ ν΄κ²°νκΈ° μ΄λ €μ μΌλ©°, μ΄μ λν λμμΌλ‘ κ°μ²΄μ§ν₯μΈμ΄λ₯Ό μ΄μ©ν κ°λ°λ°©λ²λ‘ μ΄ λλλμλ€. κ°μ²΄ μ§ν₯ μΈμ΄λ μ½λ κ° μλ‘ κ΄κ³λ₯Ό λ§Ίμ΄μ£Όμ΄ μ κΈ°μ μΌλ‘ νλ‘κ·Έλ¨μ ꡬμ±ν μ μλ€. κ°μ²΄ μ§ν₯ μΈμ΄μ νΉμ§μ μλμ κ°λ€.
β μ½λμ μ¬μ¬μ©μ±μ΄ λλ€.
: μλ‘μ΄ μ½λλ₯Ό μμ±ν λ κΈ°μ‘΄ μ½λλ₯Ό μ΄μ©νμ¬ μ½κ² μμ±ν μ μλ€.
β μ½λμ μ μ§λ³΄μκ° μ©μ΄νλ€.
: μ½λ κ°μ κ΄κ³λ₯Ό μ΄μ©νμ¬ μ μ λ Έλ ₯μΌλ‘λ μ½κ² μ½λλ₯Ό μμ ν μ μλ€.
β μ λ’°μ±μ΄ λμ νλ‘κ·Έλλ°μ΄ κ°λ₯νλ€.
: μ μ΄μ/λ©μλλ₯Ό νμ©νμ¬ λ°μ΄ν°λ₯Ό 보νΈνκ³ μ¬λ°λ₯Έ κ°μ μ μ§νλλ‘ ν΄μ μ½λμ μ€λ³΅μ μ κ±°νμ¬ μ½λμ λΆμΌμΉλ‘λΆν° λ°μνλ μ€λμμ λ°©μ§ν μ μλ€.
μμ, λ€νμ±κ³Ό κ°μ κ°μ²΄μ§ν₯κ°λ μ λ°μλ€μΌ λ, μ½λμ μ¬μ¬μ©μ± / μ μ§λ³΄μ / μ€λ³΅λ μ½λμ μ κ±°μ κ°μ΄ 3 κ°μ§ κ΄μ μμ λ°λΌλ³΄λ©΄ λ³΄λ€ μ½κ² μ΄ν΄ν μ μλ€.
ν΄λμ€μ κ°μ²΄
ν΄λμ€λ κ°μ²΄μ μ€κ³λ/νμ΄λΌκ³ μ μν μ μμΌλ©° κ°μ²΄λ₯Ό μμ±νκΈ° μν΄ μ¬μ©νλ€. κ°μ²΄λ κ°μ§κ³ μλ κΈ°λ₯/μμ±μ λ°λΌμ μ©λκ° λ€λ₯΄λ©°, ν΄λμ€μ μ μλ λ΄μ©λλ‘ λ©λͺ¨λ¦¬μ μμ±λ κ²μ΄λΌκ³ μκ°νμ. ν΄λμ€μ κ°μ²΄μ κ΄κ³λ μ€κ³λμ μ ν κ°μ κ΄κ³λ₯Ό μκ°νλ©΄ λλ€. μ λ§λ€μ΄λμ μ€κ³λκ° μμΌλ©΄ μ νμ νμ§μ μλΉν 보μ₯λκΈ° λ§λ ¨μ΄λ€. JDK μμλ νλ‘κ·Έλλ°μ μν΄ λ§μ JAVA API λ₯Ό μ 곡νκ³ μμΌλ©° μ΄λ₯Ό μ΄μ©νμ¬ μνλ κΈ°λ₯μ μ€κ³ν μ μλ€.
κ°μ²΄μ μΈμ€ν΄μ€
ν΄λμ€λ‘λΆν° κ°μ²΄λ₯Ό λ§λλ κ³Όμ μ ν΄λμ€μ μΈμ€ν΄μ€ν(instantidate)λΌκ³ νλ€. μ΄λ¬ν ν΄λμ€λ‘λΆν° λ§λ€μ΄μ§ κ°μ²΄λ₯Ό ν΄λμ€μ μΈμ€ν΄μ€(instance)λΌκ³ νλ€. μΈμ€ν΄μ€μ κ°μ²΄λ κ°μ μλ―Έμ΄κΈ° λλ¬Έμ μ격ν ꡬλΆν νμλ μμ§λ§ ν΄λμ€μμ μΈμ€ν΄μ€ν μν¨ κ°μ²΄λ₯Ό λ³΄ν΅ μΈμ€ν΄μ€λΌκ³ νλ€.
κ°μ²΄μ κ΅¬μ± μμ - μμ±κ³Ό κΈ°λ₯
κ°μ²΄λ μΌλ°μ μΌλ‘ λ€μμ μμ±κ³Ό λ€μμ κΈ°λ₯μ κ°μ§λ€. κ°μ²΄λ μμ±κ³Ό κΈ°λ₯μ μ§ν©μ΄λ©° κ°μ²΄κ° κ°μ§κ³ μλ μμ± λ° κΈ°λ₯μ κ°μ²΄μ λ©€λ²(member)λΌκ³ νλ€. ν΄λμ€λ κ°μ²΄μ μ€κ³λμ΄λ―λ‘ κ°μ²΄μ λͺ¨λ μμ± λ° κΈ°λ₯μ΄ μ μλμ΄ μμΌλ©° ν΄λμ€λ‘λΆν° μμ±ν κ°μ²΄λ ν΄λμ€λ‘λΆν° κΈ°λ₯κ³Ό μμ±μ λΆμ¬λ°λ κ²μ΄λ€. μμ±κ³Ό κΈ°λ₯μ λνλ΄λ μ©μ΄λ μλμ κ°μ΄ λ€μνκ² μ‘΄μ¬νλ€.
μμ±(property) : λ©€λ²λ³μ(member variable), νΉμ±(attribute), νλ(field), μν(state)
κΈ°λ₯(function) : λ©μλ(method), ν¨μ(function), νμ(behavior)
classs TV{
/////////////////////////////////// μμ±
String color;
boolean power;
int channnel;
/////////////////////////////////// κΈ°λ₯
void power() { power = !power; }
void channelUp() { channel ++; }
void channelDown() { channel -- ; }
}
μΈμ€ν΄μ€μ μμ± λ° μ¬μ©
ν΄λμ€λ₯Ό μ μΈν κ²μ μ νμ μ€κ³λλ₯Ό μμ±ν κ²μ λΆκ³Όνλ©°, μΈμ€ν΄μ€λ₯Ό μμ±ν΄μΌ μ νμ μ¬μ©ν μ μλ€. ν΄λμ€λ‘λΆν° μΈμ€ν΄μ€λ₯Ό λ§λλ λ°©λ²μ μ¬λ¬ κ°μ§κ° μμ§λ§ μλμ λ°©μμ΄ λνμ μ΄λ€.
ν΄λμ€λͺ
λ³μλͺ
;
// ν΄λμ€μ κ°μ²΄λ₯Ό μ°Έμ‘°νκΈ° μν΄μ μ°Έμ‘° λ³μλ₯Ό μ μΈν κ²
λ³μλͺ
= new ν΄λμ€λͺ
();
// ν΄λμ€μ κ°μ²΄λ₯Ό μμ±ν λ€μ κ°μ²΄μ μ£Όμλ₯Ό μ°Έμ‘° λ³μμ μ μ₯ν κ²
class Tv{
String color;
boolean power;
int channel;
void power() { power = !power;}
void channelUp() { ++channel;}
void channelDown() { --channel;}
}
class TvSet{
public static void main(String[] args) {
Tv t; // TV μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°νκΈ° μν λ³μ t λ₯Ό μ μΈν κ²
t = new Tv(); // TV μΈμ€ν΄μ€λ₯Ό μμ±ν κ²
t.channel = 7; // λ©€λ²λ³μμ κ°μ 7λ‘ ν κ²
t.channelDown(); // λ©μλλ₯Ό νΈμΆν κ²
System.out.println("νμ¬ μ±λμ " + t.channel + " μ
λλ€.");
}
}
Tv t ;
λΌκ³ νλ©΄ Tv ν΄λμ€ νμ μ κ°μ§λ μ°Έμ‘° λ³μ t λ₯Ό μ μΈν κ²μΌλ‘, λ©λͺ¨λ¦¬μ μ°Έμ‘° λ³μ t λ₯Ό μν 곡κ°μ΄ λ§λ ¨λκ³ , μμ§ μΈμ€ν΄μ€κ° μμ±λκ²μ μλλ―λ‘ μ΄λ₯Ό μ΄μ©ν΄μ μ무κ²λ ν μ μλ€.
μ΄μ΄μ,
t = new Tv() ;
λΌκ³ νλ©΄ new operator μ μν΄μ Tv class μ μΈμ€ν΄μ€κ° memory μ λΉ κ³΅κ°μ μμ±λλ©°, λ©€λ² λ³μλ κ° μλ£νμ ν΄λΉνλ κΈ°λ³Έκ°μΌλ‘ μ΄κΈ°νλλ€. κ·Έλ¦¬κ³ λμ μ°μ°μμ μν΄ μμ±λ κ°μ²΄μ μ£Όμ κ°μ΄ μ°Έμ‘° λ³μμΈ t μ μ μ₯λλ©°, μ΄μ λΆν° t λ₯Ό μ΄μ©νμ¬ Tv μΈμ€ν΄μ€μ μ κ·Όμ΄ κ°λ₯ν΄μ§λ€. ( μΈμ€ν΄μ€λ₯Ό λ€λ£¨κΈ° μν΄μ λ°λμ μ°Έμ‘°λ³μκ° νμνλ€. )
t.channel = 7;
κ³Ό κ°μ΄ λ©€λ² λ³μμ μ κ·Όν μ μμΌλ©°,
t.channelDown();
μΌλ‘ μ°Έμ‘°λ³μ t κ° μ°Έμ‘°νκ³ μλ Tv μΈμ€ν΄μ€μ λ©μλμΈ channelDown μ νΈμΆν μ μλ€.
μΈμ€ν΄μ€λ μ°Έμ‘° λ³μλ₯Ό ν΅ν΄μλ§ λ€λ£° μ μλ κ²μ΄κ³ μ°Έμ‘° λ³μμ νμ μ μΈμ€ν΄μ€μ νμ κ³Ό μΌμΉν΄μΌ νλ€.
λ§μ½μ Tv μΈμ€ν΄μ€λ₯Ό t1, t2 λ‘ μ΄ 2κ°λ₯Ό μ μΈν λ€μ t2 = t1 μ μννλ€λ©΄ μ΄λ»κ² λ κΉ.
Tv t1 = new Tv(); μ Tv t2 = new Tv(); μμ μ°Έμ‘°λ³μ t1, t2 λ κ°κ°μ μΈμ€ν΄μ€μ μ£Όμλ₯Ό μ μ₯νλ€. μ΄λ t2 = t1 μ μννλ©΄ t2 κ° κ°μ§κ³ μλ μΈμ€ν΄μ€μ μ£Όμκ°μ μμ΄λ²λ¦¬κ² λκ³ t1 μ μ μ₯λμ΄ μλ μΈμ€ν΄μ€μ μ£Όμκ°μ΄ t2 μ μ μ₯λλ€. μ΄μ κ°μ΄ μμ μ μ°Έμ‘°νκ³ μλ μ°Έμ‘° λ³μκ° νλλ μλ μΈμ€ν΄μ€κ° λ°μνλ©΄, κ°λΉμ§ 컬λ ν° (Garbage Collector) μ μν΄ μλμΌλ‘ λ©λͺ¨λ¦¬κ° μ κ±°λλ€.
μ°Έμ‘° λ³μμλ νλμ κ°λ§μ΄ μ μ₯λ μ μμ΄μ λκ° μ΄μμ μ°Έμ‘° λ³μκ° νλμ μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°νλ κ²μ κ°λ₯νμ§λ§ νλμ μ°Έμ‘° λ³μλ‘ λ μ΄μμ μΈμ€ν΄μ€λ₯Ό κ°λ¦¬ν¬ μλ μλ€.
κ°μ²΄ λ°°μ΄
μ¬λ¬ κ°μ κ°μ²΄λ₯Ό λ€λ£¨μ΄μΌ νλ μν©μμ κ°μ²΄λ₯Ό λ°°μ΄λ‘ λ€λ£° μ μλ€. λ°°μ΄ μμ κ°μ²΄κ° μ μ₯λλ κ²μ μλκ³ , μ£Όμκ° μ μ₯λλ©° κ°μ²΄ λ°°μ΄μ μ°Έμ‘°λ³μλ€μ λ°°μ΄μ ννλ‘ λ¬Άμ΄λμ μ°Έμ‘° λ³μ λ°°μ΄μ΄λΌκ³ ν μ μλ€.
Tv tv1, tv2, tv3; -> Tv[ ] tvArr = new Tv[3];
μμ κ°μ΄ κ°μ²΄ λ°°μ΄μ μ μνλ©΄ κ°κ°μ μμλ€μ μ°Έμ‘° λ³μμ λν΄νΈκ°μΈ null λ‘ μ΄κΈ°νλλ©°, κ°μ²΄ λ°°μ΄μ μμ±ν΄λκ³ κ°μ²΄ λ°°μ΄μ κ° μμμ κ°μ²΄μ μ°Έμ‘° λ³μλ₯Ό μ μ₯νλ κ²μ μμ§ μλλ‘ μ μνμ.
Tv[] tvArr = new Tv[3];
tvArr[0] = new Tv();
tvArr[1] = new Tv();
tvArr[2] = new Tv();
// μμ κ°μ΄ κ°μ²΄ λ°°μ΄μ κ° μμμ μ μ₯ν μ μμ§λ§ μλμ κ°μ΄ μ¬μ©νλ κ²μ΄ κ°νΈνλ€.
Tv[ ] tvArr = { new Tv(), new Tv(), new Tv() };
// νΉμ
Tv[ ] tvArr = new Tv[100] ;
for(int i = 0 ; i < tvArr.length; i ++) {
tvArr[i] = new Tv();
}
κ°μ²΄ λ°°μ΄μλ κ°μ νμ μ κ°μ²΄λ§ μ μ₯λ μ μλ€. κ·Έλ¬λ©΄ μ΄λ»κ² νλ©΄ λ€μν νμ μ κ°μ²΄λ₯Ό νλμ λ°°μ΄μ μ μ₯ν μ μμκΉ? μ΄λ polymorhphism(λ€νμ±) μ λν μ΄ν΄κ° νμνλ€. - μΆν λ€λ£Έ.
ν΄λμ€μ λ λ€λ₯Έ μ μ
1. λ³μ : νλμ λ°μ΄ν°λ₯Ό μ μ₯ν μ μλ 곡κ°
2. λ°°μ΄ : κ°μ μ’ λ₯μ μ¬λ¬ λ°μ΄ν°λ₯Ό νλμ μ§ν©μΌλ‘ μ μ₯ν μ μλ 곡κ°
3. ꡬ쑰체 : μλ‘ κ΄λ ¨λμ΄ μλ μ¬λ¬ λ°μ΄ν°λ₯Ό μ’ λ₯μ κ΄κ³μμ΄ νλμ μ§ν©μΌλ‘ μ μ₯ν μ μλ 곡κ°
4. ν΄λμ€ : λ°μ΄ν°μ ν¨μμ κ²°ν©μ μλ―Έ
μλ°μ κ°μ κ°μ²΄μ§ν₯μΈμ΄μμλ λ³μμ ν¨μλ₯Ό νλμ ν΄λμ€μμ μ μν΄μ κ°κ°μ κ΄κ³λ₯Ό μ½κ² λ€λ£° μ μλλ‘ νμλ€. μ΄μ κ°μ΄ μλ‘ κ΄λ ¨λμ΄ μλ λ³μλ₯Ό μ μνκ³ , ν΄λΉ λ³μλ€μ λν μ²λ¦¬λ₯Ό μννλ ν¨μλ₯Ό μ μν κ²μ΄ ν΄λμ€μ΄λ€. CμΈμ΄μμ λ¬Έμμ΄μ char λ°°μ΄μ΄μ§λ§ JAVA μμλ String ν΄λμ€λ‘ λ€λ£¨λλ°, μ΄λ λ¬Έμμ΄μ λ¨μν λ°°μ΄λ‘ 보λ κ²μμ λ³΄λ€ λμκ°, λ¬Έμμ΄ λ°μ΄ν°μ μ΄λ₯Ό λ€λ£¨λ ν¨μλ€μ λ¬ΆκΈ° μν¨μ΄λ€.
κ°μ²΄μ§ν₯μΈμ΄μμ μ¬μ©μ μ μ νμ (user - defined type)μ λ°λ‘ class μ κ°λ€. μλ‘ κ΄λ ¨λμ΄ μλ λ°μ΄ν°λ€μ νλμ μλ―Έ λ¨μλ‘ λ¬Άμ΄μ μ¬μ©ν μ μλλ°, class λ₯Ό μ΄μ©νλ©΄ κ°κ°μ λ°μ΄ν°μ λν inconsistency λ₯Ό λ°©μ§νκΈ° μν΄ μ μ΄μ/λ©μλλ₯Ό νμ©νμ¬ λ°μ΄ν° 무결μ±μ μ μ§ν μ μλ€.
public class Time{
private int hour;
private int minute;
private float second;
public int getHour() { return hour;}
public int getMinute() { return minute; }
public int getSecond() { return second; }
public void setHour(int h){
if(h<0 || h>23) return;
hour = h;
}
public void setMinute(int m){
if (m<0 || m>59) return;
minute = m;
}
public void setSecond(float s){
if(s<0.0f || s>59.99f) return;
second = s;
}
}
μ μΈ μμΉμ λ°λ₯Έ λ³μμ μ’ λ₯
λ³μλ ν΄λμ€ λ³μ, μΈμ€ν΄μ€ λ³μ, μ§μ λ³μλ‘ μ΄ 3 κ°μ§λ‘ ꡬλΆν μ μλλ° μ μΈλ μμΉμ λ°λΌμ κ²°μ λλ€. λ©€λ² λ³μλ₯Ό μ μΈν λλ¨Έμ§ λ³μλ€μ λͺ¨λ μ§μ λ³μμ΄λ©°, λ©€λ² λ³μ μ€μμ static ν€μλκ° λΆμ κ²μ ν΄λμ€ λ³μλΌκ³ νκ³ κ·Έλ μ§ μμ κ²μ μΈμ€ν΄μ€ λ³μμ΄λ€.
β μΈμ€ν΄μ€ λ³μ (Instance variable)
: ν΄λμ€ μμμμ μ μΈλ λ³μλ‘ ν΄λμ€κ° μΈμ€ν΄μ€λ₯Ό μμ±ν λ λ§λ€μ΄μ§λ€. κ·Έλμ μΈμ€ν΄μ€ λ³μμ γ±λ°§μ μ½κ±°λ μ μ₯νλ €λ©΄ μΈμ€ν΄μ€λ₯Ό λ¨Όμ μμ±ν΄μΌ νλ€. μΈμ€ν΄μ€λ λ 립μ μΈ μ μ₯곡κ°μ κ°μ§κΈ° λλ¬Έμ μλ‘ λ€λ₯Έ κ°μ κ°μ§ μ μλλ°, μΈμ€ν΄μ€λ§λ€ κ³ μ ν μνλ₯Ό μ μ§ν΄μΌ νλ μμ±μ μΈμ€ν΄μ€ λ³μλ‘ μ μΈνλ€.
β ν΄λμ€ λ³μ (Class variable)
: ν΄λμ€ μμμμ μ μΈλ λ³μλ‘ ν΄λμ€κ° λ©λͺ¨λ¦¬μ μ¬λΌκ°λ©΄ μμ±λλ©°, μΈμ€ν΄μ€ λ³μ μμ static ν€μλλ₯Ό λΆμ΄λ©΄ λλ€. μΈμ€ν΄μ€ λ§λ€ λ 립μ μΈ μ μ₯ 곡κ°μ κ°μ§λ μΈμ€ν΄μ€ λ³μμλ λ€λ₯΄κ² ν΄λμ€ λ³μλ λͺ¨λ μΈμ€ν΄μ€κ° 곡ν΅λ μ μ₯곡κ°μ 곡μ νλ€. λ¨μΌ ν΄λμ€μ λͺ¨λ μΈμ€ν΄μ€λ€μ΄ 곡ν΅μ μΈ κ°μ μ μ§νλλ‘ νκΈ° μν΄μλ ν΄λΉ μμ±μ ν΄λμ€ λ³μλ‘ μ μΈν΄μΌ νλ€. ν΄λμ€ λ³μλ μΈμ€ν΄μ€ λ³μμλ λ€λ₯΄κ² μΈμ€ν΄μ€λ₯Ό μμ±μΉ μκ³ λ μ¬μ©ν μ μλ€. ν΄λμ€κ° λ©λͺ¨λ¦¬μ loading λ λ μμ±λκ³ μ΄ν νλ‘κ·Έλ¨μ΄ μ’ λ£λ λ κΉμ§ μ μ§λλλ°, public ν€μλλ₯Ό μμ λΆμ΄λ©΄ μ μλ³μμ μ±κ²©μ κ°μ§κ² λλ€.
β μ§μ λ³μ(Local variable)
: λ©μλ λ΄μμ μ μΈμ΄ λλ©΄ ν΄λΉ λ©μλ λ΄μμλ§ μ¬μ©μ΄ κ°λ₯νλ©°, λ©μλκ° μ’ λ£λ¨κ³Ό λμμ μλ©Έλμ΄ μ¬μ©ν μ μλ€.
λ©μλ
λ©μλ(method)λ νΉμ μμ μ μννλ μΌλ ¨μ λ¬Έμ₯λ€μ νλμ λ¨μλ‘ λ¬Άμ κ²μΌλ‘, ν¨μμ λΉμ·ν μλ―Έμ΄λ©° λ©μλλ₯Ό μ¬μ©ν¨μΌλ‘μ¨ 3 κ°μ§ μ₯μ μ μ»μ μ μλ€.
β λμ μ¬μ¬μ©μ±(reusability)
: λ§λ€μ΄μ§ λ©μλλ μμμ΄ νΈμΆμ΄ κ°λ₯νλ€.
β μ€λ³΅λ μ½λμ μ κ±°
: μ½λλ₯Ό μ§λ€ 보면 μ€λ³΅λλ λΆλΆμ΄ μΌλΆ λ°μνκ² λλλ°, ν΄λΉ λΆλΆμ λ©μλλ‘ λ§λ€ κ²½μ° λ°λ³΅λλ λ¬Έμ₯μ νλμ λ¬Έμ₯μΌλ‘ μ€μΌ μ μμ΄μ μ½λμ μ μ§λ³΄μμ μ 리νλ€.
β νλ‘κ·Έλ¨μ ꡬ쑰ν
: ν° κ·λͺ¨μ νλ‘κ·Έλ¨μ μ€κ³νλ λ¨κ³μμ λ©μλλ₯Ό μ¬λ¬ κ° μ μνμ¬ λ³΅μ‘ν νλ‘κ·Έλ¨μ ꡬ쑰λ₯Ό λ¨μνμν¬ μ μλ€.
λ©μλλ μ μΈλΆ(header)μ ꡬνλΆ(body)λ‘ μ΄λ£¨μ΄μ Έ μμΌλ©°, μ μΈλΆμμλ λ©μλμ μ΄λ¦κ³Ό 맀κ°λ³μ λ° λ°ν νμ μ μ€μ νλ€. λ©μλμ ꡬνλΆ(body) μμλ μνλ λμμ ν΄λΉνλ λ¬Έμ₯μ λ£μΌλ©΄ λλλ°, λ©μλκ° λ°νκ°μ κ°μ§ κ²½μ° μ§μ ν λ°ν νμ κ³Ό μΌμΉνκ±°λ μλ νλ³νμ΄ κ°λ₯ν΄μΌλ§ νλ€.
μΈμ(argument)μ 맀κ°λ³μ(parameter)
: λ©μλλ₯Ό νΈμΆ ν λ, κ΄νΈ μμ λ£μ΄μ£Όλ κ°λ€μ μΈμλΌκ³ νλ€. μ΄λ¬ν μΈμλ€μ λ©μλκ° νΈμΆλ¨μ λ°λΌ 맀κ°λ³μμ λμ λλ€. 맀μλμ ꡬνλΆλ₯Ό μμ±ν λ λ°λμ λ§€κ° λ³μμ κ°μ΄ μ μ ν μ§ νμΈν΄μΌ νλ€. μ΄μ λμμ λν μμΈμ²λ¦¬μ λν΄ λ°λμ κ³ λ €νλ λ°©μ΄μ νλ‘κ·Έλλ°μ μννλλ‘ νλ€.
JVM μ λ©λͺ¨λ¦¬ ꡬ쑰
μμ© νλ‘κ·Έλ¨μ΄ μ€νλλ©΄ JVM μ system μΌλ‘λΆν° νλ‘κ·Έλ¨μ μννκΈ° μν λ©λͺ¨λ¦¬λ₯Ό ν λΉλ°κ³ JVM μ ν΄λΉ λ©λͺ¨λ¦¬ μμμ μ©λμ λ§μΆμ΄ μ¬λ¬ μμμΌλ‘ ꡬλΆνμ¬ κ΄λ¦¬νλ€. κ·Έ μ€, 3κ°μ§ μ£Όμ μμμΈ method area , call stack, heap μ λν΄ μ΄ν΄λ³΄μ.
β Method area
: νλ‘κ·Έλ¨μ΄ μ€νλλ μ€ μ΄λ€ ν΄λμ€κ° μ¬μ©λλ©΄, JVM μ ν΄λΉ ν΄λμ€ νμΌμ μ½μ λ€ λΆμνμ¬ ν΄λμ€μ λν μ 보 λ° ν΄λμ€ λ³μλ₯Ό Method area μ μ μ₯νλ€.
β Heap
: μΈμ€ν΄μ€κ° μμ±λλ 곡κ°μΌλ‘ νλ‘κ·Έλ¨ μ€ν λμ€ μμ±λλ μΈμ€ν΄μ€λ€μ μ¬κΈ°μ μ μ₯λλ€.
β call stack | execution stack
: νΈμΆ μ€ν(call stack)μ λ©μλ μμ μ νμν λ©λͺ¨λ¦¬ 곡κ°μ μ 곡νλ©°, λ©μλκ° νΈμΆλλ©΄ call stack μ νΈμΆλ λ©μλλ₯Ό μν λ©λͺ¨λ¦¬κ° ν λΉλκ³ ν΄λΉ λ©λͺ¨λ¦¬λ λ©μλκ° μμ μ μννλ λμμ μ§μλ³μ(parameter ν¬ν¨)λ€κ³Ό μ°μ°μ μ€κ° κ²°κ³Όλ€μ μ μ₯νλλ° μ¬μ©λλ€. λ©μλκ° μμ μ λ§μΉλ©΄ ν λΉλ λ©λͺ¨λ¦¬ 곡κ°μ λ°νλμ΄ λΉμμ§λ€. κ°κ°μ λ©μλλ₯Ό μν 곡κ°μ ꡬλ³λλ€. κ°μ₯ μ²μμ νΈμΆλ λ©μλμ 곡κ°μ κ°μ₯ μλμ λ§λ ¨λλ€. 첫 λ²μ§Έμ νΈμΆλ λ©μλμ μν λμ€ λ λ²μ§Έ λ©μλλ₯Ό νΈμΆνλ κ²½μ°, 첫 λ²μ§Έ λ©μλμ κ³΅κ° λ°λ‘ μμ λ λ²μ§Έ λ©μλμ μμ 곡κ°μ΄ λ§λ ¨λκ³ μνλ μ΄νμ λ λ²μ§Έ λ©μλμ λ©λͺ¨λ¦¬λ λ°νλκ³ λ€μ μ΄μ΄μ 첫 λ²μ§Έ λ©μλκ° μνλλ ꡬ쑰μ΄λ€. κ·Έλ¬λ―λ‘ νμ¬ μνλκ³ μλ λ©μλλ₯Ό νμΈνκ³ μ ν λμλ νΈμΆ μνμ κ°μ₯ μμ μμΉμ λ©μλλ₯Ό νμΈνλ©΄ λλ€.
νΈμΆ μ€νμ νΉμ§μ μ 리νλ©΄ μλμ κ°λ€.
1. λ©μλκ° νΈμΆλλ©΄ μνμ νμν λ©λͺ¨λ¦¬λ₯Ό μ€νμ ν λΉλ°μ.
2. λ©μλμ μνμ΄ λλλ©΄ λ©λͺ¨λ¦¬κ° λ°νλκ³ μ€νμμ μ κ±°λ¨.
3. νΈμΆμ€νμ κ°μ₯ μμ μμΉν λ©μλκ° λ°λ‘ νμ¬ μ€ν μ€μΈ λ©μλμ.
4. μλμ μλ λ©μλλ λ°λ‘ μμ μλ λ©μλλ₯Ό νΈμΆν parent λ©μλμ.
class CallStackTest{
public static void main(String[] args) {
firstMethod();
}
static void firstMethod(){
secondMethod();
}
static void secondMethod(){
System.out.println("secondMethod()");
}
}
main() μ firstMethod λ₯Ό νΈμΆνλ€. κ·Έλ¦¬κ³ firstMethod() λ secondMethod() λ₯Ό νΈμΆνλλ°, κ°μ²΄λ₯Ό μμ±νμ§ μκ³ λ λ©μλκ° νΈμΆλ μ μλλ‘ νκΈ° μν΄μλ μμ static ν€μλλ₯Ό λΆμ¬μ£Όμ΄μΌ νλ€.
1. λ¨Όμ JVM μ μν΄μ main λ©μλκ° νΈμΆλλ―λ‘ νΈμΆ μ€νμλ main λ©μλλ₯Ό μν 곡κ°μ΄ ν λΉλκ³ main λ©μλκ° μνλλ€.
2. main λ©μλ μν λμ€ firstMethod() λ₯Ό νΈμΆνλ―λ‘ νΈμΆ μ€νμ main λ©μλλ λκΈ° μνλ‘ λ¨μμκ³ μμ firstMethod λ©μλλ₯Ό μν μμ 곡κ°μ΄ ν λΉλκ³ μνμ μμνλ€.
3. firstMethod() μν λμ€ SecondMethod() λ₯Ό νΈμΆνλ―λ‘, firstMethod() λν λκΈ° μνλ‘ λ¨μμκ² λκ³ SecondMethod() λ₯Ό μν μμ 곡κ°μ΄ ν λΉλκ³ μνλλ€.
4. SecondMethod() μμ println() μ νΈμΆνλ―λ‘, println λ©μλμ μν΄ SecondMethond() λΌλ λ¬Έμ₯μ΄ μΆλ ₯λλ€.
5. println λ©μλμ μνμ΄ μλ£λλ©΄ νΈμΆ μ€νμμ μ¬λΌμ§λλ°, parent method μΈ SecondMethod() λ μ΄νμ μνν μ½λκ° μμΌλ―λ‘ μμ°¨μ μΌλ‘ SecondMethod() λ νΈμΆ μ€νμμ μ¬λΌμ§λ€.
6. κ°μ λ Όλ¦¬λ‘ main λ©μλ κΉμ§ νΈμΆ μ€νμμ λΉμμ§κ² λκ³ μ΅μ’ μ μΌλ‘ νλ‘κ·Έλ¨μ΄ μ’ λ£λλ€.
κΈ°λ³Έν 맀κ°λ³μμ μ°Έμ‘°ν 맀κ°λ³μ
λ©μλλ₯Ό νΈμΆν λ 맀κ°λ³μλ₯Ό 볡μ¬ν΄μ λ겨주λλ°, κΈ°λ³ΈνμΈ κ²½μ°μλ κ°μ΄ 볡μ¬λμ§λ§ μ°Έμ‘°νμΈ κ²½μ°μλ μΈμ€ν΄μ€μ μ£Όμκ° λ³΅μ¬λλ€. λ©μλμ 맀κ°λ³μλ₯Ό κΈ°λ³ΈνμΌλ‘ μ μΈνλ€λ©΄ μ€μ§ read λ§ κ°λ₯νμ§λ§, μ°Έμ‘°νμΌλ‘ μ μΈν κ²½μ° read & write κ° κ°λ₯νλ€.
class ArrayExample{
public static void main(String[] args) {
int[] arr = new int[] { 3, 2, 1, 6, 5, 4};
printArr(arr);
sortArr(arr);
printArr(arr);
System.out.println("sum = " + sumArr(arr));
}
static void printArr(int[] arr){
System.out.println("[");
for(int i : arr)
System.out.println(i + ", ");
System.out.println("]");
}
static int sumArr(int[] arr){
int sum = 0;
for(int i = 0 ; i <arr.length ; i++)
sum += arr[i];
return sum;
}
static void sortArr(int[] arr) {
for (int i = 0; i < arr.length - 1; i++)
for (int j = 0; j < arr.length - 1 - i; j++)
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
μ¬κ· λ©μλ(Recursive method)
λ©μλ μ€ν λμ€ μκΈ° μμ μ λ€μ νΈμΆνλ λ©μλλ₯Ό μ¬κ· λ©μλλΌκ³ μΌμ»«λλ€. μ΄μ κ°μ μ¬κ· ν¨μλ₯Ό 지 λλ νμΆ μ‘°κ±΄μ λͺ ννκ² μ ν΄μ£Όμ΄μΌ νλ€. κ·Έλ μ§ λͺ»νλ©΄ 무ν 루νμ λΉ μ§κ² λλ€. λ©μλλ₯Ό νΈμΆνλ κ²μ λ¨μ λ°λ³΅ 루νμ λΉκ΅νλ©΄ 맀κ°λ³μμ 볡μ¬μ μ’ λ£ ν 볡κ·ν μ£Όμλ₯Ό μ μ₯νλ κ³Όμ λ±μ΄ μΆκ°λ‘ νμνκΈ° λλ¬Έμ μ¬κ· νΈμΆμ μνμκ°μ΄ λ μ€λ κ±Έλ¦°λ€. κ·ΈλΌμλ μ¬κ· νΈμΆμ μ¬μ©νλ μ΄μ λ λ°λ‘ λ Όλ¦¬μ κ°κ²°μ± λλ¬Έμ΄λ€. μλλ μ¬κ· λ©μλμ λνκ²©μΈ ν©ν 리μΌμ ν μ€νΈ ν μ μλλ‘ κ΅¬νν κ²μ΄λ€. ν΄λμ€ λ΄λΆμμ factorial μ static method μ΄κΈ° λλ¬Έμ μΈμ€ν΄μ€λ₯Ό λ§λ€μ§ μκ³ λ νΈμΆνμ¬ ν μ€νΈν μ μλ€.
class FactorialTest{
public static void main(String[] args) {
int result = factorial(4);
System.out.println(result);
}
static int factorial(int n){
int result = 0;
if( n == 1)
result = 1;
else
result = n*factorial(n-1);
return result;
}
}
μλλ μ§μν©μ ν μ€νΈνλ ν΄λμ€μ΄λ€.
class PowerTest{
public static void main(String[] args) {
int x = 2;
int n = 5;
long result = 0;
for(int i = 1; i <=n ; i++)
result += power(x,i);
System.out.println(result);
}
static long power(int x, int n){
if(n==1) return x;
return x * power(x, n-1);
}
}
ν΄λμ€ λ©μλ(static λ©μλ)μ μΈμ€ν΄μ€ λ©μλ
ν΄λμ€ λ©μλλ ν΄λμ€ λ³μμ κ°μ΄ κ°μ²΄λ₯Ό λ°λ‘ μμ±νμ§ μκ³ λ ν΄λμ€μ΄λ¦.λ©μλμ΄λ¦ μ κ°μ λ°©μμΌλ‘ νΈμΆμ΄ νλ₯ν κ²μ΄λ©°, μΈμ€ν΄μ€ λ©μλλ λ°λμ κ°μ²΄λ₯Ό μμ±ν΄μΌμ§λ§ νΈμΆμ΄ κ°λ₯ν λ©μλμ΄λ€. λ³΄ν΅ μΈμ€ν΄μ€ λ³μμ κ΄λ ¨λ μμ μ΄ μꡬλλ κ²½μ° μΈμ€ν΄μ€ λ©μλλ‘ λ§λ€κ³ , μΈμ€ν΄μ€μ κ΄κ³μμ΄ μμ μ΄ κ°λ₯ν κ²½μ° ν΄λμ€ λ©μλλ‘ μ μνκ³€ νλ€.
β ν΄λμ€λ₯Ό μ€κ³ν λμλ λ©€λ² λ³μ μ€ λͺ¨λ μΈμ€ν΄μ€μ 곡ν΅μ μΌλ‘ μ¬μ©νλ κ²μ static μ λΆμ΄λλ‘ νλ€.
: μμ±λλ κ° μΈμ€ν΄μ€λ€μ μλ‘ λ 립μ μΈ κ΄κ³μ΄κΈ° λλ¬Έμ κ°κ°μ μΈμ€ν΄μ€ λ³μλ€μ μλ‘ λ€λ₯Έ κ°μ μ μ§νμ§λ§ λͺ¨λ μΈμ€ν΄μ€μ λνμ¬ κ°μ κ°μ΄ μ μ§λμ΄μΌ νλ λ³μλ static ν€μλλ₯Ό μ΄μ©νμ¬ ν΄λμ€ λ³μλ‘ μ μνλλ‘ νλ€.
β ν΄λμ€ λ³μ(static λ³μ)λ μΈμ€ν΄μ€λ₯Ό μμ±νμ§ μμλ μ¬μ©ν μ μλ€.
: static ν€μλκ° λΆμ λ³μ(class λ³μ)λ ν΄λμ€κ° λ©λͺ¨λ¦¬μ μ¬λΌκ° λ μλμ μΌλ‘ μμ±λκΈ° λλ¬Έμ΄λ€.
β ν΄λμ€ λ©μλ(static λ©μλ)λ μΈμ€ν΄μ€ λ³μλ₯Ό μ¬μ©ν μ μλ€.
: μΈμ€ν΄μ€ λ³μλ μΈμ€ν΄μ€κ° λ°λμ μ‘΄μ¬ν΄μΌμ§λ§ μ¬μ©μ΄ κ°λ₯νλ€. μ΄λ ν΄λμ€ λ©μλλ μΈμ€ν΄μ€ μμ±κ³Ό κ΄κ³ μμ΄ νΈμΆμ΄ κ°λ₯νκΈ° λλ¬Έμ ν΄λμ€ λ©μλκ° νΈμΆ λ κ²½μ° μΈμ€ν΄μ€κ° μ‘΄μ¬νμ§ μμ μλ μλ€. κ·Έλ κΈ° λλ¬Έμ ν΄λμ€ λ©μλμμ μΈμ€ν΄μ€ λ³μμ μ¬μ©μ κΈμ§νλ λ°λ©΄ μΈμ€ν΄μ€ λ³μ λ° μΈμ€ν΄μ€ λ©μλμμλ static ν€μλκ° λΆμ λ©€λ²λ€μ μ¬μ©νλ κ²μ΄ νμ κ°λ₯νλ°, μ΄λ μΈμ€ν΄μ€ λ³μκ° μ‘΄μ¬νλ€λ κ²μ΄ static λ³μκ° λ©λͺ¨λ¦¬μ μ΄λ―Έ μ¬λ €μ Έ μλ€λ κ²μ μλ―ΈνκΈ° λλ¬Έμ΄λ€.
β λ©μλ λ΄μμ μΈμ€ν΄μ€ λ³μλ₯Ό μ¬μ©νμ§ μλ κ²½μ°, static λ©μλλ‘ μ¬μ©νλ κ²μ κ³ λ €νλ€.
: λ©μλμ μμ λ΄μ© μ€, μΈμ€ν΄μ€λ³μκ° νμνλ€λ©΄ static ν€μλλ₯Ό λΆμΌ μ μμ§λ§ μΈμ€ν΄μ€ λ³μλ₯Ό μ¬μ©νμ§ μλ λ©μλλΌλ©΄ static ν€μλλ₯Ό λΆμ΄λ©΄ λ©μλμ νΈμΆ μκ°μ΄ λ³΄λ€ μ§§μμ§κΈ° λλ¬Έμ μ±λ₯μ΄ μ¬λΌκ°λ ν¨κ³Όκ° μλ€. static ν€μλλ₯Ό λΆμ΄μ§ μμ μΈμ€ν΄μ€ λ©μλμ κ²½μ° μ€νν λ νΈμΆλμ΄μΌ ν λ©μλλ₯Ό μ°Ύλ κ³Όμ μ΄ μΆκ°μ μΌλ‘ νμνκΈ° λλ¬Έμ΄λ€.
ν΄λμ€ λ©μλμ μΈμ€ν΄μ€ λ©€λ²κ°μ μ°Έμ‘°μ νΈμΆ
κ°μ ν΄λμ€ λ΄λΆμ λ©€λ² κ°μλ λ³λμ μΈμ€ν΄μ€λ₯Ό λ§λ€μ§ μμλ μλ‘ μ°Έμ‘°/νΈμΆμ΄ κ°λ₯νλ€. μ΄λ ν΄λμ€ λ©€λ²κ° μΈμ€ν΄μ€ λ©€λ²λ₯Ό μ°Έμ‘°/νΈμΆνλ €κ³ νλ©΄ μΈμ€ν΄μ€λ₯Ό μμ±ν΄μΌ νλ€. μλλ©΄ μΈμ€ν΄μ€ λ©€λ²κ° μ‘΄μ¬νλ μμ μ ν΄λμ€ λ©€λ²λ νμ μ‘΄μ¬νλλ°, ν΄λμ€ λ©€λ²κ° μ‘΄μ¬νλ μμ μ μΈμ€ν΄μ€ λ©€λ²(μΈμ€ν΄μ€ λ³μ λ° λ©μλ)λ μ‘΄μ¬νμ§ μμ μ μλ€.
κ°μ ν΄λμ€ λ΄μ μΈμ€ν΄μ€ λ©μλμ static λ©μλ κ°μ νΈμΆμ μ€λͺ νκ³ μλ μ½λμ΄λ€. μμ κ²½μ° staticMethod2 μμ instanceMethod λ₯Ό νΈμΆνλ €κ³ νμ§λ§ μλ¬κ° λ¨λ λͺ¨μ΅μ΄λ€. κ°μ ν΄λμ€ λ΄μ λ©μλλ μλ‘ κ°μ²΄μ μμ± νΉμ μ°Έμ‘°λ³μ μμ΄ μ§μ νΈμΆμ΄ κ°λ₯νμ§λ§ static λ©μλ μΈμ€ν΄μ€ λ©μλλ₯Ό νΈμΆν μ μκΈ° λλ¬Έμ΄λ€. (μΈμ€ν΄μ€ λ©€λ²κ° μ‘΄μ¬ν λ ν΄λμ€ λ©€λ²λ νμ μ‘΄μ¬νκ² μ§λ§, λ°λλ‘ ν΄λμ€ λ©€λ²κ° μ‘΄μ¬νλ€κ³ νλλΌκ³ μΈμ€ν΄μ€ λ©€λ²κ° μ‘΄μ¬ν κ²μ΄λΌλ 보μ₯μ μκΈ° λλ¬Έμ΄λ€.)
μΈμ€ν΄μ€ λ©μλλ μΈμ€ν΄μ€ λ³μλ₯Ό νΈμΆ/μ°Έμ‘°ν μ μμ§λ§ static λ©μλλ μΈμ€ν΄μ€ λ³μλ₯Ό μ°Έμ‘°ν μ μλ€.
class MemberCall{
int iv = 10;
static int cv = 20;
int iv2 = cv;
static int cv2 = iv; // error
// class λ³μλ instance λ³μλ₯Ό μ¬μ©ν μ μλ€.
static void staticMethod1() {
System.out.println(cv);
System.out.println(iv); // error
// class λ©μλμμ instance λ³μ μ¬μ©λΆκ°
MemberCall c = new MemberCall();
System.out.println(c.iv);
// μ΄μ κ°μ΄ κ°μ²΄λ₯Ό μμ±ν΄μΌλ§ μΈμ€ν΄μ€ λ³μμ°Έμ‘°κ°λ₯
}
void instanceMethod1(){
System.out.println(cv);
System.out.println(iv);
// instance λ©μλμμλ instance λ³μλ₯Ό λ°λ‘ μ¬μ©κ°λ₯
}
static void staticMethod2(){
staticMethod1();
instanceMethod1(); // error
// class λ©μλμμλ μΈμ€ν΄μ€ λ©μλ νΈμΆ λΆκ°
MemberCall c = new MemberCall();
c.instanceMethod1(); // μΈμ€ν΄μ€λ₯Ό μμ±ν νμμΌ μ¬μ© κ°λ₯
}
void instanceMethod2(){
staticMethod1();
instanceMethod1();
}
}
μ€μ λ‘λ κ°μ ν΄λμ€μμ ν΄λ μ€ λ©€λ²κ° μΈμ€ν΄μ€ λ©€λ²λ₯Ό μ°Έμ‘°/νΈμΆν΄μΌ νλ κ²½μ°λ λ§€μ° λλ¬Όλ€κ³ νλ€. μ΄λ¬ν κ²½μ°κ° λ°μνλ€λ©΄, μΈμ€ν΄μ€ λ©μλλ‘ μμ±ν΄μΌν λ©μλλ₯Ό ν΄λμ€ λ©μλλ‘ μμ±νκ³ μλ κ²μ μλμ§ νμΈνλ κ²μ΄ μ’λ€κ³ νλ€.
μ€λ²λ‘λ©(overloading)
ν ν΄λμ€ μμμ κ°μ μ΄λ¦μ λ©μλλ₯Ό μ¬λ¬ κ° μ μνλ κ²μ λ©μλ μ€λ²λ‘λ©(method overloading) μ΄λΌκ³ νλ©°, κ°μ μ΄λ¦μ λ©μλμΌμ§λΌλ 맀κ°λ³μμ κ°μ νΉμ νμ μ΄ λ€λ₯Έ κ²½μ° κ°μ μ΄λ¦μ μ¬μ©ν΄μ λ©μλλ₯Ό μ μν μ μλ€. μ€λ²λ‘λ©μ νκΈ° μν΄μλ μλμ 쑰건μ λ§μ‘±νμ¬μΌ νλ€.
β λ©μλμ μ΄λ¦μ΄ κ°μ κ²
β 맀κ°λ³μμ κ°μ νΉμ νμ μ΄ λ€λ₯Ό κ²
μ 쑰건μ λ§μ‘±νμ§ λͺ»νλ λ©μλλ μ€λ³΅ μ μμ΄κΈ° λλ¬Έμ μ»΄νμΌ μλ¬κ° λ°μνλ€. λν μ€λ²λ‘λ©λ λ©μλλ€μ λ§€κ° λ³μμ μν΄μλ§ κ΅¬λΆλλ―λ‘ λ°ν νμ μ μ€λ²λ‘λ©μ ꡬννλ λ°μ μν₯μ λΌμΉμ§ μμμ μ μνμ.
κ°μ₯ λνμ μΈ μ€λ²λ‘λ©μ μμλ println λ©μλμ΄λ€. println μμμ μ΄λ κ°μ λ£λλΌλ μΆλ ₯μ΄ λμ§λ§, μ€μ λ‘λ νΈμΆν λ 맀κ°λ³μλ‘ μ§μ νλ κ°μ νμ μ΄ λ¬λΌμ§λ©΄ νΈμΆλλ println λ©μλ λν λ¬λΌμ§λ€. PrintStream class λ₯Ό μ΄ν΄λ³΄λ©΄ μ΄λ€ μ’ λ₯μ 맀κ°λ³μλ₯Ό μ§μ νλλΌλ μΆλ ₯μ΄ κ°λ₯νλλ‘ println μ λν 10κ°μ μ€λ²λ‘λ©μ ꡬννκ³ μλ€. νΈμΆ μ 맀κ°λ³μλ‘ λ겨μ§λ κ°μ νμ μ λ°λΌμ μ€λ²λ‘λ©λ λ©μλ μ€ νλκ° μ νλμ΄ μ€νλλ κ²μ΄λ€.
int add(int a, int b) { return a+b;}
long add(long a, long b) {return a+b;}
long add(int[] a){
long result = 0;
for(int i = 0 ; i < a.length; i ++)
result += a[i];
return result;
}
μμ κ°μ΄ μ€λ²λ‘λ©μ μ¬μ©νλ©΄ κ°μ κΈ°λ₯μ μννλ λ©μλλ λμΌν μ΄λ¦μΌλ‘ λ€μ΄λ°ν μ μκΈ° λλ¬Έμ μ½λμ μ μ§λ³΄μμ μ 리νλ€.
κ°λ³μΈμ(varargs)μ μ€λ²λ‘λ©
JDK1.5 λΆν° λμ μΌλ‘ λ©μλμ 맀κ°λ³μ κ°μλ₯Ό μ§μ ν μ μμΌλ©°, μ΄λ₯Ό κ°λ³μΈμ(variable arguments)λΌκ³ νλ€. κ°λ³ μΈμλ νμ ... λ³μλͺ κ³Ό κ°μ΄ μ μΈνλ€. PrintStream ν΄λμ€μ printf() λ©μλκ° λνμ μΈ μμμ΄λ€.
public PrintStream printf(String format, Object... args) { ... }
λ§μ½μ μ¬λ¬ λ¬Έμμ΄μ νλλ‘ κ²°ν©ν λ€μ λ°ννλ concatenate λ©μλλ₯Ό μμ±νλ €κ³ νλ€λ©΄, λ§€κ° λ³μμ κ°μμ λ°λΌμ μ¬λ¬ κ°λ₯Ό μ€λ²λ‘λ©ν΄μΌ ν κ²μ΄μ§λ§ κ°λ³ μΈμλ₯Ό μ¬μ©νλ©΄ λ©μλ νλλ§μΌλ‘λ κ°λ¨νκ² κ΅¬νν μ μλ€.
String concatenate(String... str){
...
}
μ λ©μλλ₯Ό νΈμΆν λμλ μΈμμ κ°μλ₯Ό κ°λ³μ μΌλ‘ μ§μ ν μ μλ€ .μ¬μ§μ΄λ μΈμκ° μμ μμ΄λ κ°λ₯νλ©°, λ°°μ΄μ λ£λ κ²λ κ°λ₯νλ€. κ°λ³μΈμλ λ΄λΆμ μΌλ‘ λ°°μ΄μ μ΄μ©νλ κ²μ΄λ―λ‘ κ°λ³μΈμκ° μ μΈλ λ©μλλ₯Ό νΈμΆν λλ§λ€ λ°°μ΄μ΄ μλ‘ μμ±λλ€. κ·Έλ κΈ° λλ¬Έμ κ°λ³ μΈμλ νΈλ¦¬ν κ²μ λ§μ§λ§ μ΄μ κ°μ λΉν¨μ¨μ μΈ μμκ° μ¨μ΄μμΌλ―λ‘ νμν κ²½μ°μλ§ μ¬μ©νλλ‘ νλ€.
λ¨μν λ©μλμ 맀κ°λ³μ νμ μ λ°°μ΄λ‘ νλ κ²μ΄ κ°λ³μΈμμ λμΌν κΉ? κ·Έλ μ§λ μλ€. 맀κ°λ³μμ νμ μ λ¨μν λ°°μ΄λ‘ ν λ©μλλ λ°λμ μΈμλ₯Ό μ§μ ν΄μ£Όμ΄μΌ ν΄μ μΈμλ₯Ό μλ΅ν μ μλ€.
κ°λ³μΈμλ₯Ό μ€λ²λ‘λ© ν λμλ ν κ°μ§ μ£Όμν΄μΌ ν μ μ΄ μλ€.
class source{
public static void main(String[] args) {
String[] strArr = {"100", "200", "300"};
System.out.println(concatenate("", "100", "200", "300"));
System.out.println(concatenate("-", strArr));
System.out.println(concatenate(",", new String[]{"1", "2", "3"}));
System.out.println("[" + concatenate(",", new String[0]) + "]");
System.out.println("["+concatenate(",") + "]");
}
static String concatenate(String delim, String... args){
String result = "";
for(String str : args){
result += str + delim;
}
return result;
}
/*
static String concatenate(String... args){
return concatenate("", args);
}
*/
}
concatenate λ©μλλ 맀κ°λ³μλ‘ μ λ ₯λ λ¬Έμμ΄μ λνμ¬ delim μ μ¬μ΄μ ν¬ν¨μμΌμ λ°ννλ€. κ°λ³μΈμλ‘ λ§€κ°λ³μλ₯Ό μ μΈνμμΌλ―λ‘ λ¬Έμμ΄ κ°μμ μκ΄μμ΄ λ§€κ° λ³μλ‘ μ§μ ν μ μλ€. μ μ½λμμ μ£Όμ μ²λ¦¬ν λ©μλλ₯Ό νκ³ μ»΄νμΌμ ν κ²½μ°μλ μλ¬κ° λ°μνλ€. μ΄λ λ μ€λ²λ‘λ© λ λ©μλκ° κ΅¬λΆλμ§ μμμ λ°μνλ κ²μΌλ‘, κ°λ³μΈμλ₯Ό μ μΈν λ©μλλ₯Ό μ€λ²λ‘λ©νλ©΄ ꡬλ³λμ§ λͺ»νλ κ²½μ°κ° λ°μν μ μκΈ° λλ¬Έμ μ‘°μ¬ν΄μΌ νλ©°, κ°λ₯νλ©΄ κ°λ³μΈμλ₯Ό μ¬μ©ν λ©μλλ μ€λ²λ‘λ© νμ§ μλκ²μ΄ μ’λ€.
μμ±μ(Constructor)
μμ±μλ μΈμ€ν΄μ€κ° μμ±λ λ νΈμΆλλ μΈμ€ν΄μ€ μ΄κΈ°ν λ©μλμ΄λ€. κ·Έλ¬λ―λ‘ μΈμ€ν΄μ€ λ³μμ μ΄κΈ°ν μ μ¬μ©λλ©°, μΈμ€ν΄μ€κ° μμ±λ λ μ€νλμ΄μΌ ν μμ μ μν΄μλ μ¬μ©λλ€. μμ±μλ λ©μλμ²λΌ ν΄λμ€ λ΄λΆμμ μ μΈλλ©°, λ©μλμ κ΅¬μ‘°κ° μ μ¬νμ§λ§ 리ν΄κ°μ μλ€. μμ±μμ 쑰건μ μλμ κ°λ€.
β μμ±μμ μ΄λ¦μ ν΄λμ€μ μ΄λ¦κ³Ό κ°μμΌ νλ€.
β μμ±μλ 리ν΄κ°μ΄ μλ€.
μμ±μ λν μ€λ²λ‘λ©μ΄ κ°λ₯νκΈ° λλ¬Έμ νλμ ν΄λμ€ λ΄μμ λ§€κ° λ³μκ° κ°κ° λ€λ₯Έ μ¬λ¬ κ°μ μμ±μλ₯Ό λ§λ€ μ μλ€. λ€λ§ μ‘°μ¬ν΄μΌν κ²μ μμ±μκ° μΈμ€ν΄μ€λ₯Ό μ§μ μ μΌλ‘ μμ±νλ κ²μ μλλ©°, μ€μ λ‘ μΈμ€ν΄μ€λ₯Ό μμ±νλ κ²μ μ°μ°μμΈ new μ΄λ€. λ§μ½μ Card ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μμ±νκΈ° μν΄ Card c = new Card(); μ κ°μ μ½λλ₯Ό μ€νμμΌ°λ€κ³ κ°μ ν΄λ³΄μ. κ·Έλ¬λ©΄ λ¨Όμ , new μ°μ°μμ μν΄μ heap λ©λͺ¨λ¦¬ μμμ Card ν΄λμ€μ μΈμ€ν΄μ€κ° μμ±λλ€. κ·Έλ¦¬κ³ μμ±μ Card() κ° νΈμΆλμ΄ μνλλ©°, μ°μ°μ new μ μν κ²°κ³Όλ‘ μμ±λ Card μΈμ€ν΄μ€ μ£Όμκ° λ°νλμ΄μ μ°Έμ‘° λ³μμΈ c μ μ μ₯λλ κ²μ΄λ€.
κΈ°λ³Έ μμ±μ(Default Constructor)
λͺ¨λ ν΄λμ€μλ λ°λμ νλ μ΄μμ μμ±μκ° μ μλμ΄ μμ΄μΌ νλ€. νμ§λ§ μ½λ μμμ μμ±μλ₯Ό ꡬννμ§ μμλ λλλ°, μ΄λ μ»΄νμΌλ¬κ° κΈ°λ³Έ μμ±μλ₯Ό μ 곡νκΈ° λλ¬Έμ΄λ€. ν΄λμ€ λ΄λΆμμ μμ±μκ° νλλ μ μλμ§ μμ κ²½μ° μ»΄νμΌλ¬λ μλ¬΄λ° λ§€κ°λ³μλ₯Ό κ°μ§μ§ μκ³ μλ¬΄λ° κΈ°λ₯μ μννμ§ μλ κΈ°λ³Έ μμ±μλ₯Ό μΆκ°ν λ€μμ μ»΄νμΌμ μ§ννλ€.
class Data1{
int value;
}
class Data2{
int value;
Data2(int x){
value = x;
}
}
class ConstructorTest{
public static void main(String[] args){
Data1 d1 = new Data1();
Data2 d2 = new Data2();
}
}
μ μ½λλ₯Ό μ€ννλ©΄ Data2 d2 = new Data2(); μμ μ»΄νμΌ μ€λ₯κ° λ°μνλ€. Data2 μμ Data2() λΌλ μμ±μλ₯Ό μ°Ύμ§ λͺ»νκΈ° λλ¬ΈμΈλ°, μ΄λ Data2 ν΄λμ€μμ Data2() λΌλ μμ±μκ° μ μλμ΄μμ§ μκΈ° λλ¬Έμ λ°μνλ€. Data1 μμλ λμΌνλ° Data1 μμλ μ€λ₯κ° λ°μνμ§ μλλ€. μ΄λ Data1 μμλ μμ±μκ° νλλ μμ΄μ μ»΄νμΌλ¬κ° Data1() μ΄λΌλ κΈ°λ³Έ μμ±μλ₯Ό μΆκ°νκΈ° λλ¬Έμ΄λ©°, Data2 μλ Data2(int x) μμ±μκ° νλ μκΈ° λλ¬Έμ κΈ°λ³Έ μμ±μλ₯Ό μΆκ°νμ§ μμ κ²μ΄κ³ , main λ©μλμμ Data2 d2 = new Data2() μ κ°μ΄ μμ±νλ©΄ Data2() μ κ°μ μμ±μκ° νΈμΆλμ΄μΌ νμ§λ§ μκΈ° λλ¬Έμ μ€λ₯κ° λ°μνλ κ²μ΄λ€.
μλμ κ°μ΄ λ§€κ° λ³μλ₯Ό κ°μ§λ μμ±μλ₯Ό μ μνμ¬ ν΄λμ€μ μΈμ€ν΄μ€ λ³μλ₯Ό μνλ κ°μΌλ‘ μ΄κΈ°ν ν μ μλλ‘ κ΅¬νν μ μλ€.
class Car{
String color;
String gearType;
int door;
Car(){}
Car(String c, String g, int d){
color = c;
gearType = g;
door = d;
}
}
μμ±μμμ λ€λ₯Έ μμ±μ νΈμΆνκΈ° this(), this
κ°μ ν΄λμ€μ λ©€λ²λ€ κ°μλ μλ‘ νΈμΆμ΄ κ°λ₯ν κ² μ²λΌ μμ±μ κ°μλ μλ‘ νΈμΆμ΄ κ°λ₯νλ€. νμ§λ§ μ΄λ μλμ λ 쑰건μ λ§μ‘±νμ λ κ°λ₯νλ€.
β μμ±μμ μ΄λ¦μΌλ‘ ν΄λμ€μ μ΄λ¦ λμ μ this λ₯Ό μ¬μ©ν κ²
β ν μμ±μμμ λ€λ₯Έ μμ±μλ₯Ό νΈμΆν λμλ λ°λμ 첫 μ€μμλ§ νΈμΆμ΄ κ°λ₯ν¨
μμ±μμμ λ€λ₯Έ μμ±μλ₯Ό 첫 μ€μμλ§ νΈμΆμ΄ κ°λ₯νλλ‘ ν κ²μ μμ±μ λ΄λΆμμ μ΄κΈ°ν μμ λμ€μ λ€λ₯Έ μμ±μλ₯Ό νΈμΆνλ κ²½μ°μλ νΈμΆλ λ€λ₯Έ μμ±μ λ΄μμλ λ©€λ² λ³μλ€μ κ°μ μ΄κΈ°ννλ€λ©΄ μ΄μ μμ μ΄ λ¬΄μλ―Έν΄μ§λ κ²½μ°κ° λ°μν μ μκΈ° λλ¬Έμ΄λ©°, κ΄λ ¨λμ΄ μΆνμ μμΈν λ€λ£¨λλ‘ νμ.
class Car{
String color;
String gearType;
int door;
Car(){
this("white", "auto", 4);
}
Car(String color){
this(color, "auto", 4);
}
Car(String c, String g, int d){
this.color = c;
this.gearType = g;
this.door = d;
}
}
μμ κ°μ΄ this λ₯Ό μ΄μ©νμ¬ κ΅¬ννλ κ²μ΄ μ½λμ μ μ§λ³΄μμ μ 리νλ€. this λ μ°Έμ‘° λ³μλ‘ μΈμ€ν΄μ€ μμ μ κ°λ¦¬ν¨λ€. μ°Έμ‘° λ³μλ₯Ό ν΅ν΄μ μΈμ€ν΄μ€ λ©€λ²μ μ κ·Όνλκ² μ²λΌ this λ₯Ό μ΄μ©ν΄μ μΈμ€ν΄μ€ λ³μμ μ κ·Όν μ μλ κ²μ΄λ€. νμ§λ§ this λ μΈμ€ν΄μ€ λ©€λ²λ§ μ¬μ©ν μ μμΌλ©° static λ©μλ(ν΄λμ€ λ©μλ)μμλ μΈμ€ν΄μ€ λ©€λ²λ₯Ό μ¬μ©ν μ μλ κ²μ²λΌ this λ₯Ό μ¬μ©ν μ μλ€. static λ©μλλ μΈμ€ν΄μ€λ₯Ό μμ±νμ§ μμλ νΈμΆλ μ μμΌλ―λ‘ static λ©μλκ° νΈμΆλμμ λ μΈμ€ν΄μ€κ° μ‘΄μ¬νμ§ μμμλ μκΈ° λλ¬Έμ΄λ€.
μμ±μλ₯Ό ν¬ν¨ν λͺ¨λ μΈμ€ν΄μ€ λ©μλμλ μμ μ΄ κ΄λ ¨λ μΈμ€ν΄μ€λ₯Ό κ°λ¦¬ν€λ μ°Έμ‘° λ³μμΈ this κ° μ§μλ³μλ‘ μ¨κ²¨μ§ μνλ‘ μ μ¬νλ€. λ³΄ν΅ μΈμ€ν΄μ€ λ©μλλ νΉμ μΈμ€ν΄μ€μ κ΄λ ¨λ μμ μ νλ―λ‘ μμ κ³Ό κ΄λ ¨λ μΈμ€ν΄μ€μ μ λ³΄κ° νμνμ§λ§, static λ©μλλ μΈμ€ν΄μ€μ κ΄λ ¨ μλ μμ μ ν΄μ μΈμ€ν΄μ€μ λν μ λ³΄κ° νμ μκΈ° λλ¬Έμ΄λ€.
β this : μΈμ€ν΄μ€ μκΈ° μμ μ κ°λ¦¬ν€λ μ°Έμ‘°λ³μλ‘, μΈμ€ν΄μ€μ μ£Όμκ° μ μ₯λμ΄ μμΌλ©° λͺ¨λ μΈμ€ν΄μ€ λ©μλμ μ§μ λ³μλ‘ μ¨κ²¨μ§ μνλ‘ μ‘΄μ¬νλ€.
β this(), this(parameter) : μμ±μλ‘, κ°μ ν΄λμ€μ λ€λ₯Έ μμ±μλ₯Ό νΈμΆν λ μ΄μ κ°μ΄ μ¬μ©νλ€.
λ§μ½μ νμ¬ μ¬μ©νκ³ μλ μΈμ€ν΄μ€μ λμΌν μνλ₯Ό κ°μ§λ μΈμ€ν΄μ€λ₯Ό νλ λ λ§λ€κ³ μ νλ€λ©΄ μμ±μλ₯Ό μ΄μ©νλ©΄ λλ€. λ κ°μ μΈμ€ν΄μ€κ° κ°μ μνλ₯Ό κ°μ§λ€λ κ²μ μΈμ€ν΄μ€ λ³μμ κ°μ΄ λͺ¨λ λμΌνλ€λ κ²μ΄λ€.
Car(Car c){
color = c.color;
gearType = c.gearType;
door = c.door;
}
μ΄μ κ°μ΄ μμ±μλ₯Ό ꡬννλ©΄, 맀κ°λ³μλ‘ λμ΄μ¨ Car μΈμ€ν΄μ€μ λμΌν μνμ μΈμ€ν΄μ€λ₯Ό μ½κ² λ§λ€ μ μλ€.
λ³μμ μ΄κΈ°ν
λ³μ μ μΈ μ, λ©€λ²λ³μ(ν΄λμ€ λ³μ, μΈμ€ν΄μ€ λ³μ)μ λ°°μ΄μ μ΄κΈ°νλ μ νμ μ΄μ§λ§, μ§μλ³μμ μ΄κΈ°νλ νμμ μ΄λ€. μ§μλ³μλ₯Ό μ΄κΈ°ννμ§ μκ³ μ»΄νμΌ μ, μλ¬κ° λ°μνλ€. λ©€λ²Ό λ³μλ₯Ό μ΄κΈ°ννλ λ°©λ²μλ 3κ°μ§κ° μ‘΄μ¬νλ€.
1. λͺ μμ μ΄κΈ°ν(explicit initialization)
λ³μλ₯Ό μ μΈν¨κ³Ό λμμ μ΄κΈ°ννλ κ²μ μλ―Ένλ€. κΈ°λ³Έν λ³μμ μ΄κΈ°νλ int door = 4; μ κ°μ΄ νκ³ , μ°Έμ‘°ν λ³μμ μ΄κΈ°νλ Engine e = new Engine(); κ³Ό κ°μ΄ ν΄μ£Όλ©΄ λλ€. κ°λ¨νκ³ λͺ λ£ν λ°©λ²μ΄μ§λ§, 볡μ‘ν μ΄κΈ°ν μμ μ΄ νμν μμλ μ΄κΈ°ν λΈλ(initializaton block) νΉμ μμ±μλ₯Ό μ¬μ©ν΄μΌ νλ€.
2. μ΄κΈ°ν λΈλ(initialization block)
μ΄κΈ°ν λΈλμ ν΄λμ€ μ΄κΈ°ν λΈλκ³Ό μΈμ€ν΄μ€ μ΄κΈ°ν λΈλμ΄ μλ€. ν΄λμ€ μ΄κΈ°ν λΈλμ ν΄λμ€ λ³μμ μ΄κΈ°νμ μ¬μ©λλ©°, μΈμ€ν΄μ€ μ΄κΈ°ν λΈλμ μΈμ€ν΄μ€ λ³μμ μ΄κΈ°νμ μ¬μ©λλ€. μ΄κΈ°ν λΈλ λ΄μμλ λ©μλ λ΄μμμ κ°μ΄ 쑰건문, λ°λ³΅λ¬Έ, μμΈμ²λ¦¬ λ±μ μμ λ‘κ² μ¬μ©ν μ μκΈ° λλ¬Έμ, μ΄κΈ°ν μμ μ΄ λ³΅μ‘νμ¬ λͺ μμ μ΄κΈ°νλ§μΌλ‘λ λΆμ‘±ν κ²½μ°μ μ΄κΈ°ν λΈλμ μ¬μ©νλ€. ν΄λμ€ μ΄κΈ°ν λΈλμ μΈμ€ν΄μ€ μ΄κΈ°ν λΈλ μμ static ν€μλλ₯Ό λ§λΆμ¬μ£ΌκΈ°λ§ νλ©΄ λλ€.
class temp{
static { /* ν΄λμ€ μ΄κΈ°ν λΈλ */ }
{
/* μΈμ€ν΄μ€ μ΄κΈ°ν λΈλ */
}
}
μΈμ€ν΄μ€ λ³μλ μ£Όλ‘ μμ±μλ₯Ό νμ©νμ¬ μ΄κΈ°ννκ³ , μΈμ€ν΄μ€ μ΄κΈ°ν λΈλμ λͺ¨λ μμ±μμμ 곡ν΅μΌλ‘ μνν΄μΌ νλ μ½λλ₯Ό λ£λλ°μ μ¬μ©νλ€.
class Car{
String color;
String gearType;
int door;
int count;
int serialNo;
Car(){
count++;
serialNo = count;
color = "White";
gearType = "Auto";
}
Car(String color, String gearType) {
count++;
serialNo = count;
this.color = color;
this.gearType = gearType;
}
}
μ μ½λλ₯Ό 보면, Car() μμ±μμ Car(String color, String gearType) μμ±μμ μ€λ³΅λ κΈ°λ₯μ μννλ λΆλΆμ΄ μ‘΄μ¬νλ€. μ΄λ¬ν μ€λ³΅μ μ½λμ μ μ§λ³΄μλ₯Ό μ΄λ ΅κ² νλ μ£Όμ μμΈμ΄ λλ€. μ΄μ κ°μ΄ ν΄λμ€μ λͺ¨λ μμ±μμ λνμ¬ κ³΅ν΅μ μΌλ‘ μνλμ΄μΌ ν λ¬Έμ₯μλ μΈμ€ν΄μ€ λΈλμ νμ©νλ©΄ λ³΄λ€ κ°κ²°ν΄μ§λ€. μ½λ μ€λ³΅μ μ κ±°ν¨μΌλ‘μ¨ μ½λμ μ λ’°μ±μ λμ¬ μ£Όκ³ , μ€λ₯ λ°μ κ°λ₯μ±μ μ€μ¬μ€λ€. μ¬μ¬μ©μ±μ λμ΄κ³ , μ€λ³΅μ μ κ±°νλ κ²μ΄ κ°μ²΄μ§ν₯νλ‘κ·Έλλ°μ΄ μΆκ΅¬νλ κΆκ·Ήμ μΈ λͺ©νμ΄λ€.
class Car{
String color;
String gearType;
int door;
int count;
int serialNo;
{
count++;
serialNo = count;
}
Car(){
color = "White";
gearType = "Auto";
}
Car(String color, String gearType) {
this.color = color;
this.gearType = gearType;
}
}
class source{
static{ // ν΄λμ€ μ΄κΈ°ν λΈλ
System.out.println("static { }");
}
{ // μΈμ€ν΄μ€ μ΄κΈ°ν λΈλ
System.out.println("{ }");
}
public source(){
System.out.println("generator");
}
public static void main(String[] args) {
System.out.println("source bt = new source() ; ");
source bt = new source();
System.out.println("source bt2 = new source() ; ");
source bt2 = new source();
}
}
μ μ½λκ° μ€νλλ©΄ source κ° λ©λͺ¨λ¦¬μ λ‘λ©λκ³ , class μ΄κΈ°ν λΈλμ΄ μνλμ΄ static { } μ΄ νλ©΄μ μΆλ ₯λλ€. λ€μμλ main λ©μλμ μνμ λ°λΌμ source μΈμ€ν΄μ€κ° μμ±λμ΄, μΈμ€ν΄μ€ μ΄κΈ°ν λΈλμ΄ μ€νλκ³ , μμ±μκ° μ€νλλ€. ν΄λμ€ μ΄κΈ°ν λΈλμ λ©λͺ¨λ¦¬μ λ‘λ©λ λ μ΅μ΄ 1νλ§ μνλμ§λ§, μΈμ€ν΄μ€ μ΄κΈ°ν λΈλμ μΈμ€ν΄μ€κ° μμ±λ λλ§λ€ μνλλ κ²μ μ μ μλ€.
class source{
static int[] arr = new int[10];
static{
for(int i = 0 ; i < arr.length; i ++)
{
arr[i] = (int)(Math.random()*10 + 1);
}
}
public static void main(String[] args) {
for(int i = 0 ; i < arr.length ; i ++)
System.out.println("arr[" + i + "] = " + arr[i]);
}
}
μ΄μ κ°μ΄ λ°°μ΄μ΄λ μμΈμ²λ¦¬ λ± λ³΅μ‘ν μ΄κΈ°ν μμ μ΄ νμν κ²½μ°μλ λͺ μμ μ΄κΈ°νλ§ μ΄μ©νμ¬ μνν μ μκ³ ν΄λμ€ μ΄κΈ°ν λΈλμ μ¬μ©νμ¬ μ²λ¦¬ν μ μλ€.
λ©€λ² λ³μμ μ΄κΈ°ν μκΈ° λ° μμ
μ΄κΈ°νκ° μνλλ μμμ λνμ¬ μμ보μ. ν΄λμ€ λ³μλ ν΄λμ€κ° μ²μ λ‘λ©λ λ, μ΅μ΄ 1ν μ΄κΈ°νλλ€. μΈμ€ν΄μ€ λ³μλ μΈμ€ν΄μ€κ° μμ±λ λλ§λ€ κ° μΈμ€ν΄μ€ λ³λ‘ μ΄κΈ°νκ° μ΄λ£¨μ΄μ§λ€. ν΄λμ€λ³μλ κΈ°λ³Έκ° - λͺ μμ μ΄κΈ°ν - ν΄λμ€ μ΄κΈ°ν λΈλμ μμλ‘ μ΄κΈ°νκ° μ§νλλ©°, μΈμ€ν΄μ€λ³μλ κΈ°λ³Έκ° - λͺ μμ μ΄κΈ°ν - μΈμ€ν΄μ€ μ΄κΈ°ν λΈλ - μμ±μ μμλ‘ μ΄κΈ°νκ° μ§νλλ€.
νλ‘κ·Έλ¨ μ€ν λμ€μ ν΄λμ€μ λν μ λ³΄κ° νμνλ€λ©΄, ν΄λμ€λ λ©λͺ¨λ¦¬μ λ‘λ©λλ€. ν΄λμ€ λ©€λ²λ₯Ό μ¬μ©νμ λ, μΈμ€ν΄μ€λ₯Ό μμ±νμ λμ κ°μ μν©μ ν΄λΉνλ€. νμ§λ§ ν΄λΉ ν΄λμ€κ° λ©λͺ¨λ¦¬μ μ΄λ―Έ μ¬λΌμμλ€λ©΄, λ€μ λ‘λ©νμ§ μκ³ μ΄κΈ°νλ μ§νλμ§ μλλ€.
ν΄λμ€μ λ‘λ© μκΈ°λ μ΄λ€ JVM μ μ¬μ©νλλμ λ°λΌμ λ¬λΌμ§ μ μλ€. ν΄λμ€κ° νμν λ λ°λ‘ λ©λͺ¨λ¦¬μ λ‘λ©λ μλ μκ³ , μ€νν¨μ¨μ λμ΄κΈ° μν΄μ νλ‘κ·Έλ¨μ΄ μ€νλ λ 미리 λ‘λ©λλλ‘ μ€κ³λ κ²½μ°λ μλ€.
class InitTest{
// Explicit initialization
static int cv = 1;
int iv = 1;
static { cv = 2; } // class μ΄κΈ°ν λΈλ
{ iv = 2; }; // instance μ΄κΈ°ν λΈλ
InitTest(){ // Constructor
iv = 3;
}
}
μ ν΄λμ€λ ν΄λμ€ λ³μ cv μ μΈμ€ν΄μ€ λ³μ iv λ₯Ό νλμ© κ°μ§κ³ μλ€. μΈμ€ν΄μ€λ₯Ό μμ±νμμ λ, λ¨Όμ cv κ° λ©λͺ¨λ¦¬(method area)μ μμ±λκ³ cv μλ int νμ κΈ°λ³Έκ°μΈ 0 μ΄ μ μ₯λλ€. κ·Έ λ€μμλ λͺ μμ μ΄κΈ°νμ μν΄ cv μλ 1μ΄ μ μ₯λκ³ , λ§μ§λ§μ ν΄λμ€ μ΄κΈ°ν λΈλμ΄ μνλμ΄ cv μ 2κ° μ μ₯λλ€.
InitTest ν΄λμ€μ μΈμ€ν΄μ€κ° μμ±λλ©΄μ, iv κ° λ©λͺ¨λ¦¬(heap)μ μ¬λΌκ°λ€. iv μμ int ν λ³μμ΄κΈ° λλ¬Έμ κΈ°λ³Έκ°μΈ 0 μ΄ μ μ₯λκ³ λ€μμλ λͺ μμ μ΄κΈ°νμ μν΄ 1μ΄ μ μ₯λλ€. κ·Έλ¦¬κ³ μΈμ€ν΄μ€ μ΄κΈ°ν λΈλμ΄ μνλμ΄ iv μλ 2κ° μ μ₯λκ³ , μ΅μ’ μ μΌλ‘ μμ±μμ μν΄ 3μ΄ μ μ₯λλ€.
class Document{
static int count = 0 ;
String name; // Document name
Document()
{
this("no_title" + (++count));
}
Document(String name){
this.name = name;
System.out.println("Document " + this.name + " is generated.");
}
}
class source {
public static void main(String[] args) {
Document d1 = new Document();
Document d2 = new Document("Java.txt");
Document d3 = new Document();
Document d4 = new Document();
}
}
Document μΈμ€ν΄μ€κ° μμ±λ λλ§λ€ count κ°μ μ¦κ°μμΌμ, Document μ μ΄λ¦μ μ€μ νμ§ μλ κ²½μ°μλ no_title1, no_title2, no_title3 κ³Ό κ°μ΄ ꡬλΆλλλ‘ μ€μ νμλ€. μΈμ€ν΄μ€ μμ± μ 곡ν΅μ μΌλ‘ μνλλ μμ μ΄λ―λ‘ μΈμ€ν΄μ€ μ΄κΈ°ν λΈλμ μ΄μ©νμλ€.
References
https://opentutorials.org/course/1223/4551
http://www.yes24.com/Product/Goods/24259565
'π» Study ! > JAVA' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[CH07] κ°μ²΄μ§ν₯νλ‘κ·Έλλ°3 (OOP) (0) | 2022.08.01 |
---|---|
[CH07] κ°μ²΄μ§ν₯νλ‘κ·Έλλ°2 (OOP) (0) | 2022.07.31 |
[CH05] λ°°μ΄ (0) | 2022.07.06 |
[CH02.] λ³μ (Variable) (0) | 2022.07.05 |
0. JAVA λ? (0) | 2022.07.04 |