Java

๊ฐ์ฒด์ง€ํ–ฅ2

voider 2020. 9. 6. 18:34

๐Ÿ“š ์ž๋ฐ”์˜ ์ •์„์„ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

JVM ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ

JVM์€ ํ”„๋กœ๊ทธ๋žจ์„ ์ˆ˜ํ–‰ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น ๋ฐ›๋Š”๋‹ค. JVM์€ ์ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์—ฌ๋Ÿฌ ์˜์—ญ์œผ๋กœ ๋‚˜๋ˆ„๋Š”๋ฐ, ์ฃผ์š” ์˜์—ญ ์„ธ ๊ฐ€์ง€๋‹ค.

  • Method area
    ํด๋ž˜์Šค๊ฐ€ ์‚ฌ์šฉ๋  ๋•Œ, JVM์€ ํ•ด๋‹น ํด๋ž˜์Šค์˜ ํด๋ž˜์Šค ํŒŒ์ผ*.class๋ฅผ ์ฝ๊ณ  ํด๋ž˜์Šค์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ด๊ณณ์— ์ €์žฅํ•œ๋‹ค. ๋‹น์—ฐํžˆ ํด๋ž˜์Šค ๋ณ€์ˆ˜๋„ ์ด๊ณณ์— ์ €์žฅ๋œ๋‹ค.

  • Call Stack ํ˜น์€ Execution Stack
    ๋ฉ”์„œ๋“œ ์ž‘์—…์— ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์ œ๊ณตํ•œ๋‹ค. ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด ์ฝœ์Šคํƒ์— ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ• ๋‹น๋˜๊ณ , ์ž‘์—…์ด ๋๋‚˜๋ฉด ๋ฐ˜ํ™˜๋œ๋‹ค.

  • Heap
    ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ๊ณต๊ฐ„์ด๋‹ค. ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋„ ์ด๊ณณ์— ์ƒ์„ฑ๋œ๋‹ค.


์œ„์—์„œ ๋งํ•œ ํ˜ธ์ถœ์ŠคํƒCall Stack์€ ์ด๋Ÿฐ ์‹์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

ํด๋ž˜์Šค(static) ๋ฉ”์„œ๋“œ์™€ ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ

  • ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ๋ž€, ํด๋ž˜์Šค ๋ณ€์ˆ˜์™€ ์œ ์‚ฌํ•˜๋‹ค. ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ ์•ž์— static์„ ๋ถ™์ด๋ฉด ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ๊ฐ€ ๋œ๋‹ค.

static ๋ฉ”์„œ๋“œ๋Š” ์–ธ์ œ ๋งŒ๋“ค๊นŒ?

๋ฉ”์„œ๋“œ ๋‚ด์—์„œ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ์—ฌ์•ผ ํ•œ๋‹ค.
๋ฐ˜๋ฉด ๋ฉ”์„œ๋“œ ๋‚ด์—์„œ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋‚˜, ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด static๋ฉ”์„œ๋“œ๋กœ ์ •์˜ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

  1. ํด๋ž˜์Šค๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ, ๋ฉค๋ฒ„๋ณ€์ˆ˜ ์ค‘ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค์— ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์— static์„ ๋ถ™์ธ๋‹ค.

  2. static๋ณ€์ˆ˜๋Š” ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ์—†์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  3. static๋ฉ”์„œ๋“œ๋Š” ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
    ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ ๋˜์—ˆ์„ ๋•Œ, ๊ฐ์ฒด(์ธ์Šคํ„ด์Šค)๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ.
    ๋ฐ˜๋Œ€๋Š” ๊ฐ€๋Šฅํ•˜๋‹ค.

  4. ๋ฉ”์„œ๋“œ ๋‚ด์—์„œ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด 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์™€ ์˜ค๋ฒ„๋กœ๋”ฉ

๊ฐ€๋ณ€์ธ์ž๋กœ ๋™์ ์œผ๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

  1. method(String str1, String str2, String str3)์„
  2. method(String... str)์ฒ˜๋Ÿผ ์“ธ ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ง์ด๋‹ค.

method("a", "b")
method("a")
method(new String[]{"A", "B"})

๋ชจ๋‘ ๊ฐ€๋Šฅํ•˜๋‹ค.
๊ฐ€๋ณ€์ธ์ž๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ๋ฐฐ์—ด์„ ์ด์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง€๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ผญ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ์ข‹๋‹ค.

๊ทธ๋ฆฌ๊ณ 
๊ฐ€๋ณ€์ธ์ž๋Š” ์˜ค๋ฒ„๋กœ๋”ฉํ•  ์ˆ˜ ์—†๋‹ค.

1๋ฒˆ ๋ฉ”์„œ๋“œ๋ฅผ 2๋ฒˆ ๋ฉ”์„œ๋“œ๋กœ ์˜ค๋ฒ„๋กœ๋”ฉํ–ˆ์„ ๊ฒฝ์šฐ,
์ปดํŒŒ์ผ ์‹œ ๋‘ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์—†์–ด์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

์ƒ์„ฑ์žConstructor

์ƒ์„ฑ์ž๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ํ˜ธ์ถœํ•˜๋ฉฐ, ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋“ค์„ ์ดˆ๊ธฐํ™” ํ•˜๊ฑฐ๋‚˜, ์ƒ์„ฑ ์‹œ์— ์‹คํ–‰ํ•ด์•ผ ํ•  ์ž‘์—…์„ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

  1. ์ด๋ฆ„์€ ํด๋ž˜์Šค์˜ ์ด๋ฆ„๊ณผ ๊ฐ™๊ณ 
  2. ๋ฆฌํ„ด๊ฐ’์ด ์—†๋‹ค.

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