๐ ์๋ฐ์ ์ ์์ ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค.
JVM ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ
JVM์ ํ๋ก๊ทธ๋จ์ ์ํํ๋๋ฐ ํ์ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น ๋ฐ๋๋ค. JVM์ ์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ๋ฌ ์์ญ์ผ๋ก ๋๋๋๋ฐ, ์ฃผ์ ์์ญ ์ธ ๊ฐ์ง๋ค.
Method area
ํด๋์ค๊ฐ ์ฌ์ฉ๋ ๋, JVM์ ํด๋น ํด๋์ค์ ํด๋์ค ํ์ผ*.class๋ฅผ ์ฝ๊ณ ํด๋์ค์ ๋ํ ์ ๋ณด๋ฅผ ์ด๊ณณ์ ์ ์ฅํ๋ค. ๋น์ฐํ ํด๋์ค ๋ณ์๋ ์ด๊ณณ์ ์ ์ฅ๋๋ค.Call Stack ํน์ Execution Stack
๋ฉ์๋ ์์ ์ ํ์ํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ๊ณตํ๋ค. ๋ฉ์๋๊ฐ ํธ์ถ๋๋ฉด ์ฝ์คํ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ ๋น๋๊ณ , ์์ ์ด ๋๋๋ฉด ๋ฐํ๋๋ค.Heap
์ธ์คํด์ค๊ฐ ์์ฑ๋๋ ๊ณต๊ฐ์ด๋ค. ์ธ์คํด์ค ๋ณ์๋ ์ด๊ณณ์ ์์ฑ๋๋ค.
์์์ ๋งํ ํธ์ถ์คํCall Stack์ ์ด๋ฐ ์์ผ๋ก ๋์ํ๋ค.
ํด๋์ค(static) ๋ฉ์๋์ ์ธ์คํด์ค ๋ฉ์๋
- ํด๋์ค ๋ฉ์๋๋, ํด๋์ค ๋ณ์์ ์ ์ฌํ๋ค. ์ธ์คํด์ค ๋ฉ์๋ ์์ static์ ๋ถ์ด๋ฉด ํด๋์ค ๋ฉ์๋๊ฐ ๋๋ค.
static ๋ฉ์๋๋ ์ธ์ ๋ง๋ค๊น?
๋ฉ์๋ ๋ด์์ ์ธ์คํด์ค ๋ณ์๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ์ธ์คํด์ค ๋ฉ์๋์ฌ์ผ ํ๋ค.
๋ฐ๋ฉด ๋ฉ์๋ ๋ด์์ ์ธ์คํด์ค ๋ณ์๋, ์ธ์คํด์ค ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด static๋ฉ์๋๋ก ์ ์ํ ํ์๊ฐ ์๋ค.
ํด๋์ค๋ฅผ ์ค๊ณํ ๋, ๋ฉค๋ฒ๋ณ์ ์ค ๋ชจ๋ ์ธ์คํด์ค์ ๊ณตํต์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ static์ ๋ถ์ธ๋ค.
static๋ณ์๋ ์ธ์คํด์ค ์์ฑ ์์ด ์ฌ์ฉํ ์ ์๋ค.
static๋ฉ์๋๋ ์ธ์คํด์ค ๋ณ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
ํด๋์ค ๋ฉ์๋๊ฐ ํธ์ถ ๋์์ ๋, ๊ฐ์ฒด(์ธ์คํด์ค)๊ฐ ์กด์ฌํ์ง ์์ ์ ์์ผ๋ฏ๋ก.
๋ฐ๋๋ ๊ฐ๋ฅํ๋ค.๋ฉ์๋ ๋ด์์ ์ธ์คํด์ค ๋ณ์๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด satic์ ๋ถ์ด๋ ๊ฒ์ ๊ณ ๋ ค.
์ค๋ฒ๋ก๋ฉOverloading
์ค๋ฒ๋ก๋ฉ์ด๋?
๊ฐ์ ์ด๋ฆ์ ๊ฐ์ง ๋ฉ์๋๊ฐ ์๋๋ผ๋ ๋งค๊ฐ๋ณ์์ ๊ฐ์ ๋๋ ํ์ ์ด ๋ค๋ฅด๋ฉด ๊ฐ์ ์ด๋ฆ์ ์ฌ์ฉํด์ ๋ฉ์๋๋ฅผ ์ ์ํ ์ ์๋ค.
์ค๋ฒ๋ก๋ฉ ์กฐ๊ฑด
- ๋ฉ์๋ ์ด๋ฆ์ด ๊ฐ๋ค.
- ๋งค๊ฐ๋ณ์ ๋๋ ํ์ ์ด ๋ค๋ฅด๋ค.
๋ฐํํ์ ์ด ๋ค๋ฅธ ๊ฒ์ ์ค๋ฒ๋ก๋ฉ์ด ์๋๋ค.
์ค๋ฒ๋ก๋ฉ์ ๋ํ์ ์ธ ์๋ก println๋ฉ์๋๊ฐ ์๋ค.
void println()
void println(boolean x)
void println(char x)
void println(char[] x)
void println(double x)
void println(Object x)
void println(String x)
...
println์ด ์ด๋ ๊ฒ ์ค๋ฒ๋ก๋ฉ์ด ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ๋ println๋ฉ์๋ ์์ ์ด๋ค ํ์ ์ด๋ ๋ฃ์ด์ ์ธ ์ ์๋ค.
์ค๋ฒ๋ก๋ฉ์ ์ฅ์
๋ชจ๋ ๋ฉ์๋์ ์ด๋ฆ์ด ๋ค๋ฅด๋ค๋ฉด, 10๊ฐ์ println์ ๋ชจ๋ ๋ค๋ฅธ ๋ฉ์๋๋ฅผ ๊ฐ์ ธ์ผ ํ๋ค. ๊ทธ๋ฌ๋๊น char๋ฅผ ์ถ๋ ฅํ ๋๋ printchar boolean์ ์ถ๋ ฅํ ๋ printbool...์ด๋ฐ ์์ผ๋ก. ์ด๋ฆ์ ์ง๊ธฐ๋ ์ด๋ ต๊ณ ์ฌ์ฉํ๋ ์ชฝ์์๋ ๊ตฌ๋ถํ๊ธฐ๊ฐ ์ด๋ ต๋ค.
์ค๋ฒ๋ก๋ฉ์ ์ฌ์ฉํ๋ฉด ๊ธฐ์ตํ๊ธฐ๋ ์ฝ๊ณ ์ค๋ฅ ๊ฐ๋ฅ์ฑ์ ์ค์ผ ์๋ ์๋ค. ๋ํ ๋ฉ์๋ ์ด๋ฆ๋ง ๋ณด๊ณ ์ด๋ฆ์ด ๊ฐ์ผ๋ ๊ฐ์ ๊ธฐ๋ฅ์ ํ ๊ฒ์ด๋ผ๋ ์ฌ์ค์ ์ง์ํ ์ ์๋ค.
๊ฐ๋ณ์ธ์varargs์ ์ค๋ฒ๋ก๋ฉ
๊ฐ๋ณ์ธ์๋ก ๋์ ์ผ๋ก ๋งค๊ฐ๋ณ์์ ๊ฐ์๋ฅผ ์ง์ ํ ์ ์๋ค.
- method(String str1, String str2, String str3)์
- method(String... str)์ฒ๋ผ ์ธ ์ ์๋ค๋ ๋ง์ด๋ค.
method("a", "b")
method("a")
method(new String[]{"A", "B"})
๋ชจ๋ ๊ฐ๋ฅํ๋ค.
๊ฐ๋ณ์ธ์๋ ๋ด๋ถ์ ์ผ๋ก ๋ฐฐ์ด์ ์ด์ฉํ๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ์ด ๋จ์ด์ง๋ ๋จ์ ์ด ์๋ค. ๋ฐ๋ผ์ ๊ผญ ํ์ํ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉํ๋ ๊ฒ ์ข๋ค.
๊ทธ๋ฆฌ๊ณ
๊ฐ๋ณ์ธ์๋ ์ค๋ฒ๋ก๋ฉํ ์ ์๋ค.
1๋ฒ ๋ฉ์๋๋ฅผ 2๋ฒ ๋ฉ์๋๋ก ์ค๋ฒ๋ก๋ฉํ์ ๊ฒฝ์ฐ,
์ปดํ์ผ ์ ๋ ๋ฉ์๋๋ฅผ ๊ตฌ๋ถํ ์ ์์ด์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
์์ฑ์Constructor
์์ฑ์๋ ์ธ์คํด์ค๋ฅผ ์์ฑํ ๋ ํธ์ถํ๋ฉฐ, ์ธ์คํด์ค ๋ณ์๋ค์ ์ด๊ธฐํ ํ๊ฑฐ๋, ์์ฑ ์์ ์คํํด์ผ ํ ์์ ์ ์ํด ์ฌ์ฉํ๋ค.
- ์ด๋ฆ์ ํด๋์ค์ ์ด๋ฆ๊ณผ ๊ฐ๊ณ
- ๋ฆฌํด๊ฐ์ด ์๋ค.
class Movie{}์ ๊ธฐ๋ณธ ์์ฑ์๋ฅผ ๋ง๋ ๋ค๋ฉด
public Moive() {}๊ฐ ๋ ๊ฒ์ด๋ค.
๋ชจ๋ ํด๋์ค์๋ ๋ฐ๋์ ํ๋ ์ด์์ ์์ฑ์๊ฐ ์์ด์ผ ํ๋ค.
ํ๋๋ ์์ ๋๋ ์ปดํ์ผ๋ฌ๊ฐ ์๋์ผ๋ก ๊ธฐ๋ณธ ์์ฑ์๋ฅผ ๋ง๋ค์ง๋ง, ํ๋๋ผ๋ ์์ฑ์๊ฐ ์๋ ๊ฒฝ์ฐ์ ์ปดํ์ผ๋ฌ๋ ์๋ฌด ์ผ๋ ํ์ง ์๋๋ค.
๋งค๊ฐ๋ณ์๋ฅผ ๊ฐ์ง ์์ฑ์
๋งค๊ฐ๋ณ์ ๊ฐ์ง ์์ฑ์๋ฅผ ๋ง๋ค์ด๋์ผ๋ฉด, ํด๋น ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ ์ํ๋ ๊ฐ์ผ๋ก ์ด๊ธฐํ ํ ์ ์๋ค. ์ด๋ฐ ์์ผ๋ก.
class Ironman{
boolean power;
int strength;
Ironman(boolean power, int strength) {
this.power = power;
this.strength = strength;
}
}
public class Avengers {
public static void main(String[] args) {
Ironman iron = new Ironman(true, 100);
System.out.println(iron.power); //true
System.out.println(iron.strong); // 100
}
}
this()
์์ฑ์ ๋ด์์ ๋ค๋ฅธ ์์ฑ์๋ฅผ ํธ์ถํ ๋ this()๋ฅผ ์ฌ์ฉํ๋ค.
๋ฐ๋์ ์ฒซ์งธ ์ค์์ ์ฌ์ฉํด์ผ ํ๋ค๋ ์ ์ฝ์ด ์๋ค.
Ironman(int armour) {
// Ironman(); //์ด๋ฐ ์์ผ๋ก ํธ์ถํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
this(); //๋ฐ๋์ ์ด๋ ๊ฒ ํธ์ถํด์ผ ํ๋ค.
}
์ด์ ๋, ์์ฑ์ ๋ด์ ์ด๊ธฐํ ์์ ์ค ๋ค๋ฅธ ์์ฑ์๋ฅผ ํธ์ถํ๊ฒ ๋๋ฉด, ํธ์ถ๋ ๋ค๋ฅธ ์์ฑ์ ๋ด์์๋ ๋ฉค๋ฒ๋ณ์์ ๊ฐ์ ์ด๊ธฐํํ๊ฒ ๋๋ค. ๊ทธ๋ฌ๋ฉด ๋ค๋ฅธ ์์ฑ์๋ฅผ ํธ์ถํ๊ธฐ ์ ์ด๊ธฐํ ์์ ๊ณผ ์ถฉ๋์ด ๋ ๊ฐ๋ฅ์ฑ์ด ์๋ค.
class CarCompo {
String color;
String gearType;
int door;
CarCompo() { //๊ธฐ๋ณธ ์ต์
this("white", "auto", 4);
}
CarCompo(String color) { //์์ ์ ํ, ๋๋จธ์ง ๊ธฐ๋ณธ ์ต์
this(color, "auto", 4);
}
CarCompo(String color, String gearType, int door) { //์ต์
๋ชจ๋ ์ ํ ๊ฐ๋ฅ
this.color = color;
this.gearType = gearType;
this.door = door;
}
public String toString() {
return "color : " + this.color + ", gearType : " + this.gearType + ", door : " + this.door;
}
}
public class Car {
public static void main(String[] args) {
CarCompo defaultCar = new CarCompo();
CarCompo colorOptionCar = new CarCompo("Red");
CarCompo fullOption = new CarCompo("black", "auto", 2);
System.out.println("defaultCar : " + defaultCar);
System.out.println("colorOptionCar : " + colorOptionCar);
System.out.println("fullOption : " + fullOption);
}
}
/*
๊ฒฐ๊ณผ
defaultCar : color : white, gearType : auto, door : 4
colorOptionCar : color : Red, gearType : auto, door : 4
fullOption : color : black, gearType : auto, door : 2
*/
this
์๊ธฐ ์์ ์ ๊ฐ๋ฆฌํค๋ ์ฐธ์กฐ๋ณ์ this
๋งค๊ฐ๋ณ์์ ์ด๋ฆ๊ณผ ์ธ์คํด์ค ๋ณ์์ ์ด๋ฆ์ด ๊ฐ์ ๋, ๊ตฌ๋ถํ๋ ค๊ณ ์ด๋ค.
color = color๋ผ๊ณ ํ๋ฉด ๋ ๋ค ์ง์ญ ๋ณ์๋ก ๊ฐ์ฃผ๋๋ค.
์ฐธ๊ณ ๋ก static๋ณ์์๋ this๊ฐ ์๋ค.
์์ฑ์๋ฅผ ํฌํจํ ๋ชจ๋ ์ธ์คํด์ค ๋ฉ์๋์ ์์ ์ด ๊ด๋ จ๋ ์ธ์คํด์ค๋ฅผ ๊ฐ๋ฆฌํค๋ ์ฐธ์กฐ๋ณ์ this๊ฐ ์ง์ญ๋ณ์๋ก ์จ๊ฒจ์ง ์ฑ๋ก ์กด์ฌํ๋ค.
์๋ฌดํผ ์ ๋ฆฌํ์๋ฉด
this - ์ธ์คํด์ค ์์ ์ ๊ฐ๋ฆฌํค๋ ์ฐธ์กฐ๋ณ์. ์ธ์คํด์ค์ ์ฃผ์๊ฐ ์ ์ฅ๋์ด ์๋ค.
this() - ์์ฑ์. ๊ฐ์ ํด๋์ค์ ๋ค๋ฅธ ์์ฑ์๋ฅผ ํธ์ถํ ๋ ์ด๋ค.
this์ this()๋ ๋๋ฃ๊ฐ ์๋๋ค.
๋ณ์์ ์ด๊ธฐํ
๋ณ์์ ์ฒ์ ๊ฐ์ ์ ์ฅํ๋ ๊ฒ์ ์ด๊ธฐํInitialization๋ผ๊ณ ํ๋ค.
๋ฉค๋ฒ๋ณ์๋ ์ด๊ธฐํํ์ง ์์๋ ์๋ฃํ์ ๋ง๋ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ด๊ธฐํ๊ฐ ๋๋ค.
๊ทธ๋ฌ๋ ์ง์ญ๋ณ์๋ ๋ฐ๋์ ์ฌ์ฉํ๊ธฐ ์ ์ ์ด๊ธฐํํด์ผ ํ๋ค.
ํ์
์ ๊ธฐ๋ณธ ๊ฐ
์ถ์ฒ : https://www.youtube.com/watch?v=KQDYyX6EdNA
๋ฉค๋ฒ๋ณ์ ์ด๊ธฐํ ๋ฐฉ๋ฒ
๋ช ์์ ์ด๊ธฐํExplicit Initialization
๋ณ์๋ฅผ ์ ์ธ๊ณผ ๋์์ ์ด๊ธฐํํ๋ ๊ฒ์ ๋ช
์์ ์ด๊ธฐํ๋ผ๊ณ ํ๋ค.
int door = 4;
์ด๊ฒ ๋ช
์์ ์ด๊ธฐํ๋ค.
๊ฐ์ฅ ๊ฐ๋จํ๊ณ ๋ช
๋ฃํ๋ค. ๋ฐ๋ผ์ ์ฐ์ ์ ์ผ๋ก ๊ณ ๋ ค๋์ด์ผ ํ ๋ฐฉ๋ฒ์ด๋ค.
์ด๊ธฐํ ๋ธ๋ญInitialization block
ํด๋์ค ์ด๊ธฐํ ๋ธ๋ญ
ํด๋์ค ๋ณ์์ ๋ณต์กํ ์ด๊ธฐํ์ ์ฌ์ฉํ๋ค.์ธ์คํด์ค ์ด๊ธฐํ ๋ธ๋ญ
์ธ์คํด์ค ๋ณ์์ ๋ณต์กํ ์ด๊ธฐํ์ ์ฌ์ฉํ๋ค.
์ฐจ์ด๋ ๊ฐ๋จํ๋ค. ์๋ฌด ์ด๋ฆ๋ ์๋ {}๋ธ๋ญ์ด ์ธ์คํด์ค ์ด๊ธฐํ ๋ธ๋ญ์ด๋ค.
์์ static์ ๋ถ์ฌ์ static{}์ผ๋ก ๋ง๋ค๋ฉด ํด๋์ค ์ด๊ธฐํ ๋ธ๋ญ์ด๋ค.
ํด๋์ค ์ด๊ธฐํ ๋ธ๋ญ์ ํด๋์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ฉ๋ ๋ ๋ฑ ํ ๋ฒ ์คํ๋๋ค.
๋ฐ๋ฉด ์ธ์คํด์ค ๋ธ๋ญ์ ์ธ์คํด์ค๋ฅผ ์์ฑํ ๋๋ง๋ค ์คํ๋๋ค.
์ธ์คํด์ค ์ด๊ธฐํ๋ ๋ณดํต ์์ฑ์๋ก ํ๋ค.
์์ฑ์๊ฐ ์ฌ๋ฌ ๊ฐ ์์ ๋, ์ฌ๋ฌ ๊ฐ์ ์์ฑ์์์ ์ค๋ณต๋๋ ๋ถ๋ถ์ ์ธ์คํด์ค ์ด๊ธฐํ ๋ธ๋ญ์ ๋ง๋ค์ด์ ์ด๋ค.
์ค๋ณต์ ์ ๊ฑฐํ๊ณ ์ฌ์ฌ์ฉ์ฑ์ ๋์ด๋ ๊ฒ์ด ๊ฐ์ฒด์งํฅํ๋ก๊ทธ๋๋ฐ์ด ์ถ๊ตฌํ๋ ๊ถ๊ทน์ ์ธ ๋ชฉํ๋ค.
์ด๊ธฐํ ์์
class InitTest {
/*๋ช
์์ ์ด๊ธฐํ*/
static int cv = 1;
int iv = 1;
static { //ํด๋์ค ์ด๊ธฐํ ๋ธ๋ญ
cv = 2;
}
{ //์ธ์คํด์ค ์ด๊ธฐํ ๋ธ๋ญ
iv = 2;
}
InitTest() { //์์ฑ์
iv = 3;
}
}
์ถ์ฒ:์๋ฐ์ ์ ์ 305p
1.cv๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ฉ. ๊ธฐ๋ณธ ๊ฐ์ธ 0์ผ๋ก ์ด๊ธฐํ. (static int cv)
2.static int cv = 1; ๋ช
์์ ์ด๊ธฐํ๋ก 1์ด ์ ์ฅ๋๋ค.
3.๊ทธ ๋ค์ ํด๋์ค ์ด๊ธฐํ ๋ธ๋ญ์ด ์คํ๋๋ฉด์ cv์ ๊ฐ์ 2๋ก ์ด๊ธฐํ ํ๋ค.
4.InitTestํด๋์ค์ ์ธ์คํด์ค๊ฐ ์์ฑ๋๋ฉด์ iv๊ฐ heap์ ๋ก๋ฉ๋๋ค.
iv์ญ์ intํ ๋ณ์์ด๋ฏ๋ก 0์ผ๋ก ์ด๊ธฐํ
5.๋ช
์์ ์ด๊ธฐํ์ ์ํด iv์ 1์ด ์ ์ฅ.
6.์ธ์คํด์ค ์ด๊ธฐํ ๋ธ๋ญ์ด ์คํ๋๋ฉด์ iv๋ฅผ 2๋ก ์ด๊ธฐํ.
7.๋ง์ง๋ง์ผ๋ก ์์ฑ์๊ฐ ์คํ๋๋ฉด์ iv๋ฅผ 3์ผ๋ก ์ด๊ธฐํํ๋ค.
'Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋คํ์ฑPolymorphism (0) | 2020.09.06 |
---|---|
์์Inheritance (0) | 2020.09.06 |
์ ์ด์Modifier (0) | 2020.09.06 |
๊ฐ์ฒด์งํฅ1 (0) | 2020.09.06 |
Java๋? (0) | 2020.09.06 |