< ์ด์ „ ํฌ์ŠคํŒ… - ๋ณ€์ˆ˜>

 

 

๊ธฐ๋ณธ ์šฉ์–ด ์ •๋ฆฌ - ๐Ÿง ๋ณ€์ˆ˜๋ž€?

๐Ÿชฝ"ํ‹€๋ฆฐ ๋‚ด์šฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."    โ–บ ๋ณ€์ˆ˜๋ณ€์ˆ˜๋ž€, ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๊ฐ’์„ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์ด๋ฆ„์ด ๋ถ™์€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด๋‹ค.๋ณ€์ˆ˜๋Š” ๋ณ€์ˆ˜๊ฐ€ ์„ ์–ธ๋œ ์œ„์น˜์— ๋”ฐ๋ผ ๋ณ€์ˆ˜์˜ ์ข…๋ฅ˜

post-this.tistory.com

 


 

 

๐Ÿชฝ

"ํ‹€๋ฆฐ ๋‚ด์šฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."

 

 

 

โ–บ ์ธ์Šคํ„ด์Šค

  • ํด๋ž˜์Šค๊ฐ€ ์„ค๊ณ„๋„, ์ธ์Šคํ„ด์Šค๋Š” ์„ค๊ณ„๋„๋Š” ๋ณด๊ณ  ๋งŒ๋“  ๋ฌผ๊ฑด์ด๋‹ค.
  • ์‹ค์ฒดํ™”๋œ ๊ฐ์ฒด๋ฅผ ์ธ์Šคํ„ด์Šค๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
  • ์ฆ‰ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋˜์–ด ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋ฅผ ์ธ์Šคํ„ด์Šค๋ผ ๋ถ€๋ฅธ๋‹ค.
  • ๊ฐ์ฒด ๋‚ด์— ์ธ์Šคํ„ด์Šค๋ผ๋Š” ๊ฐœ๋…์ด ํฌํ•จ๋˜์–ด์žˆ๋‹ค.
  • ํ•˜์ง€๋งŒ ๊ฐ์ฒด์™€ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒƒ์ด ํฌ๊ฒŒ ์˜๋ฏธ์žˆ์ง„ ์•Š์€ ๊ฒƒ ๊ฐ™๋‹ค...

 

 

Q. ํด๋ž˜์Šค๊ฐ€ ์„ค๊ณ„๋„๋ฉฐ ์ธ์Šคํ„ด์Šค๊ฐ€ ์„ค๊ณ„๋„๋ฅผ ๋ณด๊ณ  ๋งŒ๋“  ๋ฌผ๊ฑด์ด๋ผ๋Š”๋ฐ, ๊ทธ๊ฒŒ ๋ฌด์Šจ ๋ง์ธ๊ฐ€?

 

A. ์ž๋™์ฐจ์™€ ๊ด€๋ จ๋œ ์„ค๊ณ„๋„๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ฒ ๋‹ค.

// ์ถœ์ฒ˜ - jongtachi๋‹˜

// ์ž๋™์ฐจ๋ฅผ ๋งŒ๋“ค ์„ค๊ณ„๋„(ํด๋ž˜์Šค)
class Car {
    String brand;
    String model;

    // ์„ค๊ณ„๋„๋ฅผ ๋”ฐ๋ผ ์ž๋™์ฐจ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•(์ƒ์„ฑ์ž)
    public Car(String brand, String model) {
        this.brand = brand;
        this.model = model;
    }
}

public class Main {
    public static void main(String[] args) {
    
        // ์‹ค์ œ ์ฐจ๋ฅผ ๋งŒ๋“œ๋Š” ๊ณผ์ •(์ธ์Šคํ„ด์Šค)
        Car myCar = new Car("Toyota", "Camry");

        System.out.println("๋ธŒ๋žœ๋“œ: " + myCar.brand);
        System.out.println("๋ชจ๋ธ: " + myCar.model);
    }
}

 

 

 

 


 

 

 

 

โ–บ ์ƒ์„ฑ์ž

  • ์ƒ์„ฑ์ž์˜ ์ด๋ฆ„์€ ํด๋ž˜์Šค ์ด๋ฆ„๊ณผ ๋™์ผํ•ด์•ผํ•œ๋‹ค.
  • ๋ฆฌํ„ดํƒ€์ž…์ด ์—†๋‹ค.
  • ๋งค๊ฐœ๋ณ€์ˆ˜ ์กฐ๊ฑด์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ๊ฐœ ์ƒ์„ฑ ๊ฐ€๋Šฅํ•˜๋‹ค. (์˜ค๋ฒ„๋กœ๋”ฉ)
  • ์ƒ์„ฑ์ž ์ฝ”๋“œ๊ฐ€ ์—†์œผ๋ฉด ์ž๋™์œผ๋กœ ๊ธฐ๋ณธ์ƒ์„ฑ์ž๋ฅผ ์ƒ์„ฑํ•˜์ง€๋งŒ, ์ƒ์„ฑ์ž ์ฝ”๋“œ๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ์žˆ์„ ์‹œ ๊ธฐ๋ณธ์ƒ์„ฑ์ž๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

 

Q. ๋งค๊ฐœ๋ณ€์ˆ˜ ์กฐ๊ฑด์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ๊ฐœ ์ƒ์„ฑ ๊ฐ€๋Šฅํ•˜๋‹ค๋ผ๋Š” ๋ง์ด ๋ฌด์Šจ ๋ง์ผ๊นŒ?

 

A. ๋งค๊ฐœ๋ณ€์ˆ˜ ์กฐ๊ฑด์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ๊ฐœ ์ƒ์„ฑ ๊ฐ€๋Šฅํ•˜๋‹ค๋ผ๋Š” ๋ง์€ ์ƒ์„ฑ์ž ์˜ค๋ฒ„๋กœ๋”ฉ์„ ์˜๋ฏธํ•œ๋‹ค. 

์•„๋ž˜ ์˜ˆ์ œ์ฒ˜๋Ÿผ ์ƒ์„ฑ์ž์˜ ๋งค๊ฐœ๋ณ€์ˆ˜(year, model)์— ๋”ฐ๋ผ ์˜ค๋ฒ„๋กœ๋”ฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์ฃผ์˜ํ•ด์•ผํ•  ์ ์€ ์œ„์˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ ๊ฐ™์€ ํƒ€์ž…์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋‹ˆ ํƒ€์ž…์„ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐฏ์ˆ˜๊ฐ€ ๋‹ฌ๋ผ์•ผํ•œ๋‹ค.

// ์ถœ์ฒ˜ - jongtachi๋‹˜์˜ ์ฝ”๋“œ ์ˆ˜์ •

class Car {
    int year;
    String model;

    // ๋…„๋„๋งŒ ๋ฐ›๋Š” ์ƒ์„ฑ์ž
    public Car(int year) {
        this.year = year;
        this.model = "๋ฐ›์ง€ ์•Š์Œ";
    }

    // ๋ชจ๋ธ๋งŒ ๋ฐ›๋Š” ์ƒ์„ฑ์ž
    public Car(String model) {
        this.year = 0;
        this.model = model;
    }

    // ๋…„๋„, ๋ชจ๋ธ ๋ฐ›๋Š” ์ƒ์„ฑ์ž
    public Car(int year, String model) {
        this.year = year;
        this.model = model;
    }

    public void resultPrint() {
        System.out.println("Year: " + year + "   " + "Model: " + model);
    }
}

 public class Main {
        public static void main(String[] args) {

            // ๋…„๋„๋งŒ ์•„๋Š” ๊ฒฝ์šฐ
            Car car1 = new Car(2024);
            car1.resultPrint();

            // ๋ชจ๋ธ๋งŒ ์•„๋Š” ๊ฒฝ์šฐ
            Car car2 = new Car("Camry");
            car2.resultPrint();

            // ๋…„๋„์™€ ๋ชจ๋ธ๋งŒ ์•„๋Š” ๊ฒฝ์šฐ
            Car car3 = new Car(2024, "Camry");
            car3.resultPrint();


        }
    }

 

 

 

 

Q. ์ƒ์„ฑ์ž ์ฝ”๋“œ๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ์žˆ์„ ์‹œ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์€ ๋ฌด์Šจ ๋ง์ธ๊ฐ€?

A.  ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ–ˆ๊ณ  ์–ด๋–ค ์ƒ์„ฑ์ž๋„ ์—†์œผ๋ฉด ํ”„๋กœ๊ทธ๋žจ์€ ์ž๋™์œผ๋กœ ๊ธฐ๋ณธ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค์–ด๋‚ธ๋‹ค. 

// ์ž๋™์ฐจ๋ฅผ ๋งŒ๋“ค ์„ค๊ณ„๋„(ํด๋ž˜์Šค)
class Car {
    int year;
    String model;

	// ์–ด๋–ค ์ƒ์„ฑ์ž๋„ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค.
    
    public void resultPrint() {
        System.out.println("Brand: " + year + "   " + "Model: " + model);
    }
}

 public class Main {
        public static void main(String[] args) {

            // car1 ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ
            Car car1 = new Car();
            car1.resultPrint();


        }
    }

 

์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒƒ ๊ฐ™์ง€๋งŒ ๊ฒฐ๊ณผ๊ฐ’์€ ์ถœ๋ ฅ๋œ๋‹ค.

์ž๋™์œผ๋กœ ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค์–ด๋‚ธ ๊ฒƒ์ด๋‹ค.

 

 

๊ทธ๋Ÿฐ๋ฐ ์ƒ์„ฑ์ž๋ฅผ ํ•˜๋‚˜๋ผ๋„ ๋งŒ๋“ค๊ฒŒ ๋˜๋ฉด ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋„ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๋งŒ๋“ค์–ด์•ผํ•œ๋‹ค.

// ์ž๋™์ฐจ๋ฅผ ๋งŒ๋“ค ์„ค๊ณ„๋„(ํด๋ž˜์Šค)
class Car {
    int year;
    String model;


    // ๊ธฐ๋ณธ ์ƒ์„ฑ์ž
    public Car() {

    }


    // ๋ธŒ๋žœ๋“œ, ๋ชจ๋ธ ๋ฐ›๋Š” ์ƒ์„ฑ์ž
    public Car(int year, String model) {
        this.year = year;
        this.model = model;
    }

    public void resultPrint() {
        System.out.println("Brand: " + year + "   " + "Model: " + model);
    }
}

 public class Main {
        public static void main(String[] args) {

            // ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ์ด์šฉํ•  ์ธ์Šคํ„ด์Šค
            Car car1 = new Car();
            car1.resultPrint();


            Car car2 = new Car(2024, "Camry");
            car2.resultPrint();


        }
    }

 

 

๋งŒ์•ฝ ์•ˆ ๋งŒ๋“ค๊ฒŒ ๋˜๋ฉด?

// ์ž๋™์ฐจ๋ฅผ ๋งŒ๋“ค ์„ค๊ณ„๋„(ํด๋ž˜์Šค)
class Car {
    int year;
    String model;


    // ๋ธŒ๋žœ๋“œ, ๋ชจ๋ธ ๋ฐ›๋Š” ์ƒ์„ฑ์ž
    public Car(int year, String model) {
        this.year = year;
        this.model = model;
    }

    public void resultPrint() {
        System.out.println("Brand: " + year + "   " + "Model: " + model);
    }
}

 public class Main {
        public static void main(String[] args) {

            // ๊ธฐ๋ณธ์ƒ์„ฑ์ž๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ
            Car car1 = new Car();
            car1.resultPrint();


            Car car2 = new Car(2024, "Camry");
            car2.resultPrint();


        }
    }

 

 

์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค.

 

 

 

Q. ์ƒ์„ฑ์ž๋Š” ์™œ ๋งŒ๋“œ๋Š” ๊ฒƒ์ธ๊ฐ€?

 

A. ๋‹ค์–‘ํ•œ ์ด์œ ๊ฐ€ ์žˆ์ง€๋งŒ, ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๊ผญ ํ•„์š”ํ•œ ๊ฐ’๋“ค์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ๊ฐ•์ œํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ์‹œ๋กœ ๋Œ€๋ถ€๋ถ„ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค๋ฉด ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์œผ๋กœ ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค๊ฒŒ ๋œ๋‹ค. ๊ทธ๋Ÿด๋•Œ ํšŒ์›๋‹˜์˜ ์„ฑํ•จ๊ณผ ์•„์ด๋””, ๋น„๋ฐ€๋ฒˆํ˜ธ, ์ฃผ์†Œ ๋“ฑ ๋‚ด๊ฐ€ ๋งŒ๋“ค ํ”„๋กœ๊ทธ๋žจ์— ๊ผญ ์“ฐ์ผ ์ •๋ณด๋ฅผ ๋ฐ›๋„๋ก ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ ์™ธ์—๋„ ์œ ์ง€๋ณด์ˆ˜๋ฉด, ์ผ๊ด€์„ฑ ๋“ฑ์ด ์žˆ๋‹ค.

 

 

 

 


 

 

 

โ–บ ๋งค๊ฐœ๋ณ€์ˆ˜(Parameter)

  • ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์ƒ์„ฑ์ž๋‚˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•  ๋•Œ ์–ด๋–ค ๊ฐ’์„ ๋ฐ›์„์ง€ ๋ช…์‹œํ•˜๋Š” ๋ณ€์ˆ˜์ด๋‹ค.

 

โ–บ ์ธ์ž(Argument)

  • ์ธ์ž๋Š” ์ƒ์„ฑ์ž๋‚˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์‹ค์ œ๋กœ ์ „๋‹ฌ๋˜๋Š” ๊ฐ’์ด๋‹ค.

 

 

Q. ๊ทธ๋ž˜์„œ ๋‘˜์ด ๋ญ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅด๋‹ค๋Š” ๊ฒƒ์ธ๊ฐ€?

 

A. ์ง€๊ธˆ๊นŒ์ง€ ๋ด์˜จ ์ฝ”๋“œ์— ๋งค๊ฐœ๋ณ€์ˆ˜, ์ธ์ž ๋ชจ๋‘ ๋‚˜ํƒ€๋‚˜์žˆ๋‹ค.

    // ๋ธŒ๋žœ๋“œ, ๋ชจ๋ธ ๋ฐ›๋Š” ์ƒ์„ฑ์ž
    public Car(int year, String model) {
        this.year = year;
        this.model = model;
    }

 

์—ฌ๊ธฐ์—์„œ year๊ณผ model์€ ๋งค๊ฐœ๋ณ€์ˆ˜์ด๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋ฉ”์„œ๋“œ๋‚˜ ์ƒ์„ฑ์ž๋ฅผ ์ •์˜ํ•  ๋•Œ ์–ด๋–ค ๊ฐ’์„ ๋ฐ›์„์ง€ ๋ช…์‹œํ•˜๋Š” ๋ณ€์ˆ˜๋ผ๊ณ  ํ–ˆ๊ณ  Car๋Š” ์ƒ์„ฑ์ž๋กœ ๋ณ€์ˆ˜๋ฅผ year์€ ์ •์ˆ˜ํ˜•์œผ๋กœ model์€ ๋ฌธ์ž์—ด๋กœ ๋ฐ›๊ฒ ๋‹ค๊ณ  ๋ช…์‹œํ•œ ๊ฒƒ์ด๋‹ค.

 

Car car2 = new Car(2024, "Camry");
car2.resultPrint();

 

๊ทธ๋ ‡๋‹ค๋ฉด 2024์™€ Camry๋Š” ์ธ์ž๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค. ์ธ์ž๋Š” ์ƒ์„ฑ์ž๋‚˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์‹ค์ œ๋กœ ์ „๋‹ฌ๋˜๋Š” ๊ฐ’์ด๋‹ˆ 2024์™€ Camry๊ฐ€ ๋œ๋‹ค๋Š” ๊ฑธ ๋ฐ”๋กœ ์•Œ ์ˆ˜ ์žˆ๋‹ค. 

 

 

 

 

 

ํ˜ผ์ž ๊ณต๋ถ€ํ•˜๋ฉด์„œ ์ดํ•ดํ•˜๊ณ  ์“ด ๋‚ด์šฉ์ด๋ผ ํ‹€๋ฆฐ ๋‚ด์šฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋Œ“๊ธ€๋กœ ์ ์–ด๋‘์‹œ๋ฉด ์ˆ˜์ •ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿ€

 

[ ๋ธ”๋กœ๊ทธ์— ์“ด ๋‚ด์šฉ๋“ค์˜ ์ถœ์ฒ˜๋Š” ์•„๋ž˜์— ์ ์–ด๋‘˜ํ…Œ๋‹ˆ

๋“ค์–ด๊ฐ€์„œ ์ฝ์–ด๋ณด์‹œ๋ฉด ๋”์šฑ ๋„์›€์ด ๋˜์‹ค ๋“ฏ ํ•ฉ๋‹ˆ๋‹ค ]

 

 


 

 

< ์ดํ›„ ํฌ์ŠคํŒ… - static๊ณผ final>

 

 

Java ๊ธฐ๋ณธ ์šฉ์–ด ์ •๋ฆฌ - ๐Ÿง ์ž์ฃผ ํ•จ๊ป˜ ์“ฐ์ด๋Š” static๊ณผ final

๊ธฐ๋ณธ ์šฉ์–ด ์ •๋ฆฌ - ๐Ÿง ์ธ์Šคํ„ด์Šค, ์ƒ์„ฑ์ž ๊ทธ๋ฆฌ๊ณ  ๋งค๊ฐœ๋ณ€์ˆ˜(Parameter)์™€ ์ธ์ž(Argument)์˜ ์ฐจ์ด๊ธฐ๋ณธ ์šฉ์–ด ์ •๋ฆฌ - ๐Ÿง ๋ณ€์ˆ˜๋ž€?๐Ÿชฝ"ํ‹€๋ฆฐ ๋‚ด์šฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."    โ–บ ๋ณ€์ˆ˜๋ณ€์ˆ˜๋ž€, ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๊ฐ’

post-this.tistory.com

 

 


 

- ์ธ์Šคํ„ด์Šค ์ถœ์ฒ˜

 

๊ฐ์ฒด(object), ํด๋ž˜์Šค(class), ์ธ์Šคํ„ด์Šค(instance)

ํด๋ž˜์Šค(Class) ๋ž€ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ๋‚ด๊ธฐ ์œ„ํ•œ ์„ค๊ณ„๋„ ํ˜น์€ ํ‹€ ์—ฐ๊ด€๋˜์–ด ์žˆ๋Š” ๋ณ€์ˆ˜์™€ ๋ฉ”์„œ๋“œ์˜ ์ง‘ํ•ฉ ๊ฐ์ฒด(Object) ๋ž€ ์†Œํ”„ํŠธ์›จ์–ด ์„ธ๊ณ„์— ๊ตฌํ˜„ํ•  ๋Œ€์ƒ ํด๋ž˜์Šค์— ์„ ์–ธ๋œ ๋ชจ์–‘ ๊ทธ๋Œ€๋กœ ์ƒ์„ฑ๋œ ์‹ค์ฒด ํŠน์ง• 1)

joy-baek.tistory.com

 

 

- jongtachi๋‹˜ ์˜ˆ์ œ ์ถœ์ฒ˜

 

[IT Info] ์ธ์Šคํ„ด์Šค(Instance)์™€ ๊ฐ์ฒด(Object)

๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(OOP)์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋‘ ๊ฐ€์ง€ ๊ฐœ๋…์ธ ์ธ์Šคํ„ด์Šค(Instance)์™€ ๊ฐ์ฒด(Object)์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ๋ถ€ํ„ฐ ์„ค๋ช…๋“œ๋ฆด ๋‚ด์šฉ์€ ๊ต‰์žฅํžˆ ์ค‘์š”ํ•œ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. ์ด ๋‘ ์šฉ์–ด๋Š”

jongtachi.tistory.com

 

 

- ์ƒ์„ฑ์ž์™€ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ถœ์ฒ˜

 

[Java] ์ž๋ฐ” - ์ƒ์„ฑ์ž์˜ ๋ชฉ์ , ํŠน์ง•, ์‚ฌ์šฉ๋ฒ• (Constructor)

์ž๋ฐ” - ์ƒ์„ฑ์ž์˜ ๋ชฉ์ , ํŠน์ง•, ์‚ฌ์šฉ๋ฒ• 1. ์ƒ์„ฑ์ž์˜ ๋ชฉ์  ์ƒ์„ฑ์ž(Constructor)๋Š” ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋ ๋•Œ ์ž๋™์œผ๋กœ ํ˜ธ์ถœ๋˜๋Š” ํŠน์ˆ˜ ๋ชฉ์ ์˜ ๋ฉค๋ฒ„ํ•จ์ˆ˜(๋ฉ”์†Œ๋“œ)๋กœ ๊ฐ์ฒด์˜ ์ดˆ๊ธฐํ™”๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. 2. ์ƒ์„ฑ์ž์˜ ํŠน

kadosholy.tistory.com

 

 

- ์ƒ์„ฑ์ž์™€ ์˜ค๋ฒ„๋กœ๋”ฉ ์ถœ์ฒ˜

 

[java] ์ƒ์„ฑ์ž ์™„๋ฒฝํ•˜๊ฒŒ ์ดํ•ดํ•˜๊ธฐ! (with. this)

๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ํ˜ธ์ถœ๋˜๋Š” ์ธ์Šคํ„ด์Šค ์ดˆ๊ธฐํ™” ๋ฉ”์„œ๋“œnew ํ‚ค์›Œ๋“œ์™€ ํ•จ๊ป˜ ํ˜ธ์ถœ \- Person person1 = new Person();์ผ๋ฐ˜ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์˜ ์ดˆ๊ธฐํ™”๋‚˜ ๊ฐ์ฒด ์ƒ์„ฑ ์‹œ ์‹คํ–‰๋ผ์•ผ ํ•˜๋Š” ์ž‘์—… ์ •๋ฆฌํด๋ž˜์Šค ์ด๋ฆ„๊ณผ ๋™์ผ๋ฆฌํ„ด

velog.io

 

 

- ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์ธ์ž์˜ ์ฐจ์ด ์ถœ์ฒ˜

 

Parameter์™€ Argument / ๋งค๊ฐœ๋ณ€์ˆ˜, ์ธ์ž ๊ทธ๋ฆฌ๊ณ  ์ธ์ˆ˜ ์šฉ์–ด ๊ตฌ๋ถ„

์šฉ์–ด์ •๋ฆฌ ํ™•์‹คํ•˜๊ฒŒ ํ•ด๋ณด์ž

velog.io

 

 

 

 

๐Ÿชฝ

"ํ‹€๋ฆฐ ๋‚ด์šฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."

 

 

 

 

โ–บ ๋ณ€์ˆ˜

๋ณ€์ˆ˜๋ž€, ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๊ฐ’์„ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์ด๋ฆ„์ด ๋ถ™์€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด๋‹ค.

๋ณ€์ˆ˜๋Š” ๋ณ€์ˆ˜๊ฐ€ ์„ ์–ธ๋œ ์œ„์น˜์— ๋”ฐ๋ผ ๋ณ€์ˆ˜์˜ ์ข…๋ฅ˜๋ฅผ ์ •ํ•œ๋‹ค.

 

 

1. ํด๋ž˜์Šค ๋ณ€์ˆ˜ (์ „์—ญ๋ณ€์ˆ˜)

 

ํด๋ž˜์Šค ๋ณ€์ˆ˜์˜ ํŠน์ง•์€ ํฌ๊ฒŒ ๋„ค๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

  • ๋ณ€์ˆ˜ ํƒ€์ž… ์•ž์— static์„ ๋ถ™์ธ๋‹ค.
  • ํด๋ž˜์Šค ๋ณ€์ˆ˜๋Š” ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๊ฐ€ ๊ณต์œ ํ•œ๋‹ค.
  • ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๊ฐ€ ๊ณตํ†ต๋œ ๊ฐ’์„ ๊ณต์œ ํ•œ๋‹ค.
  • ํด๋ž˜์Šค ์ด๋ฆ„, ํด๋ž˜์Šค ๋ณ€์ˆ˜๋ช…์„ ํ†ตํ•ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

Q. ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๊ฐ€ ๊ณต์œ ๋œ๋‹ค๋Š” ๋ง์ด ๋ฌด์Šจ ์˜๋ฏธ์ธ๊ฐ€?

 

A. ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค๋Š” ํด๋ž˜์Šค ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•˜์ž๋ฉด ํด๋ž˜์Šค ๋ณ€์ˆ˜๋Š” ๋งˆ์„์— ๋†“์ธ ์šฐ์ฒดํ†ต์ด๊ณ  ์ธ์Šคํ„ด์Šค๋Š” ์ง‘์ด๋ผ๊ณ  ๋น„์œ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ง‘(์ธ์Šคํ„ด์Šค)๋Š” ์šฐ์ฒดํ†ต(ํด๋ž˜์Šค ๋ณ€์ˆ˜)์— ํŽธ์ง€๋ฅผ ๊บผ๋‚ผ์ˆ˜๋„ ํŽธ์ง€๋ฅผ ๋„ฃ์„ ์ˆ˜๋„ ์žˆ๋‹ค. ๋ชจ๋“  ์ง‘์ด ๋˜‘๊ฐ™์€ ์šฐ์ฒดํ†ต์„ ์“ฐ๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ค ์ง‘์—์„œ ๋„ฃ์€ ํŽธ์ง€๋ฅผ ๋‹ค๋ฅธ ์ง‘์—์„œ ๊บผ๋‚ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

// chat-GPT๋ฅผ ํ†ตํ•ด ์˜ˆ์ œ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

class Counter {

    // static์ด ๋ถ™์€ ๊ฒƒ์„ ํ†ตํ•ด ํด๋ž˜์Šค ๋ณ€์ˆ˜๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
    // ํด๋ž˜์Šค ๋ณ€์ˆ˜๋ฅผ 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ–ˆ๋‹ค.
    static int count = 0;  

    // ์ƒ์„ฑ์ž Counter๋ฅผ ํ†ตํ•ด new Counter()๊ฐ€ ์žˆ์œผ๋ฉด count ๋ณ€์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•˜๋„๋ก ํ–ˆ๋‹ค.
    Counter() {
        count++;  
    }
 
    // ํ˜„์žฌ count๊ฐ€ ์–ผ๋งˆ๋‚˜ ์ฆ๊ฐ€ํ–ˆ๋Š”์ง€ ๋ณด์—ฌ์ฃผ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.
    void showCount() {
        System.out.println("Count: " + count);
    }
}

public class Main {
    public static void main(String[] args) {
    
    	// ์ธ์Šคํ„ด์Šค c1๊ณผ c2๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ๋‹ค.
    	// ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด count++๊ฐ€ ์‹คํ–‰๋œ๋‹ค.
        // c1๊ณผ c2๋กœ count++๊ฐ€ ์ด ๋‘ ๋ฒˆ ์‹คํ–‰๋˜์—ˆ๋‹ค.
        Counter c1 = new Counter();  
        Counter c2 = new Counter();  

        // ์ด c1๊ณผ c2๋Š” showCount ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๊ฒฐ๊ณผ๊ฐ’์ด ์ถœ๋ ฅ๋œ๋‹ค.
        // ๊ฒฐ๊ณผ๊ฐ’์€ 2๊ฐ€ ๋œ๋‹ค.
        // 2๊ฐ€ ๋‚˜์˜ค๋Š” ์ด์œ ๋Š” ๋™์ผํ•œ ํด๋ž˜์Šค ๋ณ€์ˆ˜ count๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
        c1.showCount();  
        c2.showCount();  
    }
}

 

 

 

 

 


 

 

 

 

 

2. ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜ (์ „์—ญ๋ณ€์ˆ˜)

 

 

์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜์˜ ํŠน์ง•์€ ํฌ๊ฒŒ ์„ธ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

  • ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜์–ด์•ผ ๋ณ€์ˆ˜๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.
  • ํด๋ž˜์Šค ๊ฐ์ฒด์™€ ๋‹ค๋ฅด๊ฒŒ ๊ณต์œ ๋˜์ง€ ์•Š๋Š”๋‹ค.
  • ์ธ์Šคํ„ด์Šค๋งˆ๋‹ค ๊ณ ์œ ํ•œ ๋‹ค๋ฅธ ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

 

 

์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜์™€ ํด๋ž˜์Šค ๋ณ€์ˆ˜์˜ ์ฐจ์ด๋ฅผ ์•Œ์•„๋ณด๋Š” ์˜ˆ์ œ๋ฅผ ์ฐพ์•˜๋‹ค.

// ์ถœ์ฒ˜ - sujinhope๋‹˜
public class Main {

    public static class StaticTest {

	// ํด๋ž˜์Šค ๋ณ€์ˆ˜
        static int classVar = 10;
        //์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜
        int instanceVar = 28;

    }


    public static void main(String[] args) {

	// staticTest1๊ณผ staticTest2์ธ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑํ–ˆ๋‹ค.
        StaticTest staticTest1 = new StaticTest();
        StaticTest staticTest2 = new StaticTest();
        
        // ์‹คํ–‰ ๊ฐ’์€ 1๋ฒˆ๊ณผ 2๋ฒˆ ๋ชจ๋‘ 10๊ณผ 28์ด ๋œ๋‹ค.
        System.out.println("1๋ฒˆ " + staticTest1.classVar + ", " + staticTest1.instanceVar);
        System.out.println("2๋ฒˆ " + staticTest2.classVar + ", " + staticTest2.instanceVar);

	// ํด๋ž˜์Šค ๋ณ€์ˆ˜ staticTest1์˜ ๊ฐ’์„ 12๋กœ ๋ณ€๊ฒฝํ–ˆ๋‹ค.
        staticTest1.classVar = 12;
        // ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜ staticTest1์˜ ๊ฐ’์„ 400์œผ๋กœ ๋ณ€๊ฒฝํ–ˆ๋‹ค.
        staticTest1.instanceVar = 400;

        System.out.println();
        // 1๋ฒˆ์˜ ์ถœ๋ ฅ๊ฐ’์€ 12์™€ 400์ด ๋œ๋‹ค.
        // 2๋ฒˆ์˜ ์ถœ๋ ฅ๊ฐ’์€ 12์™€ 28์ด ๋œ๋‹ค.
        System.out.println("1๋ฒˆ " + staticTest1.classVar + ", " + staticTest1.instanceVar);
        System.out.println("2๋ฒˆ " + staticTest2.classVar + ", " + staticTest2.instanceVar);;
    }
}

 

ํด๋ž˜์Šค ๋ณ€์ˆ˜๋Š” ์ธ์Šคํ„ด์Šค์˜ ๋ชจ๋“  ๊ฐ’์„ ๊ณต์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค ๊ฐ’์ด ๋ฐ”๋€Œ๋ฉด ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๊ฐ€ ๊ฐ’์„ ๋ณ€๊ฒฝ๋œ๋‹ค. 
์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋Š” ์ธ์Šคํ„ด์Šค์˜ ๊ฐ’์„ ๊ณต์œ ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ธ์Šคํ„ด์Šค๊ฐ€ ๊ฐœ๋ณ„์ ์œผ๋กœ ๊ฐ’์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

 

 

Q. ํด๋ž˜์Šค, ์ธ์Šคํ„ด์Šค, ํด๋ž˜์Šค ๋ณ€์ˆ˜, ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๊ฐ€ ๋ฌด์—‡์ธ๊ฐ€?

 

A. ๋น„์œ ๋กœ ์˜ˆ๋ฅผ ๋“ค์–ด๋ณด๊ฒ ๋‹ค. [ ํด๋ž˜์Šค๋Š” ๋นตํ‹€  ,  ์ธ์Šคํ„ด์Šค๋Š” ๋นตํ‹€๋กœ ์ฐ์–ด๋‚ธ ๋นต  ,  ํด๋ž˜์Šค ๋ณ€์ˆ˜๋Š” ๋นต์— ํ‘œ์‹์„ ๋‚จ๊ธฐ๋Š” ๋นต์ง‘์˜ ์‹œ๊ทธ๋‹ˆ์ฒ˜(?)  ,  ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋Š” ๋นต ์•ˆ์— ๋“ค์–ด๊ฐ€๋Š” ์žผ ]์œผ๋กœ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 


 

 

 

 

 

3. ์ง€์—ญ๋ณ€์ˆ˜

  • ๋ฉ”์„œ๋“œ ๋‚ด์—์„œ ์„ ์–ธ๋œ๋‹ค.
  • ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋  ๋•Œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น๋ฐ›๋Š”๋‹ค.
  • ๋ฉ”์„œ๋“œ๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ์†Œ๋ฉธ๋˜์–ด ์‚ฌ๋ผ์ง„๋‹ค.

 

// ์ถœ์ฒ˜ - sujinhope๋‹˜
public class Main {

    public static class StaticTest {

	// ์ „์—ญ๋ณ€์ˆ˜ ์ค‘ ํ•˜๋‚˜์ธ ํด๋ž˜์Šค ๋ณ€์ˆ˜์ด๋‹ค.
        static int classVar = 10;
        // ์ „์—ญ๋ณ€์ˆ˜ ์ค‘ ํ•˜๋‚˜์ธ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜์ด๋‹ค.
        int instanceVar = 28;

	// ๋ฉ”์„œ๋“œ์ธ method๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.
        public void method() {
            // ์ง€์—ญ๋ณ€์ˆ˜ localVar
            int localVar = -100;
            System.out.println("์ง€์—ญ ๋ณ€์ˆ˜ ๊ฐ’ : " + localVar);
        }

    }


    public static void main(String[] args) {

	// localTest ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.
        StaticTest localTest = new StaticTest();
	// ์ธ์Šคํ„ด์Šค๋ฅผ ํ†ตํ•ด method ์‹คํ–‰ํ•œ๋‹ค.
        localTest.method();
    }
}

 

 

 

 

 

 

 

ํ˜ผ์ž ๊ณต๋ถ€ํ•˜๋ฉด์„œ ์ดํ•ดํ•˜๊ณ  ์“ด ๋‚ด์šฉ์ด๋ผ ํ‹€๋ฆฐ ๋‚ด์šฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋Œ“๊ธ€๋กœ ์ ์–ด๋‘์‹œ๋ฉด ์ˆ˜์ •ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿ€

 

[ ๋ธ”๋กœ๊ทธ์— ์“ด ๋‚ด์šฉ๋“ค์˜ ์ถœ์ฒ˜๋Š” ์•„๋ž˜์— ์ ์–ด๋‘˜ํ…Œ๋‹ˆ

๋“ค์–ด๊ฐ€์„œ ์ฝ์–ด๋ณด์‹œ๋ฉด ๋”์šฑ ๋„์›€์ด ๋˜์‹ค ๋“ฏ ํ•ฉ๋‹ˆ๋‹ค ]

 

 

 

 


 

< ์ดํ›„ ํฌ์ŠคํŒ… - ์ธ์Šคํ„ด์Šค, ์ƒ์„ฑ์ž, ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์ธ์ž์˜ ์ฐจ์ด>

 

 

๊ธฐ๋ณธ ์šฉ์–ด ์ •๋ฆฌ - ๐Ÿง ์ธ์Šคํ„ด์Šค, ์ƒ์„ฑ์ž ๊ทธ๋ฆฌ๊ณ  ๋งค๊ฐœ๋ณ€์ˆ˜(Parameter)์™€ ์ธ์ž(Argument)์˜ ์ฐจ์ด

๊ธฐ๋ณธ ์šฉ์–ด ์ •๋ฆฌ - ๐Ÿง ๋ณ€์ˆ˜๋ž€?๐Ÿชฝ"ํ‹€๋ฆฐ ๋‚ด์šฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."    โ–บ ๋ณ€์ˆ˜๋ณ€์ˆ˜๋ž€, ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๊ฐ’์„ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์ด๋ฆ„์ด ๋ถ™์€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด๋‹ค.๋ณ€์ˆ˜๋Š” ๋ณ€์ˆ˜๊ฐ€ ์„ ์–ธ

post-this.tistory.com

 

 


 

 

- ๋ณ€์ˆ˜์˜ ๊ฐœ๋… ์ •๋ฆฌ ์ถœ์ฒ˜

 

[JAVA] ์ž๋ฐ”์˜ ๋ณ€์ˆ˜ (ํด๋ž˜์Šค ๋ณ€์ˆ˜, ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜, ์ง€์—ญ ๋ณ€์ˆ˜)

์ด ๊ธ€์€ PC ๋ฒ„์ „ TISTORY์— ์ตœ์ ํ™” ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค. ์„ ์–ธ ์œ„์น˜์— ๋”ฐ๋ฅธ ๋ณ€์ˆ˜์˜ ์ข…๋ฅ˜ ์ž๋ฐ”์—์„œ์˜ ๋ณ€์ˆ˜๋Š” ํด๋ž˜์Šค ๋ณ€์ˆ˜, ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜, ์ง€์—ญ ๋ณ€์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณ€์ˆ˜์˜ ์ข…๋ฅ˜๋ฅผ ๊ฒฐ์ •์ง“๋Š” ๊ฒƒ์€ '๋ณ€์ˆ˜๊ฐ€ ์„ ์–ธ

itmining.tistory.com

 

 

- sujinhope๋‹˜์˜ ์˜ˆ์ œ ์ถœ์ฒ˜

 

[java] ํด๋ž˜์Šค๋ณ€์ˆ˜, ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜ ์ฐจ์ด(static๋ณ€์ˆ˜์™€ non Static๋ณ€์ˆ˜) - Break Out of Your Comfort Zone

๋ชฉ์ฐจ ํด๋ž˜์Šค ๋ณ€์ˆ˜, ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜ ํด๋ž˜์Šค ๋ณ€์ˆ˜, ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜, ์ง€์—ญ ๋ณ€์ˆ˜๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ๋˜๋Š” ์œ„์น˜ ํด๋ž˜์Šค ๋ณ€์ˆ˜(Static)์˜ ์ฃผ์˜์ , ํด๋ž˜์Šค ๋ณ€์ˆ˜๊ฐ€ ํ•„์š”ํ•œ ์ด์œ  ํด๋ž˜์Šค ๋ณ€์ˆ˜, ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜

sujinhope.github.io

 

 

- ์ „์—ญ๋ณ€์ˆ˜์™€ ์ง€์—ญ๋ณ€์ˆ˜์˜ ๊ฐœ๋… ์ •๋ฆฌ ์ถœ์ฒ˜

 

๊ตฌ๋ฆ„EDU - ๋ชจ๋‘๋ฅผ ์œ„ํ•œ ๋งž์ถคํ˜• IT๊ต์œก

๊ตฌ๋ฆ„EDU๋Š” ๋ชจ๋‘๋ฅผ ์œ„ํ•œ ๋งž์ถคํ˜• IT๊ต์œก ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค. ๊ฐœ์ธ/ํ•™๊ต/๊ธฐ์—… ๋ฐ ๊ธฐ๊ด€ ๋ณ„ ์ตœ์ ํ™”๋œ IT๊ต์œก ์†”๋ฃจ์…˜์„ ๊ฒฝํ—˜ํ•ด๋ณด์„ธ์š”. ๊ธฐ์ดˆ๋ถ€ํ„ฐ ์‹ค๋ฌด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ต์œก, ์ „๊ตญ ์ดˆ์ค‘๊ณ /๋Œ€ํ•™๊ต ์˜จ๋ผ์ธ ์ˆ˜์—…, ๊ธฐ์—…/

edu.goorm.io

 

 

- chatGPT์˜ ๋„์›€๋„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.

 

 

๐Ÿชฝ

"ํ‹€๋ฆฐ ๋‚ด์šฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊น€์˜ํ•œ ์„ ์ƒ๋‹˜์˜ ์Šคํ”„๋ง ๊ธฐ๋ณธํŽธ์„ ์œ„์ฃผ๋กœ ๊ณต๋ถ€ํ–ˆ์Šต๋‹ˆ๋‹ค."

 

 

 

โ–บ ์ธํ„ฐํŽ˜์ด์Šค (๊ธฐ๋ณธ ์„ค๊ณ„๋„)

public interface MemberRepository {

    void save(Member member);

    Member findById(Long memberId);

}
// ์ถœ์ฒ˜: 1)๊น€์˜ํ•œ์˜ ์Šคํ”„๋ง ๊ธฐ๋ณธํŽธ

 

  • public interface๋ผ๊ณ  ์„ ์–ธํ•˜๋ฉด ๊ทธ๊ฒƒ์ด ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋œ๋‹ค.
  • ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ถ”์ƒํ™” ํด๋ž˜์Šค๋กœ ์ผ๋ฐ˜์ ์ธ ๋ฉ”์„œ๋“œ, ๋ฉค๋ฒ„ ๋ณ€์ˆ˜ ๊ตฌ์„ฑ์›(์•„๋ž˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ)์„ ๊ฐ€์งˆ ์ˆ˜ ์—†๋‹ค.
  • ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ถ”์ƒ๋ฉ”์„œ๋“œ(๋งŒ๋“ค๋‹ค ๋งŒ ๊ฒƒ ๊ฐ™์€ ๋ฉ”์„œ๋“œ)์™€ ์ƒ์ˆ˜(final์„ ์ด์šฉํ•˜์—ฌ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ์–ด๋–ค ๊ฐ’์„ ๋งŒ๋“œ๋Š” ๊ฒƒ)๋งŒ ๊ฐ€์ง„๋‹ค.
  • ์ถ”์ƒ๋ฉ”์„œ๋“œ๋Š” public abstruct - ๋กœ ์‹œ์ž‘ํ•˜์ง€๋งŒ, ์œ„์˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ ์ƒ๋žตํ•ด๋„ ๋ฌด๊ด€ํ•˜๋‹ค.
  • ์ƒ์ˆ˜๋Š” public static final -๋กœ ์‹œ์ž‘ํ•˜์ง€๋งŒ, ์ƒ๋žต๊ฐ€๋Šฅํ•˜๋‹ค. 
  • ์‰ฝ๊ฒŒ ๋งํ•ด ๋ถˆ์™„์ „ํ•˜๋ฏ€๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค๋ฅธ ๋†ˆ์ด ํ•„์š”ํ•˜๋‹ค!

 

  • ํ•œ ํด๋ž˜์Šค ํ˜น์€ ํ•œ ์ธํ„ฐํŽ˜์ด์Šค์— ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋‹ค์ค‘ ์ƒ์†์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
public interface Dog extends Animal, Pet {
    void bark();
}

 

class Cat implements Animal, Pet {

    public void cry() {
        System.out.println("๋ƒ์˜น๋ƒ์˜น!");
    }

    public void play() {
        System.out.println("์ฅ ์žก๊ธฐ ๋†€์ดํ•˜์ž~!");
    }
// ์ถœ์ฒ˜: 3)TCP School

 

 

 

โ–บ ๊ตฌํ˜„์ฒด (๊ตฌ์ฒด์ ์ธ ์„ค๊ณ„๋„)

@Component
public class MemoryMemberRepository implements MemberRepository{

    private static Map<Long, Member> store = new HashMap<>();

    @Override
    public void save(Member member) {
        store.put(member.getId(), member);
    }

    @Override
    public Member findById(Long memberId) {
        return store.get(memberId);
    }

 

  • implements๋ฅผ ํ†ตํ•ด ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์†์„ ๋ฐ›๋Š”๋‹ค.
  • ๊ตฌ์ฒด์ ์ธ ๋ฉ”์„œ๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.
  • ๊ฐ™์€ ํด๋ž˜์Šค ๋‚ด์—์„œ ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ตฌํ˜„์ฒด๋ฅผ ํ•œ ๋ฒˆ์— ๋„ฃ์„ ์ˆ˜๋„ ์žˆ๋‹ค. 

 


 

 

Q. ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“  ์ด์œ ๋Š”?

A. ์—ฌ๋Ÿฌ ์ด์œ ๊ฐ€ ์žˆ๋Š”๋ฐ, ๊ฐ€์žฅ ํฐ ๊ฒƒ์€ ์˜์กด์„ฑ ๋ฌธ์ œ์ด๋‹ค. ํด๋ž˜์Šค๋Š” ์„œ๋กœ ์–ฝํ˜€์žˆ๋‹ค. ํ•œ ํด๋ž˜์Šค์— ํ•œ ๊ธฐ๋Šฅ์„ ๋‹ด๋‹นํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํšŒ์›์ •๋ณด๋ฅผ ๋„ฃ๊ณ  ๋นผ๋Š” ํด๋ž˜์Šค, ํšŒ์› ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ํด๋ž˜์Šค, ์ฃผ๋ฌธ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํด๋ž˜์Šค ๋“ฑ ์–ด๋–ค ํ”„๋กœ์ ํŠธ๋ฅผ ํ•  ๋•Œ ์—ฌ๋Ÿฌ ํด๋ž˜์Šค๋“ค์ด ์„œ๋กœ ์–ฝํ˜€์žˆ๊ฒŒ ๋œ๋‹ค. 

 

 ์˜ˆ์‹œ๋กœ ํ‰์†Œ์—๋Š” 10๋งŒ์› ์ด์ƒ ๊ตฌ๋งค์‹œ 10ํผ์„ผํŠธ ํ• ์ธํ•˜๋Š” ์ •์ฑ…์ด์—ˆ๋Š”๋ฐ, ์ถ”์„๋งž์ด ์ด๋ฒคํŠธ๋กœ 10๋งŒ์› ์ด์ƒ ๊ตฌ๋งค์‹œ 30ํผ์„ผํŠธ๋กœ ํ• ์ธํ•˜๋Š” ์ •์ฑ…์„ ์ƒˆ๋กญ๊ฒŒ ๋„ฃ๋Š” ๊ฒƒ์„ ๋“ค์–ด๋ณด์ž. ๊ทธ๋Ÿฌ๋ฉด 30ํผ์„ผํŠธ ํ• ์ธํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค ๊ฒƒ์ด๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์—†๋‹ค๋ฉด  ์ฃผ๋ฌธ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํด๋ž˜์Šค์— ๊ฐ€์„œ ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•ด์•ผํ•œ๋‹ค. 10ํผ์„ผํŠธ ํ• ์ธ ํด๋ž˜์Šค๋ฅผ ์„ ์–ธํ•ด๋†จ๊ฒ ์ง€๋งŒ, 30ํผ์„ผํŠธ ํ• ์ธ ํด๋ž˜์Šค๋กœ ๋ณ€๊ฒฝํ•ด์•ผํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ• ์ธ ์ •์ฑ…์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ํด๋ž˜์Šค์— ๋“ค์–ด๊ฐ€ ์ง์ ‘ ์ˆ˜์ •์„ ํ•ด์ค˜์•ผํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์ด ์ƒ๊ธด๋‹ค. ๋˜ ๊ทธ๋กœ์ธํ•œ ์˜ค๋ฅ˜๋„ ๋ฐœ์ƒํ•˜๊ฒŒ๋œ๋‹ค.

 

 ๊ทธ๋Ÿฐ ์˜ค๋ฅ˜๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ค‘๊ฐ„์— ๊ปด๋‘๋Š” ๊ฒƒ์ด๋‹ค. A ํด๋ž˜์Šค - ์ธํ„ฐํŽ˜์ด์Šค - B ํด๋ž˜์Šค๋กœ ๋งŒ๋“ค์–ด B ํด๋ž˜์Šค๊ฐ€ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋กœ ๋Œ€์ฒดํ•˜๋”๋ผ๋„ A ํด๋ž˜์Šค ์ฝ”๋“œ์— ์ง์ ‘์ ์ธ ์ˆ˜์ •์ด ์—†๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค.

 

 ๋ฌผ๋ก  ์ธํ”„๋Ÿฐ์— ๊น€์˜ํ•œ ์„ ์ƒ๋‹˜์˜ ์Šคํ”„๋ง๊ธฐ๋ณธํŽธ์„ ๋“ฃ๊ฒŒ๋œ๋‹ค๋ฉด ์ž๋ฐ” ์Šคํ”„๋ง์˜ ์˜์กด์„ฑ ๋ฌธ์ œ๋ฅผ ์–ด๋–ค์‹์œผ๋กœ ํ•ด๊ฒฐํ•˜๋Š”์ง€ ๋” ์ž์„ธํ•˜๊ฒŒ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

 


 

 

Q. ๊ทธ๋ ‡๋‹ค๋ฉด ์ธํ„ฐํŽ˜์ด์Šค ๋‚ด๋ถ€์— ์ถ”์ƒ๋ฉ”์„œ๋“œ๋ฅผ ๋‘๋Š” ์ด์œ ๊ฐ€ ๋ฌด์—‡์ธ๊ฐ€?

A. ์ฒซ๋ฒˆ์งธ๋Š” ์ธํ„ฐํŽ˜์ด์Šค์— ์ •์˜๋œ ๋ฉ”์„œ๋“œ๋“ค์„ ๊ตฌ์ฒดํด๋ž˜์Šค์— ๊ฐ€์„œ ๋ฐ˜๋“œ์‹œ ๊ตฌํ˜„ํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค. ๋งŒ์ผ ์ธํ„ฐํŽ˜์ด์Šค์— ์ •์˜๋œ ๋ฉ”์„œ๋“œ๋“ค์„ ๊ตฌํ˜„์ฒด์—์„œ ์‹คํ–‰ํ•˜์ง€ ์•Š์œผ๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.

 

 ๋‘๋ฒˆ์งธ๋Š” ์• ๋งค๋ชจํ˜ธํ•˜๊ฒŒ ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•˜์—ฌ ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•œ๋‹ค. ์•„๊นŒ ์œ„์˜ ์งˆ๋ฌธ์—์„œ ์„œ์ˆ ํ–ˆ๋“ฏ, ํ• ์ธ ์ •์ฑ…์ด ๋ณ€๊ฒฝ๋  ์‹œ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๊ตฌ์ฒด์ ์ธ ๋ฉ”์„œ๋“œ๋กœ ์ •์˜๋˜์–ด์žˆ๋‹ค๋ฉด ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ฝ”๋“œ๋„ ์ˆ˜์ •ํ•ด์•ผํ•œ๋‹ค. ์ถ”์ƒ๋ฉ”์„œ๋“œ๋กœ ๋‘ฌ ๋ฉ”์„œ๋“œ์˜ ์ด๋ฆ„๋งŒ ๋งž์ถฐ ๊ตฌ์ฒดํด๋ž˜์Šค๋ฅผ ์ž‘์„ฑํ•˜๊ฒŒ ๋˜๋ฉด ๊ฐ์ชฝ๊ฐ™์ด ๋ฐ”๋€Œ๊ฒŒ ๋œ๋‹ค. (์ด ๊ฒฝ์šฐ ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ตฌํ˜„๋ถ€๋ฅผ ์ด์–ด์ฃผ๋Š” ํด๋ž˜์Šค๊ฐ€ ๋”ฐ๋กœ ์กด์žฌํ•ด์•ผํ•œ๋‹ค.)

 

 


 

 

 

Q. ํด๋ž˜์Šค๋Š” ํด๋ž˜์Šค์—๊ฒŒ ๋‹ค์ค‘ ์ƒ์†์ด ์•ˆ๋˜์ง€๋งŒ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ฐ€๋Šฅํ•˜๋‹ค. ์™œ ๊ทธ๋Ÿฐ๊ฒƒ์ผ๊นŒ?

A.
๋‹ค์ด์•„๋ชฌ๋“œ ๋ฌธ์ œ๋ฅผ ์œ ๋ฐœํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํ•œ ํด๋ž˜์Šค๊ฐ€ ๋‹ค๋ฅธ ๋‘ ํด๋ž˜์Šค์—๊ฒŒ ์ƒ์†์„ ๋ฐ›์•˜๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž. ๋‘ ํด๋ž˜์Šค์— ๊ฐ™์€ ๋ฉ”์„œ๋“œ ์‹œ๊ทธ๋‹ˆ์ฒ˜ (๋™์ผํ•œ ์ด๋ฆ„, ๋™์ผํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜)๊ฐ€ ์žˆ๋‹ค๋ฉด ํ•˜์œ„(์ƒ์†์„ ๋ฐ›์€) ํด๋ž˜์Šค๋Š” ํ˜ผ๋™ํ•˜๊ฒŒ ๋œ๋‹ค. ์–ด๋–ค ์ƒ์œ„ ํด๋ž˜์Šค์—์„œ ๋ฉ”์„œ๋“œ๋ฅผ ๋ฐ›์•„์˜ฌ์ง€ ๋ง์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ํด๋ž˜์Šค๋Š” ๊ตฌ์ฒด์ ์œผ๋กœ ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์ค‘์ƒ์†์ด ์•ˆ๋œ๋‹ค.

 

 ํ•˜์ง€๋งŒ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ถ”์ƒ์ ์ธ ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์„œ๋“œ ์‹œ๊ทธ๋‹ˆ์ฒ˜๊ฐ€ ๊ฐ™์•„๋„ ๋ฌด๊ด€ํ•˜๋‹ค. 

 

 

 

 


 

 

 

1)  ๊น€์˜ํ•œ์˜ ์Šคํ”„๋ง ๊ธฐ๋ณธํŽธ ์ถœ์ฒ˜

 

์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ ๊ฐ•์˜ | ๊น€์˜ํ•œ - ์ธํ”„๋Ÿฐ

๊น€์˜ํ•œ | ์Šคํ”„๋ง ์ž…๋ฌธ์ž๊ฐ€ ์˜ˆ์ œ๋ฅผ ๋งŒ๋“ค์–ด๊ฐ€๋ฉด์„œ ์Šคํ”„๋ง์˜ ํ•ต์‹ฌ ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•˜๊ณ , ์Šคํ”„๋ง ๊ธฐ๋ณธ๊ธฐ๋ฅผ ํ™•์‹คํžˆ ๋‹ค์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค., ์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•˜๊ณ , ์„ฑ์žฅํ•˜๋Š” ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜์–ด๋ณด

www.inflearn.com

 

 

 

2) ์ธํ„ฐํŽ˜์ด์Šค ์ด์ •๋ฆฌ ์ถœ์ฒ˜

 

[Java] ์ธํ„ฐํŽ˜์ด์Šค(interface) ์ด ์ •๋ฆฌ

์„œ๋ก  Spring ๊ณต๋ถ€ํ•˜๋˜ ์ค‘ interface๋ถ€๋ถ„์— ๋Œ€ํ•ด ์ดํ•ด๊ฐ€ ๋ถ€์กฑํ•œ ๊ฒƒ ๊ฐ™์•„ ์ž์„ธํ•˜๊ฒŒ ํ•œ๋ฒˆ ์ •๋ฆฌํ•ด ๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋ชฉ์ฐจ 1. ์ธํ„ฐํŽ˜์ด์Šค๋ž€? 2. ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ž‘์„ฑ ๋ฐฉ๋ฒ• 3. ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ƒ์† 4. ์ธํ„ฐํŽ˜์ด์Šค์˜

dkswnkk.tistory.com

 

 

 

3) TCPSchool ์ถœ์ฒ˜

 

์ฝ”๋”ฉ๊ต์œก ํ‹ฐ์”จํ”ผ์Šค์ฟจ

4์ฐจ์‚ฐ์—…ํ˜๋ช…, ์ฝ”๋”ฉ๊ต์œก, ์†Œํ”„ํŠธ์›จ์–ด๊ต์œก, ์ฝ”๋”ฉ๊ธฐ์ดˆ, SW์ฝ”๋”ฉ, ๊ธฐ์ดˆ์ฝ”๋”ฉ๋ถ€ํ„ฐ ์ž๋ฐ” ํŒŒ์ด์ฌ ๋“ฑ

tcpschool.com

 

 

 

 

4) ๋‹ค์ค‘ ์ƒ์† ์ถœ์ฒ˜

 

[Java] ์ž๋ฐ”์˜ ๋‹ค์ค‘์ƒ์† (feat. ์ธํ„ฐํŽ˜์ด์Šค์™€ ์ถ”์ƒํด๋ž˜์Šค)

์•Œ๊ณ  ์‹œ์ž‘ํ•ด์•ผ ํ•  ๋‚ด์šฉ 1. ์ž๋ฐ”์—์„œ ํด๋ž˜์Šค์˜ ๋‹ค์ค‘ ์ƒ์†์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. 2. ํ•˜์ง€๋งŒ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋‹ค์ค‘ ์ƒ์†์€ ๊ฐ€๋Šฅํ•˜๋‹ค. why? ์ธํ„ฐํŽ˜์ด์Šค์™€ ์ถ”์ƒํด๋ž˜์Šค๋ฅผ ๊ณต๋ถ€ํ•˜๋˜ ์ค‘, ์ž๋ฐ”์˜ ๋‹ค์ค‘์ƒ์† ์ด๋ž€ ๊ฐœ๋…

junior-datalist.tistory.com

 

<์ถœ์ฒ˜ ์ธํ”„๋Ÿฐ>



8์›” ์ „์— ๋‹ค ๋๋‚ด๊ธฐ๋กœ ํ•œ ๊ณ„ํš,,,! ๊ฐ•์˜๋Š” ๋ชจ๋‘ ๋“ค์—ˆ์ง€๋งŒ ์™œ์ธ์ง€ ๋ธ”๋กœ๊ทธ ์ž‘์„ฑ์€ ๋ฏธ๋ค„์กŒ๋‹ค. ๊ทธ๋ž˜๋„ ์˜์ƒ ๋‹ค ๋“ค์€๊ฒŒ ์–ด๋””๋ƒ๋ฉฐ ์•ฝ๊ฐ„์˜ ์œ„๋กœ์™€ ํ•จ๊ป˜ ๋ธ”๋กœ๊ทธ ์ž‘์„ฑ์„ ํ•ด๋ณด๋ คํ•œ๋‹ค. ์ฝ”๋กœ๋‚˜๋กœ ์ธํ•ด ์ฒด๋ ฅ์ด ๋ฐ•์‚ด๋‚œ๊ฑด์ง€, ๊ทธ๋ƒฅ ์ด๋ฏธ ๋ฐ•์‚ด๋‚œ๊ฑธ ๋‚ด๊ฐ€ ๋ชฐ๋ž๋˜ ๊ฑด์ง€ ์•Œ ์ˆ˜ ์—†์ง€๋งŒ ์œ„๊ฒฝ๋ จ ํ„ฐ์ง€๋ฉฐ ๊ธธ๋ฐ”๋‹ฅ์— ์ฃผ์ €์•‰๋Š” ์ธ์ƒ์ด์–ด๋„ ์˜ค๋Š˜๋„ ํ™”์ดํŒ…!! ๋ชจ๋‘๋“ค ํ™”์ดํŒ…!



 

๐Ÿงธ 

 


 

๐Ÿงธ ๊ตฌ์กฐํŒŒ์•… ๋ ˆ์ธ ๊ผฌ์šฐ- ๐Ÿงธ

 • scope

ใ„ด class :  SingletonTest, SingletonWithPrototypeTest1, PrototypeTest

 • web

ใ„ด class :  LogDemoController, LogDemoService

• common

ใ„ด class :  MyLogger

 


 

Q. ๋นˆ ์Šค์ฝ”ํ”„๋ž€?

A. ๋นˆ์ด ์‚ฌ์šฉ๋˜์–ด์ง€๋Š” ๋ฒ”์œ„์ด๋‹ค.

 

 

โœ”๏ธ  SingletonTest

 

โ–บ  ๊ฒฐ๊ณผ

 

์ง€๊ธˆ๊นŒ์ง€ ์šฐ๋ฆฌ๊ฐ€ ๋ฐฐ์šด ๊ฒƒ์€ ์‹ฑ๊ธ€ํ†ค ๋นˆ ์Šค์ฝ”ํ”„๋‹ค. ์‹ฑ๊ธ€ํ†ค ๋นˆ ์Šค์ฝ”ํ”„๋Š” ์‹ฑ๊ธ€ํ†ค ๋นˆ์ด ์‹œ์ž‘๋˜์–ด ๋๋‚ ๋•Œ๊นŒ์ง€ ์œ ์ง€๋œ๋‹ค. ๋˜ ๊ฐ™์€ ์š”์ฒญ์— ๋Œ€ํ•ด ๊ฐ™์€ ์ธ์Šคํ„ด์Šค ๋นˆ์œผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

 

 

 


 

 

 

โœ”๏ธ  PrototypeTest

 

@Scope("prototype")
static class PrototypeBean {

}

 

@Scope("prototype")

: ๋นˆ์˜ ์Šค์ฝ”ํ”„๋ฅผ ํ”„๋กœํ† ํƒ€์ž…์œผ๋กœ ์„ค์ •ํ•œ๋‹ค. 

 

 

โ–บ  ๊ฒฐ๊ณผ

ํ”„๋กœํ† ํƒ€์ž… ๋นˆ์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋‹ค๋ฅด๊ฒŒ ์š”์ฒญ๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์‹ฑ๊ธ€ํ†ค ๋นˆ ์Šค์ฝ”ํ”„๋Š” ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ์œ ์ง€๋˜์ง€๋งŒ ํ”„๋กœํ† ํƒ€์ž…์€ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…๊ณผ ์ดˆ๊ธฐํ™”(Prototype.init 2๋ฒˆ ์š”์ฒญ๋œ ๊ฒƒ์„ ๋ณด๋ฉด)๊นŒ์ง€๋งŒ ๊ด€์—ฌํ•œ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— Predestroy ๋ฉ”์„œ๋“œ๋Š” ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค. (ํ˜„์žฌ ์‹คํ–‰ ๊ฒฐ๊ณผ์—์„œ Prototype.destroy๊ฐ€ ์žˆ์ง€๋งŒ, ๋”ฐ๋กœ ์ฝ”๋“œ์— prototypeBean1.destroy();๋ฅผ ์ ์–ด์„œ ๊ทธ๋Ÿฐ๊ฒƒ์ด๋‹ค.)

 

 

 

 


 

 

โœ”๏ธ  SingletonWithPrototypeTest1

 

โ–บ  ํ”„๋กœํ† ํƒ€์ž…๊ณผ ์‹ฑ๊ธ€ํ†ค์„ ํ•จ๊ป˜ ์“ธ ๊ฒฝ์šฐ ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ์ 

    @Scope("singleton")
    static class ClientBean {

	private final PrototypeBean prototypeBean;
        
        @Autowired
        public ClientBean(PrototypeBean prototypeBean) {
        	this.prototypeBean = prototypeBean;
        }

        public int logic() {
            prototypeBean.addCount();
            int count = prototypeBean.getCount();
            return count;
        }
    }

 

์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ์‹ฑ๊ธ€ํ†ค ํด๋ž˜์Šค์ธ ClientBean ๋‚ด๋ถ€์— ํ”„๋กœํ† ํƒ€์ž… ๋นˆ์ด ์„ ์–ธ๋˜์—ˆ๋‹ค. ๋ชจ๋‘๊ฐ€ ์•Œ๋‹ค์‹œํ”ผ ์‹ฑ๊ธ€ํ†ค ๋นˆ์€ ์ƒ์„ฑ์‹œ์  ๋”ฑ ํ•œ ๋ฒˆ ์ƒ์„ฑ๋˜๊ณ  ๊ทธ ์ƒ์„ฑ๋œ ๊ฒƒ์„ ์ค‘๋ณตํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.(์ด๋ฏธ ํ• ๋‹น๋œ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ™์€ ๋นˆ์„ ์‚ฌ์šฉํ•  ๋•Œ ๋งˆ๋‹ค ๊ฐ™์€ ์ธ์Šคํ„ด์Šค ํ• ๋‹น) ๊ทธ๋Ÿฌ๋‹ˆ ๊ทธ ๋‚ด๋ถ€์— ํ•จ๊ป˜ํ•˜๋Š” ํ”„๋กœํ† ํƒ€์ž…๋„ ๋ณธ๋ž˜์˜ ํŠน์„ฑ์ด ์•„๋‹Œ ์‹ฑ๊ธ€ํ†ค ๋นˆ์„ ๋”ฐ๋ผ๊ฐ€๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 

Q. ๋งŒ์•ฝ ๊ฐ™์€ ์ธ์Šคํ„ด์Šค๊ฐ€ ๊ณ„์† ํ˜ธ์ถœ๋˜๋Š” ํ”„๋กœํ† ํƒ€์ž…์€ ๋”์ด์ƒ ํ”„๋กœํ† ํƒ€์ž…์ด ์•„๋‹ˆ๊ณ  ์‹ฑ๊ธ€ํ†ค์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‚˜?

A. ๋งž๋‹ค. ๊ทธ ํŠน์„ฑ์ด ์‹ฑ๊ธ€ํ†ค์ด ๋˜์—ˆ์œผ๋‹ˆ, ๋”์ด์ƒ ํ”„๋กœํ† ํƒ€์ž…์ด ์•„๋‹ˆ๋‹ค.

 

 

 

 

โ–บ  ์ฃผ์ž… ์‹œ์  ์ฐจ์ด

static class ClientBean {
 
         @Autowired
         private ApplicationContext ac;
         
         public int logic() {
             PrototypeBean prototypeBean = ac.getBean(PrototypeBean.class);
             prototypeBean.addCount();
             int count = prototypeBean.getCount();
             return count;
	}
}

 

์ „ ์ฝ”๋“œ๋Š” ์‹ฑ๊ธ€ํ†ค ๋นˆ ๋‚ด๋ถ€์— ํ”„๋กœํ† ํƒ€์ž…์ด ์„ ์–ธ๋˜์—ˆ๋‹ค. ํ˜„์žฌ ์ฝ”๋“œ๋Š” ApplicationContext๋ฅผ ์ด์šฉํ•ด ํ”„๋กœํ† ํƒ€์ž… ๋นˆ์„ ๋”ฐ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. logic ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด ac(ApplicationContext)๋ฅผ ํ†ตํ•ด ํ”„๋กœํ† ํƒ€์ž… ๋นˆ์„ ๋งค๋ฒˆ ์š”์ฒญํ•˜๊ฒŒ ๋œ๋‹ค. 

 

 

 

 

 

โ–บ  ObjectFactory

static class ClientBean {

	@Autowired
	private ObjectProvider<PrototypeBean> prototypeBeanProvider;
 
	public int logic() {
		PrototypeBean prototypeBean = prototypeBeanProvider.getObject();
		prototypeBean.addCount();
		int count = prototypeBean.getCount();
		return count;
	}
}

 

ObjectProbvider

: ์ง€์ •ํ•œ ๋นˆ์„ ์ฐพ์•„ ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋Œ€์‹  ์ฐพ์•„์ฃผ๋Š” DL ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค. / ์Šคํ”„๋ง์— ์˜์กด์ ์ด๋‹ค.

 

 

 

- ObjectProvider ์ถœ์ฒ˜

 

ObjectProvider (Spring Framework 6.1.13 API)

Return a sequential Stream over all matching object instances, pre-ordered according to the factory's common order comparator. In a standard Spring application context, this will be ordered according to Ordered conventions, and in case of annotation-based

docs.spring.io

 

- ObjectFactory ์ถœ์ฒ˜

 

ObjectFactory (Spring Framework 6.1.13 API)

Defines a factory which can return an Object instance (possibly shared or independent) when invoked. This interface is typically used to encapsulate a generic factory which returns a new instance (prototype) of some target object on each invocation. This i

docs.spring.io

 

 

 

 

โ–บ  JSR-330 Provider

static class ClientBean {

    @Autowired
    private Provider<PrototypeBean> prototypeBeanProvider;

    public int logic() {
        PrototypeBean prototypeBean = prototypeBeanProvider.get();
        prototypeBean.addCount();
        int count = prototypeBean.getCount();
        return count;
    }
}

 

Provider< >

:  < > ์•ˆ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์ง€์—ฐ, ์˜ต์…˜, ์˜์กด์ ์ธ ๊ฒฝ์šฐ์ธ ์ˆœํ™˜์ฐธ์กฐ๋ฌธ์ œ์— ์“ด๋‹ค.

 

 

- Provider ์ถœ์ฒ˜

 

Provider (Jakarta EE 8 Specification APIs)

T get() Provides a fully-constructed and injected instance of T.

jakarta.ee

 

 

 

 


 

 

 

 

โœ”๏ธ  MyLogger

๊ฐ€์งœ ํ”„๋ก์‹œ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋กœ๊ทธ ์š”์ฒญ์„ ์œ„ํ•œ ํด๋ž˜์Šค

@Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class MyLogger {

 

value

: ์›น ์Šค์ฝ”ํ”„์˜ ์ข…๋ฅ˜๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, ํ˜„์žฌ๋Š” Http ์š”์ฒญ ํ•˜๋‚˜๊ฐ€ ๋“ค์–ด๊ฐ€๊ณ  ๋‚˜๊ฐˆ๋•Œ ๊ฐ€์ง€ ์œ ์ง€๋˜๋Š” request๋กœ ๋˜์–ด์žˆ๋‹ค.

 

 

ProxyMode

: GoF ๋‹ค์ž์ธ ํŒจํ„ด์œผ๋กœ ํ•ด๋‹น ๊ฐ์ฒด์˜ ์ƒ์„ฑ์ด๋‚˜ ์ดˆ๊ธฐํ™”๋ฅผ ์ง€์—ฐํ•˜๊ฑฐ๋‚˜, ์ ‘๊ทผ์„ ์ œ์–ดํ•  ๋•Œ, ์„ฑ๋Šฅ ์ตœ์ ํ™”๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•œ๋‹ค.

 

ScopedProxyMode์˜ ์ข…๋ฅ˜

- DEFAULT : ํ”„๋ก์‹ฑ ์—†์Œ
- NO : ํ”„๋ก์‹ฑ ์—†์Œ (DEFAULT์™€ ๊ฐ™์Œ)
- INTERFACE : ์ธํ„ฐํŽ˜์ด์Šค ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์  ํ”„๋ก์‹ฑ ์ƒ์„ฑ
- TARGET_CLASS : ๋Œ€์ƒ ํด๋ž˜์Šค ๊ธฐ๋ฐ˜์œผ๋กœ CGLIB ํ”„๋ก์‹œ ์ƒ์„ฑ
- SCOPED_PROXY INTERFACES : INTERFACE ํ˜น์€ TARGET_CLASS ์ค‘ ํ•˜๋‚˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํŠน๋ณ„ํ•œ ๋‹จ์ถ•ํ˜• ๊ฐ’์ด๋‹ค.

 

 

๊ณ ๊ฐ์ด ์„œ๋น„์Šค๋ฅผ ์–ธ์ œ ์š”์ฒญํ• ์ง€ ๋ชจ๋ฅธ๋‹ค. ๊ฑฐ๊ธฐ๋‹ค 

 

 

 

- ProxyMode  ์ถœ์ฒ˜

 

ProxyMode in Spring Framework

The Spring Framework is a comprehensive and powerful framework for building enterprise-grade Java applications. One of its core features is…

medium.com

 

 

 

••• ์ด์–ด์„œ ๋‹ค๋ฅธ ์ฝ”๋“œ ๋ถ€๋ถ„ •••

 

 

public void setRequestURL(String requestURL) {
    this.requestURL = requestURL;
}

public void log(String message) {
    System.out.println("[" + uuid + "]" + "[" + requestURL + "]" + message);
}

@PostConstruct
public void init() {
    uuid = UUID.randomUUID().toString();
    System.out.println("[" + uuid + "] request scope bean create:" + this);
}

 

setter๋ฅผ ํ†ตํ•ด requestURL์„ ๋ฐ›๋Š”๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ฒ˜์Œ Http ์š”์ฒญ์ด ์˜ค๋ฉด @PostConstruct๋ฅผ ํ†ตํ•ด uuid๋ฅผ random์œผ๋กœ ๋งŒ๋“ค์–ด log๋กœ ๋ณด๋‚ธ๋‹ค.

 

 

Q. requestURL์€ ๋นˆ์ด ์ƒ์„ฑ๋˜๋Š” ์‹œ์ ์„ ์•Œ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— setter๋กœ ๋ฐ›๋Š”๋ฐ ์™œ ์ƒ์„ฑ์‹œ์ ์„ ๋ชจ๋ฅผ๊นŒ?

A. ํ˜„์žฌ MyLogger์˜ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด, requestURL์„ ์ƒ์„ฑํ•˜๋Š” ์ฝ”๋“œ๋Š” ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ฆ‰, ๋‹ค๋ฅธ ํด๋ž˜์Šค์—์„œ ๋ฐ›์•„์˜จ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๊ฑฐ๊ธฐ๋‹ค MyLogger์€ request ์Šค์ฝ”ํ”„๋กœ ์ •์˜๋˜์–ด์žˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋Š”๊ฑด Http์˜ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜๊ณ , ๊ทธ ํ›„์— requestURL ๊ฐ’์ด ๊ฒฐ์ •๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋Ÿฌํ•œ ์ด์œ ๋กœ requestURL ๋นˆ์€ ์ƒ์„ฑ์‹œ์ ์€ ์•Œ ์ˆ˜ ์—†๋‹ค. ์ผ๋‹จ ์š”์ฒญ์ด ์žˆ์–ด์•ผํ•˜๋Š”๋ฐ ์š”์ฒญ์ด ์–ธ์ œ ์˜ฌ์ง€ ๋ชจ๋ฅด๋ฉฐ ๋‹ค๋ฅธ ํด๋ž˜์Šค(์„œ๋น„์Šค๋‚˜ ์ปจํŠธ๋กค๋Ÿฌ)์— requestURL์„ ์ƒ์„ฑํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

 

 

 


 

 

 

 

โœ”๏ธ  LogDemoController

๋กœ๊ฑฐ๊ฐ€ ์ž˜ ์ž‘๋™๋˜๋Š”์ง€ ํ…Œ์ŠคํŠธ์šฉ ์ปจํŠธ๋กค๋Ÿฌ

 

@Controller
@RequiredArgsConstructor
public class LogDemoController {

    private final LogDemoService logDemoService;
    private final MyLogger myLogger;

 

@ReqiredArgsConstructor (Lombok)

: ์ดˆ๊ธฐํ™” ๋˜์ง€์•Š์€ final ํ•„๋“œ๋‚˜, @NonNull์ด ๋ถ™์€ ํ•„๋“œ์— ๋Œ€ํ•ด ์ƒ์„ฑ์ž๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ, @Autowired๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•œ๋‹ค.

 

 

LogDemoService์™€ MyLogger ์˜์กด๊ด€๊ณ„๋ฅผ ์ฃผ์ž…ํ•ด์ค€๋‹ค. private์™€ final๋กœ ์„ ์–ธํ•œ ์ด์œ ๋Š” ์ฝ๊ฑฐ๋‚˜ ์ˆ˜์ •์„ ๋ชปํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค. ์™ธ๋ถ€์—์„œ ์ˆ˜์ •๋  ๊ฒฝ์šฐ ์ฝ”๋“œ์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

 

 

- @ReqiredArgsConstructor ์ถœ์ฒ˜

 

@NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor

 

projectlombok.org

 

 

 

••• ์ด์–ด์„œ ๋‹ค๋ฅธ ์ฝ”๋“œ ๋ถ€๋ถ„ •••

 

 

@RequestMapping("log-demo")
@ResponseBody
public String longDemo(HttpServletRequest request) {
    String requestURL = request.getRequestURI().toString();
    myLogger.setRequestURL(requestURL);

 

@RequestMapping( )

: ๋“ค์–ด์˜จ ์š”์ฒญ์„ ํŠน์ • ๋ฉ”์„œ๋“œ์™€ ๋งคํ•‘ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

 

ํ˜„์žฌ ์ฝ”๋“œ์—์„œ๋Š” @RequestMapping์— ๋Œ€ํ•ด ๊ด„ํ˜ธ ์•ˆ์— ์–ด๋–ค value๊ฐ’์ด๋‚˜ method๊ฐ’์„ ์ž‘์„ฑํ•˜์ง€ ์•Š์•˜๋‹ค. ๊ทธ๋ ‡๋‹ค๋Š”๊ฑด ์š”์ฒญ๋ฐฉ์‹์— ๊ด€๊ณ„์—†์ด url์ด ์ผ์น˜ํ•˜๋Š” ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ("log-demo")๋ผ๊ณ  ์ ํ˜€์žˆ์œผ๋‹ˆ, log-demo ๊ฒฝ๋กœ๋กœ ๋“ค์–ด์˜จ Http ์š”์ฒญ์„ ์ด ๋ฉ”์„œ๋“œ๊ฐ€ ์ฒ˜๋ฆฌํ•œ๋‹ค๋Š” ์˜๋ฏธ๊ฐ€ ๋œ๋‹ค.

 

 

@ResponseBody

: Http ์‘๋‹ต์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜, ์‘๋‹ต ๋ฐ”๋””๋ฅผ JSON, XML, ๋ฌธ์ž์—ด ๋“ฑ์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฐ˜ํ™˜ํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.

 

 

getRequestURL

: ์š”์ฒญ์— ์‚ฌ์šฉ๋œ URL๋กœ ๋ถ€ํ„ฐ URL ๊ฐ’์„ ๋ฆฌํ„ดํ•œ๋‹ค.

 

 

toString( )

: ๋ฌธ์ž์—ด ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

HttpServletRequest๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ธ Http ์š”์ฒญ์„ ๋‹ด๊ณ  ์žˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด MyLogger์—์„œ ๊ฐ€์งœ ํ”„๋ก์‹œ๋ฅผ ๋งŒ๋“ค๋„๋ก ํ–ˆ์œผ๋‹ˆ, Http ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด logDemo์—์„œ HttpServletRequest์— ๊ฐ€์งœ ํ”„๋ก์‹œ๋ฅผ ๋„ฃ๊ณ  ์‹œ์ž‘ํ•˜๊ฒŒ ๋œ๋‹ค. ๊ทธ ํ›„์— ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญํ•œ URL ๊ฐ’์„ ๊ฐ€์ ธ์™€ ๋ฌธ์ž์—ด ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ•œ๋‹ค. ๊ทธ๋ ‡๊ฒŒ๋˜๋ฉด myLogger.set- ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด MyLogger์—์„œ URL ๊ฐ’์ด ์ถœ๋ ฅ๋œ๋‹ค.

 

 

 

- @RequestMapping ์ถœ์ฒ˜

 

Spring @RequestMapping์ด๋ž€? ์ž‘์„ฑ๋ฐฉ๋ฒ•, ์˜ˆ์‹œ

1. @RequestMapping์ด๋ž€ @RequestMapping์€ ํด๋ผ์ด์–ธํŠธ์ด ์š”์ฒญ(url)์— ๋งž๋Š” ํด๋ž˜์Šค๋‚˜ ๋ฉ”์„œ๋“œ๋ฅผ ์—ฐ๊ฒฐ์‹œ์ผœ์ฃผ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด๋‹ค. ์ด ์–ด๋…ธํ…Œ์ด์…˜์€ ๊ทธ ์œ„์น˜์— ๋”ฐ๋ผ ์˜๋ฏธ๊ฐ€ ๋‹ค๋ฅด๋‹ค. ํด๋ž˜์Šค ๋ ˆ๋ฒจ : ๊ณตํ†ต ์ฃผ์†Œ ๋ฉ”

sharonprogress.tistory.com

 

 

- @ResponseBody ์ถœ์ฒ˜

 

[Spring] @RequestBody / @ResponseBody ์–ด๋…ธํ…Œ์ด์…˜ ์ด๋ž€?

์Šคํ”„๋ง์—์„œ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ๊ฒฝ์šฐ @RequestBody , @ResponseBody๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ์ด ์–ด๋…ธํ…Œ์ด์…˜๋“ค์€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ• ๊นŒ? ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„์˜ ๋น„๋™๊ธฐ ํ†ต์‹  ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„๋กœ ํ†ต

cheershennah.tistory.com

 

 

- getrequestURL ์ถœ์ฒ˜

 

request ๊ฐ์ฒด ๋ฉ”์†Œ๋“œ ๊ฐ„๋‹จ์ •๋ฆฌ ๋ฐ getRequestURL()๊ณผ getRequestURI() ์ฐจ์ด

Request ๊ฐ์ฒด ๋ฉ”์†Œ๋“œ ๊ฐ„๋‹จ์ •๋ฆฌ์ž๋ฐ” Request ๋ฉ”์†Œ๋“œ๋“ค์„ ๊ฐ„๋‹จํžˆ ์ •๋ฆฌํ•ด ๋ณด์•˜๋‹ค.์ž์ฃผ์‚ฌ์šฉํ•˜๋ฉด์„œ๋„ ๋งค๋ฒˆ ์ฐพ๊ฒŒ ๋˜๋Š” ํœ˜๋ฐœ์„ฑ ๊ธฐ์–ต๋ ฅ ๋•Œ๋ฌธ์— ์ •๋ฆฌ๋ฅผ ํ•ด๋ณด์•˜๋‹ค.๊น”๋”ํ•˜๊ฒŒ ์ •๋ฆฌ ํ•ด๋†“์œผ์‹  ๋ถ„๋“ค๋„ ๋งŽ๋‹ค๋Š” ๊ฒƒ์„

tnsgud.tistory.com

 

 

 

••• ์ด์–ด์„œ ๋‹ค๋ฅธ ์ฝ”๋“œ ๋ถ€๋ถ„ •••

 

 

 

myLogger.log("controller test");
logDemoService.logic("testId");
return"OK";

 

"controller test"๋ผ๋Š” ๋ฉ”์„ธ์ง€์™€ ํ•จ๊ป˜ myLogger์— ์žˆ๋Š” log๋ฅผ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. ๊ทธ ๋ฐ‘์— ์ค„์€ logDemoService์— logic์— "testId"๋ผ๋Š” ๋ฉ”์„ธ์ง€์™€ ํ•จ๊ป˜ logic ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. retuen "OK"๋Š” ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ OK๋ผ๋Š” ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

 

 

 

 


 

 

 

 

โœ”๏ธ  LogDemoService

์ฃผ์–ด์ง„ id์™€ ํ•จ๊ป˜ ๋กœ๊ทธ๋ฅผ ๋‚จ๊ธฐ๋Š” ์„œ๋น„์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌ

 

private final MyLogger myLogger;

public void logic(String id) {
    myLogger.log("service id = " + id);
}

 

์•„๊นŒ LogDemoController์—  ์ฝ”๋“œ ์ชฝ์— logDemoService.logic("testId");๊ฐ€ ์žˆ์—ˆ๋‹ค. testId๋ฅผ logic ๋ฉ”์„œ๋“œ์— ๋ณด๋‚ด๋ผ๋Š” ์˜๋ฏธ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋ฐ›์€ ๋ฉ”์„ธ์ง€๋ฅผ ๊ฐ€์ง€๊ณ  logic ๋ฉ”์„œ๋“œ๋Š” MyLogger์— ์žˆ๋Š” log๋ฉ”์„œ๋“œ์— id๋ฅผ ๋ณด๋‚ด๊ฒŒ ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด log ๋ฉ”์„œ๋“œ์— ํ•„์š”ํ•œ uuid์™€ URL ๊ทธ๋ฆฌ๊ณ  id๊ฐ€ ๋ชจ๋‘ ์ž˜ ์ถœ๋ ฅ๋˜๊ฒŒ ๋œ๋‹ค.

 

 

 

 


 

 

 

โœ”๏ธ  ์ด์ •๋ฆฌ

 ์ด๋ฒˆ์— ๋ฐฐ์šด ๊ฒƒ์€ ํ”„๋กœํ† ํƒ€์ž… ์Šค์ฝ”ํ”„์™€ ์›น ์Šค์ฝ”ํ”„์— ๊ด€ํ•œ ๊ฒƒ์ด์—ˆ๋‹ค. ํ”„๋กœํ† ํƒ€์ž… ์Šค์ฝ”ํ”„๋Š” ์‹ฑ๊ธ€ํ†ค ์Šค์ฝ”ํ”„์™€ ๋‹ค๋ฅด๊ฒŒ ์ธ์Šคํ„ด์Šค๋ฅผ ํ•„์š”ํ•  ๋•Œ ๋งˆ๋‹ค ์ƒˆ๋กญ๊ฒŒ ๋ฐ›์•„ ์“ด๋‹ค๋Š” ์ ์ด ์žˆ์—ˆ๋Š”๋ฐ, ์ฃผ๋กœ ์‹ฑ๊ธ€ํ†ค๊ณผ ํ•จ๊ป˜ ์“ฐ์ผ ํ”„๋กœํ† ํƒ€์ž… ์Šค์ฝ”ํ”„์—” ํฐ ๋ฌธ์ œ์ ‘์ด ์žˆ์—ˆ๋‹ค. ์‹ฑ๊ธ€ํ†ค ๋‚ด๋ถ€์— ํ”„๋กœํ† ํƒ€์ž… ์Šค์ฝ”ํ”„๋ฅผ ์„ ์–ธํ•˜๊ฒŒ ๋˜๋ฉด ์‹ฑ๊ธ€ํ†ค ์Šค์ฝ”ํ”„์˜ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊ฐ€์ง€ ์œ ์ง€๋˜๋Š” ํŠน์„ฑ์„ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ๊ฐ€ ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€์ ธ์˜ค์ง€ ๋ชปํ•˜๊ฒŒ ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ๊ทธ ๋ถ€๋ถ„์„ ์ฃผ์ž…์‹œ์ ์„ ๋‹ค๋ฅด๊ฒŒํ•˜๊ฑฐ๋‚˜, ObjectProvider๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, JSR-330 Provider๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์› ๋‹ค. (ํ•˜์ง€๋งŒ ์‚ฌ์‹ค์ƒ ์“ธ ์ผ์ด ๋งŽ์ด ์—†๋‹ค๋Š” ๊ฒƒ) 

 

 ์•„๋งˆ ์›น์Šค์ฝ”ํ”„๋Š” ์›น๊ฐœ๋ฐœ์„ ํ•˜๋ฉฐ ์‹ค๋ฌด์ ์œผ๋กœ ํ•„์š”ํ•œ ๋‚ด์šฉ์ผ ๋“ฏ ํ•˜๋‹ค. ์›น์Šค์ฝ”ํ”„๋ฅผ ๊ฐœ๋ฐœํ•˜๋ฉด์„œ ๋ฌธ์ œ์ ์€ request ์Šค์ฝ”ํ”„ ๋นˆ์ด ์‹ค์ œ ๊ณ ๊ฐ์˜ ์š”์ฒญ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค๋Š” ์ ์ด์—ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ๊ฐ€์งœ ํ”„๋ก์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ผ๋‹จ ์žˆ๋Š” ์ฒ™์„ ํ•œ ๋’ค, ๋‚˜์ค‘์— ํ•„์š”ํ•œ ๋ถ€๋ถ„์—์„œ ์‹ค์ œ ์Šค์ฝ”ํ”„ ๋นˆ์ด ์žˆ๋Š” ๊ณณ์„ ํ–ฅํ•ด ์ƒ์„ฑ๋˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. 

 

 ๋งˆ์ง€๋ง‰ ์žฅ ์ •๋ฆฌ๊ฐ€ ์ƒ๊ฐ๋ณด๋‹ค ์˜ค๋ž˜๊ฑธ๋ ธ๋‹ค. ๋ง‰ํŒ์— ์ฝ”๋กœ๋‚˜ + ์œ„๊ฒฝ๋ จ + ์ถ”์„ ๋“ฑ ์—ฌ๋Ÿฌ ์ผ๋กœ ์ธํ•ด ์ฒœ์ฒœํžˆ ์ •๋ฆฌํ•˜๋‹ค ๊ฒฐ๊ตญ ๋‚ด์šฉ์„ ๊นŒ๋จน์–ด ๋‹ค์‹œ ๊ฐ•์˜๋ฅผ ๋“ค์–ด ๋ณต์Šตํ•˜๋ฉฐ ์ •๋ฆฌํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. 2024๋…„ 9์›” 22์ผ ์•„์ง ์•ž์— ์ •๋ฆฌํ–ˆ๋˜ ๊ฐ•์˜๋“ค์€ ๋‹ค์‹œ ์ •๋ฆฌํ•˜์ง„ ์•Š์•˜์ง€๋งŒ, ๋น ๋ฅด๊ฒŒ ๋ณต์Šตํ•˜๋ฉฐ ์•ž์— ์ •๋ฆฌํ•ด๋‘” ๋ธ”๋กœ๊ทธ๋“ค๋„ ๋‹ค์‹œ๊ธˆ ์†์„ ๋ณผ ์˜ˆ์ •์ด๋‹ค. 

 ๋ชจ๋‘๋“ค ๊ฑด๊ฐ•ํ•˜๊ธธ ๋ฐ”๋ผ๋ฉฐ...๐ŸŽƒ 

<์ถœ์ฒ˜ ์ธํ”„๋Ÿฐ>

 

์ฝ”๋กœ๋‚˜ ํœด์œ ์ฆ์œผ๋กœ ๊ธฐ๋ ฅ์—†์Œ๊ณผ ์กฐ๊ธˆ๋งŒ ์›€์ง์—ฌ๋„ ์˜จ๋ชธ์ด ์•„ํ””์„ ๊ฒช๊ณ  ์žˆ์ง€๋งŒ, ์•‰์•„์„œ ๊ณต๋ถ€ํ•˜๋Š” ๊ฑด ํฐ ๊ธฐ๋ ฅ์ด ๋“ค์ง€ ์•Š์•„ ์–ด์ฐŒ์ €์ฐŒ ํ•˜๊ณ  ์žˆ๋‹ค. ์˜ค๋Š˜์€ ๋…ธํŠธ๋ถ ์กด์ด ์žˆ๋Š” ์Šคํ„ฐ๋””์นดํŽ˜์—์„œ ๊ณต๋ถ€๋ฅผ ํ–ˆ๋Š”๋ฐ ์•„์ฃผ ์พŒ์ ํ•˜๊ณ  ์ข‹๋‹ค. ์–ด๋Š ํ•œ์ผ ์—” ๋ฒŒ๋ ˆ๊ฐ€ ์žˆ๋Š”์ง€ ์‚๋ฆฌ๋ฆญ- ํ•˜๊ณ  ์šธ์–ด ์ž์—ฐ์นœํ™”์ ์ธ ๋Š๋‚Œ์ด ๋ฌผ์”ฌ๋‚œ๋‹ค. ํ”ผ๊ณค์— ์ฉ”์–ด ๋‹คํฌ์„œํด์ด ์ฝ”๊นŒ์ง€ ๋‚ด๋ ค์™”์ง€๋งŒ ์˜ค๋Š˜๋„ ํ™”์ดํŒ…!!

 



๐Ÿงธ 

 


 

๐Ÿงธ ๊ตฌ์กฐํŒŒ์•… ๋ ˆ์ธ ๊ผฌ์šฐ- ๐Ÿงธ

 • lifecycle

ใ„ด class : NetworkClient, beanLifeCycleTest

 


 

โœ”๏ธ  ๊ฒฐ๊ณผ๊ฐ’ null

 

โ–บ  BeanLifeCycleTest

@Configuration
static class LifeCycleConfig {
         @Bean
         public NetworkClient networkClient() {
             NetworkClient networkClient = new NetworkClient();
             networkClient.setUrl("http://hello-spring.dev");
             return networkClient;
         }
}

 

@Configuration

:  bean์œผ๋กœ ๋“ฑ๋กํ•˜๊ธฐ์œ„ํ•ด ์„ค์ • ํด๋ž˜์Šค์— ์ถ”๊ฐ€ํ•˜๋ฉฐ bean์ด ๋“ฑ๋ก๋  ๋•Œ ์‹ฑ๊ธ€ํ†ค์„ ๋ณด์žฅํ•ด์ค€๋‹ค.

 

 

@Bean

:  ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋Š” ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์ปดํฌ๋„ŒํŠธ(์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋…๋ฆฝ๋œ ์กฐ๊ฐ)์ด๋‹ค. 

 

 

๋นˆ์€ NetworkClient ํƒ€์ž…์˜ networkClient๋ผ๋Š” ์ด๋ฆ„์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. NetworkClient๋Š” ๊ฐ์ฒด ์ƒ์„ฑ ํ›„ ๋ฐ”๋กœ ๋ฐ˜ํ™˜๋˜์ง€ ์•Š๊ณ  ์œ ์—ฐํ•˜๊ณ  ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ์ฒด๋ฅผ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•œ ํ›„ ๋ฐ˜ํ™˜ํ•  ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๋ณ€์ˆ˜ networkClient๋ฅผ ์„ ์–ธํ•œ๋‹ค. NetworkClient๋Š” ๋‹ค๋ฅธ ํด๋ž˜์Šค๋กœ ์กด์žฌํ•˜๋ฉฐ ๊ทธ ํด๋ž˜์Šค ๋‚ด์—๋Š” setter๋ฅผ ํ†ตํ•ด url์„ ๋ฐ›๊ณ ์ž ํ•  ๊ฒƒ์ด๋‹ค. (๋‹ค๋ฅธ ํด๋ž˜์Šค์— url์„ ๋„˜๊ธฐ๊ธฐ ์œ„ํ•ด์„œ ๋นˆ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ!) ํ•ด๋‹น url์„ ์„ค์ •ํ•ด์ค€ํ›„ networkClient๋กœ ๋ฐ˜ํ™˜ํ•˜๋ฉด ๋œ๋‹ค.

 

 

Q. ๋งŒ์•ฝ NetworkClient ํƒ€์ž…์œผ๋กœ ๋นˆ์„ ์„ค์ •ํ•ด๋‘๊ณ  ํด๋ž˜์Šค ์ด๋ฆ„์ด NetWorkClient๋กœ ๋‹ค๋ฅด๋ฉด ์–ด๋–ป๊ฒŒ ๋˜๋Š”๊ฐ€?

A. ๋‹น์—ฐํ•˜๊ฒŒ๋„ ์ œ๋Œ€๋กœ ์ˆ˜ํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค. ๋นˆ์˜ ํƒ€์ž…์ด ๋‹ค๋ฅด๊ฒŒ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ๋“ค์–ด๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— ์˜๋„๋Œ€๋กœ ๋™์ž‘๋˜์ง€ ์•Š๋Š”๋‹ค.

 

 

 

- @Configuration ์ถœ์ฒ˜

 

[Spring] @Configuration ์ด๋ž€?

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” @Configuration์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์ ์— ๋Œ€ํ•˜์—ฌ ์ •๋ฆฌํ•ด๋ณผ๊นŒ ํ•œ๋‹ค. 1. @Configuration ์ด๋ž€? " data-ke-type="html"> HTML ์‚ฝ์ž… ๋ฏธ๋ฆฌ๋ณด๊ธฐํ•  ์ˆ˜ ์—†๋Š” ์†Œ์Šค Spring์—์„œ Bean์„ ์ˆ˜๋™์œผ๋กœ ๋“ฑ๋กํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”, ์„ค

blogshine.tistory.com

 

- @bean ์ถœ์ฒ˜

 

๐ŸŸข [Spring] ์Šคํ”„๋ง ๋นˆ(Bean) ์ด๋ž€?

๐Ÿ“Œ ์Šคํ”„๋ง ๋นˆ(Bean) ์ด๋ž€? ๋นˆ(Bean)์€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋Š” ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์ปดํฌ๋„ŒํŠธ์ด๋‹ค. ์ฆ‰, ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ์ž๋ฐ” ๊ฐ์ฒด๋ฅผ ๋œปํ•˜๋ฉฐ, ํ•˜๋‚˜ ์ด์ƒ์˜ ๋นˆ(Bean)์„ ๊ด€๋ฆฌ

dev-wnstjd.tistory.com

 

 

 

 

โ–บ  NetworkClient

public NetworkClient() {
	System.out.println("์ƒ์„ฑ์ž ํ˜ธ์ถœ, url = " + url); 
	connect();
	call("์ดˆ๊ธฐํ™” ์—ฐ๊ฒฐ ๋ฉ”์‹œ์ง€");
}

 

๊ฐ€์žฅ ์ฒซ๋ฒˆ์งธ ์ฝ”๋“œ๋กœ ์ƒ์„ฑ์ž ๋ถ€๋ถ„์—์„œ connect( );๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์•„์ง url์„ setter๋กœ ๋ฐ›์•„์˜ค๊ธฐ์ „ connect( );๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹น์—ฐํ•˜๊ฒŒ๋„ null ๊ฐ’์ด ๋‚˜์˜ฌ ์ˆ˜ ๋ฐ–์— ์—†๋‹ค.

 

 

 

 

 


 

 

 

Q. ์ดˆ๊ธฐํ™” ์ฝœ๋ฐฑ์„ ํ•˜๋Š” ์ด์œ ๋Š”?

A. ์Šคํ”„๋ง ๋ผ์ดํ”„ ์‚ฌ์ดํด์„ ์ œ๋Œ€๋กœ ์ง€์ผœ ์˜ค๋ฅ˜ ๋ฐœ์ƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.

 

 

 

โœ”๏ธ  ์ดˆ๊ธฐํ™” ์ฝœ๋ฐฑ

 

โ–บ  ์Šคํ”„๋ง ๋นˆ์˜ ์ด๋ฒคํŠธ ๋ผ์ดํ”„ ์‚ฌ์ดํด

 

์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ - ์Šคํ”„๋ง ๋นˆ ์ƒ์„ฑ - ์˜์กด๊ด€๊ณ„ ์ฃผ์ž… - ์ดˆ๊ธฐํ™” ์ฝœ๋ฐฑ - ์‚ฌ์šฉ - ์†Œ๋ฉธ์ „ ์ฝœ๋ฐฑ

: ์Šคํ”„๋ง ๋นˆ์ด ์ƒ์„ฑ๋œ ํ›„ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์ด ์ด๋ค„์ ธ์•ผํ•œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์œ„์˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ ์ฃผ์ž…์ด ๋ชจ๋‘ ์ด๋ค„์ง€๊ณ  url์„ ๋ฐ›์•„์˜ค์ง€์•Š๊ณ , ๋นˆ์ด ์ฃผ์ž…์ด ๋˜๊ธฐ ์ „ connect( )ํ•˜๊ณ ์ž ํ–ˆ๋‹ค. ๊ฒฐ๊ณผ๊ฐ’์€ null๋กœ ๋‚˜์˜ค๋ฉฐ ์˜๋„๋Œ€๋กœ ๋™์ž‘ํ•˜์ง€ ๋ชปํ–ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋ถ€๋ถ„์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ์ดˆ๊ธฐํ™” ์ฝœ๋ฐฑ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.  ์ดˆ๊ธฐํ™” ์ฝœ๋ฐฑ์„ ์ฝ”๋“œ์— ๋„ฃ์–ด ์˜์กด๊ด€๊ณ„๊ฐ€ ๋ชจ๋‘ ์ฃผ์ž…๋˜๊ณ ๋‚˜์„œ ๊ทธ ํ›„์— ๋‹ค๋ฅธ ๋ถ€๋ถ„์˜ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

 

 

 

โ–บ  ์ดˆ๊ธฐํ™” ์ฝœ๋ฐฑ์˜ ์žฅ์ 

1. ๋ผ์ดํ”„ ์‚ฌ์ดํด์„ ๋”ฐ๋ผ ๋งค๋ฒˆ ๋นˆ์ด ์ผ๊ด€๋œ ์ƒํƒœ์—์„œ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค.  

2. ๋นˆ์ด ํŒŒ๊ดด๋˜๊ธฐ ์ „ ๋ฆฌ์†Œ์Šค๋ฅผ ์ •๋ฆฌํ•  ์‹œ๊ฐ„์„ ์ค€๋‹ค.

3. ์ดˆ๊ธฐํ™” ๋กœ์ง์„ ํ•œ ๊ณณ์— ๋ชจ์•„๋‘ฌ์„œ ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์ข‹๋‹ค.

 

 

 

 


 

 

 

โœ”๏ธ ์ธํ„ฐํŽ˜์ด์Šค InitializingBean, DisposableBean

 

โ–บ  NetworkClient

    @Override
    public void afterPropertiesSet() throws Exception {
    	connect();
	call("์ดˆ๊ธฐํ™” ์—ฐ๊ฒฐ ๋ฉ”์‹œ์ง€");
    }

 

afterPropertiesSet( )

:  ์ธํ„ฐํŽ˜์ด์Šค InitializingBean์„ ์ƒ์†๋ฐ›์œผ๋ฉด ๊ทธ ์•ˆ์— ์ •์˜๋œ afterPropertiesSet ๋ฉ”์„œ๋“œ๋กœ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์ด ๋๋‚˜๋ฉด ์ดˆ๊ธฐํ™”๋ฅผ ์ง€์›ํ•œ๋‹ค.

 
 
    @Override
    public void destroy() throws Exception {
        disConnect();
    }

 

destroy( )

:  ์ธํ„ฐํŽ˜์ด์Šค DisposableBean์„ ์ƒ์†๋ฐ›์œผ๋ฉด ๊ทธ ์•ˆ์— ์ •์˜๋œ destroy ๋ฉ”์„œ๋“œ๋กœ ๋นˆ์ด ํŒŒ๊ดด๋  ๋•Œ ๋ถˆ๋Ÿฌ์˜จ๋‹ค.

 

 

๊ฒฐ๋ก  : ์ƒ์†๋œ ์ธํ„ฐํŽ˜์ด์Šค์— ์ •์˜๋˜์–ด์žˆ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ ธ์™€ ์“ฐ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค. ๋˜ํ•œ ์Šคํ”„๋ง์— ํŠนํ™”๋˜์–ด์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ผ์„œ ์Šคํ”„๋ง์ด ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์™ธ๋ถ€๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

 

 

 

- InitializingBean ์ถœ์ฒ˜

 

InitializingBean (Spring Framework 6.1.12 API)

Interface to be implemented by beans that need to react once all their properties have been set by a BeanFactory: e.g. to perform custom initialization, or merely to check that all mandatory properties have been set. An alternative to implementing Initiali

docs.spring.io

 

 

- DisposableBean ์ถœ์ฒ˜

 

DisposableBean (Spring Framework 6.1.12 API)

Interface to be implemented by beans that want to release resources on destruction. A BeanFactory will invoke the destroy method on individual destruction of a scoped bean. An ApplicationContext is supposed to dispose all of its singletons on shutdown, dri

docs.spring.io

 

 

 

 

 


 

 

 

 

โœ”๏ธ  ๋นˆ ๋“ฑ๋ก์— ์ดˆ๊ธฐํ™”, ์†Œ๋ฉธ ๋ฉ”์„œ๋“œ ์ง€์ •

 

โ–บ  BeanLifeCycleTest

์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

@Bean(initMethod = "init", destroyMethod = "close")
public NetworkClient networkClient() {
    NetworkClient networkClient = new NetworkClient();
    networkClient.setUrl("http://hello-spring.dev");
    return networkClient;
}

 

initMethod

: ์ดˆ๊ธฐํ™” ์ค‘์— ๋นˆ ์ธ์Šคํ„ฐ์Šค์—์„œ ํ˜ธ์ถœํ•  ๋ฉ”์„œ๋“œ์˜ ์„ ํƒ์  ์ด๋ฆ„์ด๋‹ค. 

 

 

destroyMethod

: ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…์ŠคํŠธ๋ฅผ ๋‹ซ์„ ๋•Œ ๋นˆ ์ธ์Šคํ„ด์Šค์—์„œ ํ˜ธ์ถœํ•œ ๋ฉ”์„œ๋“œ์˜ ์„ ํƒ์  ์ด๋ฆ„์ด๋‹ค. ๋นˆ ๋ฉ”์„œ๋“œ์—์„œ ๋ฐ˜ํ™˜๋˜๋Š” ๊ฐ์ฒด์— ๋Œ€ํ•ด destroy๊ฐ€ ์žˆ๋Š”์ง€ ์œ ์ถ”ํ•˜๋ฉฐ close( ), shutdown( ) ์ด๋ผ๋Š” ์ด๋ฆ„์˜ ์ธ์ˆ˜ ์—†๋Š” ๊ณต๊ฐœ ๋ฉ”์„œ๋“œ๋งŒ ๊ฐ์ง€ํ•˜์—ฌ ์ž๋™์ ์œผ๋กœ ์‹คํ–‰ํ•œ๋‹ค.

 

 

 

- initMethod์™€ destroyMethod ์ถœ์ฒ˜

 

Bean (Spring Framework 6.1.12 API)

The optional name of a method to call on the bean instance upon closing the application context, for example a close() method on a JDBC DataSource implementation, or a Hibernate SessionFactory object. The method must have no arguments but may throw any exc

docs.spring.io

 

 

 

โ–บ  NetworkClient

public void init() { 
	System.out.println("NetworkClient.init"); 
	connect();
	call("์ดˆ๊ธฐํ™” ์—ฐ๊ฒฐ ๋ฉ”์‹œ์ง€");
}

public void close() {
         System.out.println("NetworkClient.close");
         disConnect();
}

 

init( )

:  initMethod๋ฅผ ํ˜ธ์ถœํ•  ์„ ํƒ์  ์ด๋ฆ„์ด ๋˜๊ฒ ๋‹ค.

 

 

close( )

: destroyMethod๋ฅผ ํ˜ธ์ถœํ•  ์„ ํƒ์  ์ด๋ฆ„์ด ๋˜๊ฒ ๋‹ค.

 

 

์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” ์Šคํ”„๋ง ์ฝ”๋“œ์— ์˜์กดํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ์„ค์ • ์ •๋ณด์— ์˜์กดํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํ•˜์ง€๋งŒ ์Šคํ”„๋ง์—์„œ ๊ถŒ๊ณ ํ•˜๋Š” ๋ฐฉ์‹์€ ์•„๋‹ˆ๋‹ค. ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ๋„ ์žˆ์ง€๋งŒ ์ด๋ฆ„์„ ๋ช…์‹œํ•˜๋Š” ๊ฒƒ์—์„œ ์ด๋ฆ„์ด ๋‹ฌ๋ผ์งˆ ๊ฒฝ์šฐ ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๋ฅผ ์ฐพ๋Š” ๊ฒƒ์ด ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. (์œ ์ง€๋ณด์ˆ˜ ์ธก๋ฉด์—์„œ๋„)

 

 

 

 

 


 

 

 

 

 

โœ”๏ธ  ์• ๋…ธํ…Œ์ด์…˜ @PostConstruct, @PreDestroy

 

โ–บ  NetworkClient

์Šคํ”„๋ง์—์„œ ๊ฐ€์žฅ ๊ถŒ์žฅํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

 

	@PostConstruct
	public void init() {
		System.out.println("NetworkClient.init"); connect();
		call("์ดˆ๊ธฐํ™” ์—ฐ๊ฒฐ ๋ฉ”์‹œ์ง€");
	}
    
	@PreDestroy
	public void close() {
		System.out.println("NetworkClient.close");
		disConnect();
	}

 

 

@PostConstruct

:  ์˜์กด์„ฑ ์ฃผ์ž…์ด ์™„๋ฃŒ๋œ ํ›„ ์‹คํ–‰๋˜๋Š” ๋ฉ”์„œ๋“œ์— ์‚ฌ์šฉํ•˜๋ฉฐ ์ฃผ์„์ด ๋‹ฌ๋ฆฐ ๋ฉ”์„œ๋“œ๋Š” ํ•˜๋‚˜๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค. 

 

 

@PreDestroy

:  ์ธ์Šคํ„ด์Šค๊ฐ€ ์ œ๊ฑฐ๋˜๊ณ  ์žˆ์Œ์„ ์•Œ๋ฆฌ๋Š” ์ฝœ๋ฐฑ ์•Œ๋ฆผ์ด๋ฉฐ ์ฃผ์„์ด ๋‹ฌ๋ฆฐ ๋ฉ”์„œ๋“œ๋Š” ๋ณด์œ ํ•˜๊ณ  ์žˆ๋˜ ๋ฆฌ์†Œ์Šค๋ฅผ ํ•ด์ œํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

 

 

 

- @PostConstruct ์ถœ์ฒ˜

 

PostConstruct (Java(TM) EE 7 Specification APIs)

JavaScript is disabled on your browser. @Documented @Retention(value=RUNTIME) @Target(value=METHOD) public @interface PostConstruct The PostConstruct annotation is used on a method that needs to be executed after dependency injection is done to perform any

docs.oracle.com

 

 

 

 

- @PreDestroy ์ถœ์ฒ˜

 

PreDestroy (Java(TM) EE 7 Specification APIs)

JavaScript is disabled on your browser. @Documented @Retention(value=RUNTIME) @Target(value=METHOD) public @interface PreDestroy The PreDestroy annotation is used on methods as a callback notification to signal that the instance is in the process of being

docs.oracle.com

 

 

<์ถœ์ฒ˜ ์ธํ”„๋Ÿฐ>

 

์ฝ”๋กœ๋‚˜์— ๊ฑธ๋ ค ์ผ์ฃผ์ผ์€ ๋ˆ„์›Œ์žˆ๋‹ค ์‚ด์•„๋‚ฌ๋‹ค. ๋จน๊ณ  ์ž๊ณ ๋งŒ ๋ฐ˜๋ณตํ•˜๋‹ˆ ๋‚˜ํƒœํ•จ์˜ ๋ํŒ์™•์ด ๋˜์–ด๋ฒ„๋ ธ๋Š”๋ฐ... ์ด๋ ‡๊ฒŒ ๋‹ค์‹œ ๊ณต๋ถ€๋ฅผ ํ•˜๋ ค๋‹ˆ ๋ฐฐ๋กœ ํž˜๋“  ๊ฒƒ ๊ฐ™๋‹ค. 8์›”์—” ๊ผญ ๊ฐ•์˜๋ฅผ ๋‹ค ๋“ฃ๊ฒ ๋‹ค๊ณ  ๋‹ค์งํ–ˆ์—ˆ๋Š”๋ฐ,,, ์–ผ๋งˆ ๋‚จ์ง€ ์•Š์€ ์‹œ๊ฐ„ ๋‹ค๋ฅธ ๊ณต๋ถ€ ์ œ์ฒ˜๋‘๊ณ  8์›” ์•ˆ์— ๋๋‚ด๋ณผ๊นŒ ํ•œ๋‹ค. (๊ณผ์—ฐ ํ•  ์ˆ˜ ์žˆ์œผ๋ ค๋‚˜?) ์•„๋ฌดํŠผ ๋ชจ๋‘๋“ค ํ™”์ดํŒ…!!!!



๐Ÿงธ 

 


 

๐Ÿงธ ๊ตฌ์กฐํŒŒ์•… ๋ ˆ์ธ ๊ผฌ์šฐ- ๐Ÿงธ

 • order

ใ„ด class : OrderServiceImpl

 • annotation

ใ„ด interface : MainDiscountPolicy

 • HelloLombok

 

 • AllBeanTest

ใ„ด class : AllBeanTest

 • AutoWiredTest

ใ„ด class : AutoWiredTest


 

โœ”๏ธ  OrderServiceImpl

 

โ–บ  ์ƒ์„ฑ์ž ์ฃผ์ž…

์ง€๊ธˆ๊นŒ์ง€ ์‚ฌ์šฉํ•œ ๋ฐฉ๋ฒ•์ด ๋˜๊ฒ ๋‹ค.

 

private final MemberRepository memberRepository;
private final DiscountPolicy discountPolicy;

     

final

: ์ดˆ๊ธฐํ™”๋˜๋ฉด ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค. 

 

 

final์„ ํ†ตํ•ด ์ƒ์„ฑ์ž์— ๊ฐ’์ด ์ œ๋Œ€๋กœ ์„ค์ •๋˜์ง€ ์•Š์œผ๋ฉด ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ์ž์— ๊ฐ’์„ ๋นผ๋จน์€ ๊ฑธ ๋น ๋ฅด๊ฒŒ ์•Œ์•„์ฐจ๋ฆด ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ์ƒ์„ฑ์ž ์ฃผ์ž… ๋ฐฉ๋ฒ•์„ ์ถ”์ฒœํ•œ๋‹ค.

 

 

Q. final์„ ์•ˆ์“ฐ๊ฒŒ ๋œ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋˜๋‚˜?

A. ์ฝ”๋“œ ๊ฐœ๋ฐœ์ด ํ•œ์‚ฌ๋žŒ์œผ๋กœ ์ด๋ค„์ง€๋Š”๊ฒŒ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๊ฒŒ๋˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฑฐ๊ธฐ๋‹ค ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค์ง€ ์•Š์œผ๋ฉด ํ…Œ์ŠคํŠธ๊ฐ€ ๋Œ์•„๊ฐ€์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฅ˜ ์ˆ˜์ •์— ์šฉ์ดํ•˜๋‹ค. ์ƒ์„ฑ์ž ์ฃผ์ž…์—์„œ final์„ ๋ถ™์—ฌ์•ผ๋งŒ ์ฝ”๋“œ๊ฐ€ ๋Œ์•„๊ฐ€๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. (๊ทผ๋ฐ ๊ทธ๋ ‡๋ฐ๋˜๋ฉด ์ƒ์„ฑ์ž ์ฝ”๋“œ๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ ์–ด๋ ต์ง€ ์•Š์„๊นŒ..?)

 

 

 

 

••• ์ด์–ด์„œ ๋‹ค๋ฅธ ์ฝ”๋“œ ๋ถ€๋ถ„ •••

 

 

 

@Autowired
public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) {
    this.memberRepository = memberRepository;
    this.discountPolicy = discountPolicy;
}

 

 

@Autowired

: ์˜์กด๊ด€๊ณ„๋ฅผ ์ฃผ์ž…ํ•ด์ฃผ๋Š”๋ฐ, ์ƒ์„ฑ์ž๊ฐ€ ํ•˜๋‚˜์ธ ๊ฒฝ์šฐ๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ์ž๋™์ ์œผ๋กœ ์ฃผ์ž…์ด ๋œ๋‹ค.

 

 

OrderServiceImpl์€ ํด๋ž˜์Šค  MemberRepository์™€ DiscountPolicy์— ์žˆ๋Š” memberRepository์™€ discountPolicy๋ฅผ ํ•„์š”๋กœ ํ•œ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ์ƒ์„ฑ์ž(๊ฐ์ฒด๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ํŠน๋ณ„ํ•œ ๋ฉ”์„œ๋“œ)๋ฅผ ๋งŒ๋“ค์–ด ๊ทธ ์ƒ์„ฑ์ž๊ฐ€ ๋‹ค๋ฅธ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ํ• ๋‹น๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์ด ์ด๋ค„์ง€๊ฒŒ ๋œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด๋ณด๋ฉด, ๊ณ„์‚ฐ์„ ํ•ด์•ผํ•˜๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž. ๊ณ„์‚ฐ ๋ฉ”์„œ๋“œ์—๋Š” ํšŒ์› ์ •๋ณด์™€ ํ˜„์žฌ ํ• ์ธ ์ •์ฑ…์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ํ•„์š”๋กœ ํ•œ๋‹ค. ๊ทธ ๋‘๊ฐ€์ง€์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด ํšŒ์› ์ •๋ณด์™€ ํ• ์ธ ์ •์ฑ… ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํด๋ž˜์Šค๊ฐ€ ํ•„์š”ํ•œ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ž˜์„œ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์„ ํ†ตํ•ด ํ˜„์žฌ ํด๋ž˜์Šค์™€ ๋‹ค๋ฅธ ๋‘ ํด๋ž˜์Šค์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

(์ด๋ ‡๊ฒŒ ์ดํ•ดํ•˜๊ธด ํ–ˆ๋‹ค...)

 

 

 

 

 

 

โ–บ  ์ˆ˜์ •์ž ์ฃผ์ž…

setter๋กœ ํ†ตํ•ด ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…, ์˜์กด๊ด€๊ณ„๋ฅผ ๋ˆ„๋ฝํ•ด๋„ ์‹คํ–‰์€ ๋œ๋‹ค.

 

private MemberRepository memberRepository;
private DiscountPolicy discountPolicy;

    @Autowired
    public void setMemberRepository(MemberRepository memberRepository) {
        this.memberRepository = memberRepository;
    }
    
    @Autowired
    public void setDiscountPolicy(DiscountPolicy discountPolicy) {
        this.discountPolicy = discountPolicy;
    }

 

 

setter๋Š” @Autowired๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์˜์กด๊ด€๊ณ„๋ฅผ ๋ฐ›๊ฒŒ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๊ฐ ํด๋ž˜์Šค์ธ MemberRepository์™€ DiscountPolicy์—์„œ memberRepository์™€ discountPolicy์— ๋Œ€ํ•œ ์˜์กด๊ด€๊ณ„๋ฅผ ๋ฐ›๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๊ฐ์ฒด๋ฅผ final ์—†์ด ์„ ์–ธํ•  ๋•Œ ๊ฐ์ฒด์˜ ์ƒํƒœ ๋ณ€๊ฒฝ์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

์ƒ์„ฑ์ž ์ฃผ์ž…์—์„œ๋Š” final์„ ํ†ตํ•ด ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋„๋ก ํ–ˆ์ง€๋งŒ setter๋Š” final์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ฒด์˜ ์ƒํƒœ์— ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. setter๋Š” ์„ค์ •ํ•˜๋ ค๋Š” ํ•„๋“œ์™€ ๋™์ผํ•œ ํƒ€์ž…์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฐ›์•„์•ผํ•˜๋ฉฐ, ์ž๋ฐ”๋นˆ ํ”„๋กœํผํ‹ฐ ๊ทœ์•ฝ์„ ํ†ตํ•ด set---๋ผ๊ณ  ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์ •๋ณด๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ทœ์น™์ด ์ƒ๊ฒผ๋‹ค. 

 

 

- setter๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด ์ƒํƒœ ๋ฐ”๊พธ๊ธฐ ์ถœ์ฒ˜

 

[JAVA] ๊ฒŒํ„ฐ(getter)์™€ ์„ธํ„ฐ(setter)

์ผ๋ฐ˜์ ์œผ๋กœ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ๋Š” ๊ฐ์ฒด์˜ ํ•„๋“œ๋ฅผ ๊ฐ์ฒด ์™ธ๋ถ€์—์„œ ์ง์ ‘์ ์œผ๋กœ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์„ ๋ง‰๋Š”๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์™ธ๋ถ€์—์„œ ๋งˆ์Œ๋Œ€๋กœ ๋ณ€๊ฒฝํ•  ๊ฒฝ์šฐ ๊ฐ์ฒด์˜ ๋ฌด๊ฒฐ์„ฑ(์˜๋„ํ•˜์ง€ ์•Š์€ ์š”์ธ์— ์˜ํ•ด

myblog1128.tistory.com

 

 

 

 

Q. ์ƒ์„ฑ์ž๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ๋ฐ›์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค. setter๋Š” ํ•˜๋‚˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋งŒ ๋ฐ›์•˜๋‹ค. ์™œ ๊ทธ๋Ÿฐ๊ฒƒ์ธ๊ฐ€?

A. ์ƒ์„ฑ์ž๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ํ•„์š”ํ•œ ๋ชจ๋“  ํ•„๋“œ์— ๋Œ€ํ•ด ๊ฐ’์„ ์ฃผ์ž…ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ( ๊ฐ’์„ ๋ฐ›์•„์„œ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ•„๋“œ์— ๋„ฃ์–ด์ค€๋‹ค๋Š” ๊ฒƒ ๊ฐ™๋‹ค.) ๊ทธ๋Ÿฐ๋ฐ setter๋Š” ๊ฐ์ฒด ์ƒํƒœ์— ์ˆ˜์ •์ด ๋“ค์–ด๊ฐ€๋‹ˆ ์ฃผ๋กœ ํ•˜๋‚˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋งŒ ์‚ฌ์šฉํ•œ๋‹ค. ๊ผญ setter๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ํ•˜๋‚˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋งŒ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ ๋‚˜์ค‘์— ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์ƒ๊ฐํ•ด์„œ ํ•˜๋‚˜์”ฉ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. ์‹ค์ œ๋กœ setter๋Š” ์‚ฌ์šฉ์„ ์ง€์–‘ํ•˜๋Š” ์ถ”์„ธ๋ผ๊ณ  ํ•œ๋‹ค. ์ด๊ฑด ์ „์—๋„ ๋‹ค๋ฃฌ์ ์ด ์žˆ๋˜ ๊ฒƒ ๊ฐ™์€๋ฐ, ๊ฐ์ฒด์˜ ์ƒํƒœ๋ฅผ test ์ฝ”๋“œ ํ˜น์€ ํ˜„์žฌ setter ์ฝ”๋“œ ๋“ฑ์—์„œ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ํ™•๋ฅ ์ด ๋†’๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.  

 

 

 

 

 

 

โ–บ  ํ•„๋“œ ์ฃผ์ž…

ํ•„๋“œ์— ๋ฐ”๋กœ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž… (์‚ฌ์šฉํ•˜์ง€๋ง์ž)

 

 

    @Autowired
    private MemberRepository memberRepository;
    @Autowired
    private DiscountPolicy discountPolicy;

 

OrderServiceImpl์— ๊ฐ ํด๋ž˜์Šค MemberRepository์™€ DiscountPolicy์— ๊ด€ํ•œ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์ด ๋ฐ”๋กœ ์ด๋ค„์ง„๋‹ค.

 

 

 

 

 


 

 

 

 

โœ”๏ธ  AutowiredTest

 

@Test
void AutoWiredOption() {
    AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(TestBean.class);
}

 

 

AnnotationConfigApplicationContext

:  ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ, ๋นˆ์„ ๊ด€๋ฆฌํ•˜๊ณ  ์˜์กด์„ฑ ์ฃผ์ž…์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

 

 

 

 

••• ์ด์–ด์„œ ๋‹ค๋ฅธ ์ฝ”๋“œ ๋ถ€๋ถ„ •••

 

 

 

static class TestBean {

    @Autowired(required = false)
    public void setNoBean1(Member noBean1) {
        System.out.println("noBean1 = " + noBean1);
    }

    @Autowired
    public void setNoBean2(@Nullable Member noBean2) {
        System.out.println("noBean2 = " + noBean2);
    }

    @Autowired
    public void setBean3(Optional<Member> nobean3) {
        System.out.println("nobean3 = " + nobean3);
    }


}

 

@Autowired(required = false)

: ์ž๋™ ์ฃผ์ž…ํ•  ๋Œ€์ƒ์ด ์—†์œผ๋ฉด ์ˆ˜์ •์ž ๋ฉ”์„œ๋“œ๊ฐ€ ์—†์œผ๋ฉด ํ˜ธ์ถœ ์ž์ฒด๊ฐ€ ์•ˆ๋œ๋‹ค.

 

 

@Nullable

: ์ž๋™ ์ฃผ์ž…ํ•  ๋Œ€์ƒ์ด ์—†์–ด๋„ ํ˜ธ์ถœ์€ ๋˜์ง€๋งŒ null๊ฐ’์ด ๋œ๋‹ค.

 

 

Optional< >

: ์Šคํ”„๋ง ๋นˆ์ด ์—†์œผ๋ฉด Optional empty๋กœ ๋“ค์–ด์˜จ๋‹ค.

 

 

ํ˜„์žฌ Member ํด๋ž˜์Šค์—๋Š” nobean1, nobean2, nobean3๊ณผ ๊ด€๋ จ๋œ bean์ด ๋“ฑ๋ก๋˜์–ด์žˆ์ง€ ์•Š๊ธฐ์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฐ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•œ๋‹ค. nobean1์˜ required = true๋กœ ํ•˜๊ฒŒ๋˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ๋œ๋‹ค. 

 

 

 

Q. AnnotationConfigApplicationContext๋ฅผ ์„ ์–ธ์„ ๋”ฐ๋กœํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ผ๊นŒ?

A. AnnotationConfigApplicationContext๊ฐ€ ๋ฌด์—‡์„ ํ•˜๋Š”์ง€ ์ดํ•ดํ•ด์•ผํ•œ๋‹ค. AnnotationConfigApplicationContext์€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์—ญํ• ์„ ํ•˜๊ณ  ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ƒ์„ฑ ํ›„์— bean์„ ๊ด€๋ฆฌํ•˜๊ณ  ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•˜๊ฒŒ ๋œ๋‹ค. static class TestBean์€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋Š” ๋นˆ์ด ๋œ๋‹ค. ๋งŒ์ผ ๋”ฐ๋กœ ์„ ์–ธํ•˜์ง€ ์•Š๊ณ  static class TestBean์— ์„ ์–ธํ•˜๊ฒŒ ๋˜๋ฉด ์ฃผ๊ธฐ๊ฐ€ ๊ผฌ์ผ ์ˆ˜ ์žˆ๊ฒŒ๋œ๋‹ค. ์Šคํ”„๋ง์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜์–ด์•ผํ•  ๋นˆ์ด ๊ทธ ์•ˆ์—์„œ ์Šคํ”„๋ง์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ ์–ธํ•˜๊ณ  ์žˆ์œผ๋‹ˆ ์ฃผ๊ธฐ๊ฐ€ ๊ผฌ์—ฌ ์ œ๋Œ€๋กœ ์‹คํ–‰๋˜์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 


 

 

 

 

Q.  ๋กฌ๋ณต(LomBok) ์ด๋ž€?

A. ์ฝ”๋“œ ๋ฐ˜๋ณต ์ž‘์„ฑ์„ ์ค„์—ฌ์ฃผ๋Š” ์ฝ”๋“œ ๋‹ค์ด์–ดํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

 

 

 

โœ”๏ธ  OrderServiceImpl (LomBok)

 

 @Component
 @RequiredArgsConstructor
 public class OrderServiceImpl implements OrderService {
     private final MemberRepository memberRepository;
     private final DiscountPolicy discountPolicy;
}

 

 

 @RequiredArgsConstructor

: ์ดˆ๊ธฐํ™” ๋˜์ง€์•Š์€ final ํ•„๋“œ๋‚˜, @NonNull์ด ๋ถ™์€ ํ•„๋“œ์— ๋Œ€ํ•ด ์ƒ์„ฑ์ž๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ, @Autowired๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์˜์กด์„ฑ ์ฃผ์ž…ํ•œ๋‹ค.

 

 

 

 

- @RequiredArgsConstructor ์ถœ์ฒ˜

 

@RequiredArgsConstructor๋ž€?

Lombok์œผ๋กœ ์Šคํ”„๋ง์—์„œ DI(์˜์กด์„ฑ ์ฃผ์ž…)์˜ ๋ฐฉ๋ฒ• ์ค‘์— ์ƒ์„ฑ์ž ์ฃผ์ž…์„ ์ž„์˜์˜ ์ฝ”๋“œ์—†์ด ์ž๋™์œผ๋กœ ์„ค์ •ํ•ด์ฃผ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด๋‹ค. @RequiredArgsConstructor๋Š” ์ดˆ๊ธฐํ™” ๋˜์ง€์•Š์€ final ํ•„๋“œ๋‚˜, @NonNull ์ด ๋ถ™์€ ํ•„๋“œ

dreamcoding.tistory.com

 

 

 

- ๋กฌ๋ณต ์‚ฌ์šฉ ์˜ˆ์‹œ ์ถœ์ฒ˜

 

[java] ๋กฌ๋ณต lombok ์ด๋ž€?

Lombok ์ด๋ž€ Java ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋ฐ˜๋ณต๋˜๋Š” getter, setter, toString .. ๋“ฑ์˜ ๋ฐ˜๋ณต ๋ฉ”์„œ๋“œ ์ž‘์„ฑ ์ฝ”๋“œ๋ฅผ ์ค„์—ฌ์ฃผ๋Š” ์ฝ”๋“œ ๋‹ค์ด์–ดํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ Java์—์„œ ๋ณดํ†ต model ํด๋ž˜์Šค๋‚˜ Entity ๊ฐ™์€ ๋„๋ฉ”์ธ ํด๋ž˜์Šค ๋“ฑ์—๋Š” ์ˆ˜๋งŽ

pig-programming.tistory.com

 

 

 


 

 

 

 

โœ”๏ธ  Autowired ํ•„๋“œ ๋ช… ๋งค์น˜

 

<๊ธฐ์กด ์ฝ”๋“œ>

@Autowired
 private DiscountPolicy discountPolicy

 

 

ํ•„๋“œ๊ฐ€ ๋‘ ๊ฐœ (rateDiscountPolicy, fixDiscountPolicy)๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

 

 

<๋ณ€๊ฒฝ ํ›„ ์ฝ”๋“œ>

 @Autowired
 private DiscountPolicy rateDiscountPolicy

 

 

@Autowired๋Š” DiscountPolicy๋ฅผ ํƒ€์ž…์˜ ๋นˆ์„ ์ฃผ์ž…ํ•˜๊ธฐ ์œ„ํ•ด DiscountPolicy๋ฅผ ์ฐพ์•„๋‚˜์„œ๊ฒŒ ๋œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ DiscountPolicy ํƒ€์ž…์—๋Š” rateDiscounPolicy์™€ fixDiscountPolicy์ธ ๋™์ผ ํƒ€์ž…์˜ ๋นˆ์ด ๋‘ ๊ฐœ๊ฐ€ ์žˆ์Œ์„ ์•Œ๊ฒŒ๋œ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ํƒ€์ž… ๊ธฐ๋ฐ˜์—์„œ ์ด๋ฆ„ ๊ธฐ๋ฐ˜ ์ฝ”๋“œ๋กœ ์ˆ˜์ •์‹œ์ผœ์ค€ ๊ฒƒ์ด๋‹ค. rateDiscountPolicy ๋นˆ์ด ์ œ๋Œ€๋กœ ๋“ฑ๋ก๋˜์–ด์žˆ๋‹ค๋ฉด ํ•ด๋‹น ๋นˆ์œผ๋กœ ์ฃผ์ž…ํ•œ๋‹ค.

 

 

 

 


 

 

 

โœ”๏ธ  @Qualifier ์‚ฌ์šฉ

 

 

โ–บ  ๋นˆ ๋“ฑ๋ก์‹œ @Qualifier  ์ถ”๊ฐ€ ๊ตฌ๋ถ„์ž ์ ์–ด์ฃผ๊ธฐ

 

 @Component
 @Qualifier("mainDiscountPolicy")
public class RateDiscountPolicy implements DiscountPolicy {}

 

 

Q. ๊ฐ™์€ ํƒ€์ž…์˜ ๋‹ค๋ฅธ ๋นˆ์—๋„ @Qualifier์„ ๊ผญ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š”๊ฐ€?

A. ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•ด์„œ ๊ผญ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ์„œ ๋ฌด์กฐ๊ฑด ๋ถ™์—ฌ์•ผํ•˜๋Š” ๊ฒƒ๋„ ์•„๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋งŒ์•ฝ ๊ฐ™์€ ํƒ€์ž…์˜ ๋นˆ์ด 2๊ฐœ ์ด์ƒ์ธ ๊ฒฝ์šฐ ๊ตฌ๋ถ„์ž๋ฅผ ๋ถ™์ด์ง€ ์•Š์€ ๋‹ค๋ฅธ ๋นˆ์„ ๊ฐ€์ ธ์˜ค๊ณ ์ž ํ•  ๋•Œ  ๊ตฌ๋ถ„์ž๋ฅผ ๋ถ™์ด์ง€ ์•Š์€ ๋˜ ๋‹ค๋ฅธ ๋นˆ๊ณผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ๋‹ค๋ฅธ ๋นˆ์—๋„ @Qualifier์„ ์‚ฌ์šฉํ•˜์—ฌ ์ •ํ™•ํ•˜๊ฒŒ ๊ตฌ๋ถ„์ง€์–ด์ฃผ๋Š” ๊ฒƒ์ด ์ข‹์•„๋ณด์ธ๋‹ค. 

 

 

 

 

โ–บ  ์ƒ์„ฑ์ž ์ž๋™ ์ฃผ์ž…

public OrderServiceImpl(MemberRepository memberRepository
		,@Qualifier("mainDiscountPolicy") DiscountPolicy discountPolicy) {

 

์—ฌ๊ธฐ์„œ @Qulifier์„ ๋ถ™์—ฌ์ฃผ๋ฉด ์„œ๋กœ ๊ฐ™์€ @Qulifier์„ ์ฐพ์œผ๋Ÿฌ ๋‹ค๋‹Œ๋‹ค. ๋งŒ์ผ ๋ถ™์ด์ง€ ์•Š์•˜๋‹ค๊ณ  ํ•ด๋„ mainDiscountPolicy์ธ ์Šคํ”„๋ง ๋นˆ์„ ์ฐพ์œผ๋Ÿฌ ๋‹ค๋‹ ๊ฒƒ์ด๋‹ค. 

 

 

 

 


 

 

 

โœ”๏ธ  @Primary ์‚ฌ์šฉ

 @Component
 @Primary
 public class RateDiscountPolicy implements DiscountPolicy {}

 

@Primary๋ฅผ ๋ถ™์—ฌ์„œ DiscountPolicy์˜ ํƒ€์ž…์—์„œ RateDiscountPolicy ๋นˆ์ด ๊ฐ€์žฅ ์šฐ์„ ์ ์œผ๋กœ ์˜์กด์„ฑ ์ฃผ์ž…๋˜๋„๋ก ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ๋ฉ”์ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ปค๋„ฅ์…˜ ํš๋“์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ @Primary๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์„œ๋ธŒ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปค๋„ฅ์…˜ ํš๋“์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ @Qualify๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์šฉ์ดํ•˜๋‹ค.

 

 

 

 


 

 

 

โœ”๏ธ  MainDiscountPolicy

์• ๋…ธํ…Œ์ด์…˜ ์ง์ ‘ ๋งŒ๋“ค๊ธฐ

 

 

 @Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER,
 ElementType.TYPE, ElementType.ANNOTATION_TYPE})
 @Retention(RetentionPolicy.RUNTIME)
 @Documented
 @Qualifier("mainDiscountPolicy")

 

@Target

: ์• ๋…ธํ…Œ์ด์…˜ ์ ์šฉ ๋Œ€์ƒ

 

 

@Retention

: ์• ๋…ธํ…Œ์ด์…˜ ์ง€์† ์‹œ๊ฐ„ ๊ฒฐ์ •

 

 

@Documented

: ์• ๋…ธํ…Œ์ด์…˜ ์ •๋ณด๋ฅผ javadoc์œผ๋กœ ์ž‘์„ฑํ•œ ๋ฌธ์„œ์— ํฌํ•จ

 

 

@Qualifier("mainDiscountPolicy")` ์ด๋ ‡๊ฒŒ ๋ฌธ์ž๋ฅผ ์ ์œผ๋ฉด ์ปดํŒŒ์ผ์‹œ ํƒ€์ž… ์ฒดํฌ๊ฐ€ ์•ˆ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์• ๋…ธํ…Œ์ด์…˜์„ ์ง์ ‘ ๋งŒ๋“ค์ฃผ์—ˆ๋‹ค. 

 

 

 

- ์• ๋…ธํ…Œ์ด์…˜ ์ถœ์ฒ˜

 

[Java] ์ž๋ฐ” ๋ฉ”ํƒ€ ์–ด๋…ธํ…Œ์ด์…˜ ์ •๋ฆฌ ๋ฐ ํ™œ์šฉ

๋ฉ”ํƒ€ ์–ด๋…ธํ…Œ์ด์…˜ (Meta Annotation) ๋ฉ”ํƒ€ ์–ด๋…ธํ…Œ์ด์…˜์€ ์–ด๋…ธํ…Œ์ด์…˜์— ๋ถ™์ด๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด๋‹ค. ์ฆ‰, ์‚ฌ์šฉํ•  ์–ด๋…ธํ…Œ์ด์…˜์„ ์ •์˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•œ๋‹ค. ๋ฉ”ํƒ€ ์–ด๋…ธํ…Œ์ด์…˜์€ ์‚ฌ์šฉํ•  ์–ด๋…ธํ…Œ์ด์…˜์˜ ์ ์šฉ๋Œ€์ƒ ๋˜

ittrue.tistory.com

 

 

 

@MainDiscountPolicy
public class RateDiscountPolicy implements DiscountPolicy { } 

 

์ด๋ ‡๊ฒŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค. ์ƒ์„ฑ์ž ์ฃผ์ž…์ด๋‚˜ ์ˆ˜์ •์ž ์ฃผ์ž…์—๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

 

 

 


 

 

 

โœ”๏ธ  AllBeanTest

ํ•ด๋‹น ํƒ€์ž…์˜ ๋ชจ๋“  ๋นˆ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ Map๊ณผ List๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

โ–บ  findAllBean( )

 
   ApplicationContext ac
     = new AnnotationConfigApplicationContext(AutoAppConfig.class, DiscountService.class);

	DiscountService discountService = ac.getBean(DiscountService.class);
        Member member = new Member(1L, "userA", Grade.VIP);
        int discountPrice = discountService.discount(member, 10000, "fixDiscountPolicy");

 

AutoAppConfig์™€ DiscountService ํด๋ž˜์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ac๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  DiscountService ๊ฐ์ฒด๋ฅผ ์ฐพ์•„  DiscountService ํƒ€์ž…์˜ discountService ์ด๋ฆ„์œผ๋กœ ํ•ด๋‹น ๋นˆ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. member๋Š” 10000์„ ์ฃผ๋ฌธํ–ˆ๊ณ , Vip ๋“ฑ๊ธ‰์œผ๋กœ fixDiscountPolicy๋ฅผ ์จ์„œ discount๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.

 

 

 

- getBean ์ถœ์ฒ˜

 

[Spring] getBean() ๋ฉ”์„œ๋“œ์˜ ์—ญํ• ๊ณผ ํ™œ์šฉ ๋ฐฉ๋ฒ•

Spring ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ApplicationContext๋ฅผ ํ†ตํ•ด ๋นˆ(Bean) ๊ฐ์ฒด๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ApplicationContext๋Š” getBean() ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•˜์—ฌ ๋“ฑ๋ก๋œ ๋นˆ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” getBean(

jjangadadcodingdiary.tistory.com

 

 

 

 

โ–บ  DiscountService

public DiscountService(Map<String, DiscountPolicy> policyMap,List<DiscountPolicy> policies){
            this.policyMap = policyMap;
            this.policies = policies;
}

 

์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค. ์ƒ์„ฑ์ž๋Š” DiscountPolicy ํƒ€์ž…์„ <๋นˆ์ด๋ฆ„, ๋นˆ> ์Œ์œผ๋กœ ๋ฐ›๋Š” Map์ด ์žˆ๊ณ , ๋ชจ๋“  DiscountPolicy ๋นˆ์„ ๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ๋กœ ๋ฐ›๋Š” List๋กœ ๋งŒ๋“ค์—ˆ๋‹ค. 

 

 

 

 

••• ์ด์–ด์„œ ๋‹ค๋ฅธ ์ฝ”๋“œ ๋ถ€๋ถ„ •••

 

 

 

 public int discount(Member member, int price, String discountCode) {
            DiscountPolicy discountPolicy = policyMap.get(discountCode); 
            return discountPolicy.discount(member, price);
}

 

์ด ๋ฉ”์„œ๋“œ๊ฐ€ ํ• ์ธ ์ •์ฑ…์„ ์ ์šฉํ•˜๊ฒŒ ํ•œ๋‹ค. discountCode๋Š” Test ์ฝ”๋“œ์—์„œ fixDiscountPolicy๋กœ ๋ฐ›์•˜๋‹ค. ๊ทธ๋Ÿฌ๋ฉด policyMap์„ ํ†ตํ•ด fixDiscountPolicy ๋นˆ์„ ์ฐพ์•„ discountPolicy๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ๋ฐ›๋Š”๋‹ค. ๊ทธ๋Ÿฌ๋ฉด discountPolicy๋Š” fixDiscountPolicy๊ฐ€ ๋˜๋Š”๊ฑฐ๊ณ  fixDiscountPolicy์˜ ์ •์ฑ…์ธ 'Vip๋Š” ์–ผ๋งˆ๋ฅผ ๊ตฌ๋งคํ•˜๋“  1000์›์„ ํ• ์ธํ•ด์ฃผ๋Š” ๊ฒƒ'์— ๋งž์ถฐ ํ• ์ธ์ด ์ง„ํ–‰๋œ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด member๋Š” vip์ด๋ฉฐ 10000์›์„ ๊ตฌ๋งคํ–ˆ๋‹ค๋Š” test ์ฝ”๋“œ์— ๋งž์ถฐ 1000์›์„ ํ• ์ธํ•ด์ฃผ๋ฉด ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

Map๊ณผ List๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํƒ€์ž…์— ๋งž๋Š” ๋ชจ๋“  ๋นˆ์„ ๊ฐ€์ ธ์˜จ ํ›„, ๊ณ ๊ฐ ํ˜น์€ ํ…Œ์ŠคํŠธ์— ๋งž๋Š” ๋นˆ์„ ์ฐพ์•„ ๋ฉ”์„œ๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

 

 

 

Q. ๋ชจ๋“  ๋นˆ์„ ๊ฐ€์ ธ์˜ฌ ๋•Œ ๊ผญ Map๊ณผ List ๋‘˜ ๋‹ค ์จ์•ผํ•˜๋Š”๊ฑธ๊นŒ?

A. ํ•˜๋‚˜๋งŒ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•ด์„œ ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. Map์€ <ํ‚ค ํ˜น์€ ์ด๋ฆ„>์„ ๊ฐ€์ง€๊ณ  ๋นˆ์„ ๋น ๋ฅด๊ฒŒ ์ฐพ๋Š” ๊ฒƒ์ด๊ณ , List๋Š” ์ˆœ์„œ์— ๋”ฐ๋ผ ๋ชจ๋“  ๋นˆ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ํŠน์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ํ˜„์žฌ๋Š” ์ ์€ ๋นˆ์œผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ์ง€๋งŒ ์‹ค๋ฌด๋Š” ํ›จ์”ฌ ๋งŽ์€ ๋นˆ์œผ๋กœ ํ…Œ์ŠคํŠธ ํ˜น์€ ํ”„๋กœ๊ทธ๋žจ์„ ๋Œ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ๋‘ ํŠน์„ฑ์„ ๋ชจ๋‘ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ์œ ์—ฐํ•˜๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

<์ถœ์ฒ˜ ์ธํ”„๋Ÿฐ>

 

์ปดํฌ๋„ŒํŠธ ์Šค์บ”๊นŒ์ง€ ์–ด์ฐŒ์ €์ฐŒ ์™”๋‹ค. ์‚ฌ์‹ค ๋ธ”๋กœ๊ทธ ์ •๋ฆฌ๋งŒ ์•„๋‹ˆ์—ˆ์–ด๋„ ๊ฐ•์˜๋Š” ํ•œ๋‹ฌ ์•ˆ์— ๋๋ƒˆ์„ ๋“ฏ... ๊ทธ๋ž˜๋„ ๋ธ”๋กœ๊ทธ ์ •๋ฆฌํ•˜๋ฉด์„œ ํ‰์†Œ ๊ทธ๋ƒฅ ๋„˜๊ฒผ์„ ์งˆ๋ฌธ๋“ค ๋ชฝ๋•… ์ฐพ์•„๋ณด๋Š” ์ค‘์ด๋‹ค. ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ์ง€๋งŒ ๊ทธ๋งŒํผ ๋‚ด ๋จธ๋ฆฌ์˜ ์ง€์‹๋„ ํ•˜๋‚˜ ๋‘˜ ์ฑ„์›Œ์ง€๊ณ  ์žˆ์Œ์„ ๋Š๋‚€๋‹ค. (์‚ฌ์‹ค ๋ธ”๋กœ๊ทธ ์ •๋ฆฌ์— ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ ค ํ˜„ํƒ€์™€์„œ ์ฃผ์ ˆ์ฃผ์ ˆ ์ ์–ด๋ณธ๋‹ค) ์ด๋ฒˆ ์„น์…˜ 6์€ ๊ฐ•์˜๊ฐ€ ์งง์•„์„œ ๋นจ๋ฆฌ ๋๋‚ ์ง€๋„ ๋ชจ๋ฅธ๋‹ค๋Š” ๊ธฐ๋Œ€๊ฐ์ด ์žˆ๋‹ค. ์šฐ๋ฆฌ์ง‘ ์—์–ด์ปจ ๊ณ ์žฅ๋‚˜์„œ ์•ˆ๋‚˜์˜ค์ง€๋งŒ,,,๐Ÿฅฒ ๋”์œ„ ์ด๊ฒจ๋‚ด๊ณ ! ๋ชจ๋‘๋“ค ํ™”์ดํŒ…!!!

 

 

 

๐Ÿงธ 


 

๐Ÿงธ ๊ตฌ์กฐํŒŒ์•… ๋ ˆ์ธ ๊ผฌ์šฐ- ๐Ÿงธ

  • main
    ใ„ด class : AutoAppConfig
  • test - scan
    ใ„ด class : AutoAppConfigTest

  • test - scan - filter
    ใ„ด class : BeanA, BeanB, ComponentFilterAppConfigTest

    ใ„ด Annotation : MyExcludeComponent, MyIncludeComponent

 

 


 

Q.  ์ปดํฌ๋„ŒํŠธ ์Šค์บ”์ด๋ž€?

A. ์„ค์ •์ •๋ณด๊ฐ€ ์—†์–ด๋„ ์ž๋™์œผ๋กœ ์Šคํ”„๋ง ๋นˆ์„ ๋“ฑ๋กํ•œ๋‹ค.

 

 

 

โœ”๏ธ  AutoAppConfig

์ปดํฌ๋„ŒํŠธ ์Šค์บ” ์„ค์ •

 

@ComponentScan(
        basePackages = "hello.core.member",
        basePackageClasses = AutoAppConfig.class,
        excludeFilters = @ComponentScan.Filter
			(type = FilterType.ANNOTATION, classes = Configuration.class)
)

 

 

@ComponentScan

: @Component์–ด๋…ธํ…Œ์ด์…˜ ๋ฐ streotype(@Service, @Repository, @Controller.)์–ด๋…ธํ…Œ์ด์…˜์ด ๋ถ€์—ฌ๋œ ํด๋ž˜์Šค๋“ค์„ ์ž๋™์œผ๋กœ Scanํ•˜์—ฌ Bean์œผ๋กœ ๋“ฑ๋กํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด๋‹ค.

 

 

basePackages

:  String์œผ๋กœ ์ž…๋ ฅ๋œ ํŒจ์บ์ง€์˜ ๊ฒฝ๋กœ๋ฅผ ์Šค์บ”ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์ง์ ‘ ์Šค์บ”ํ•  ์œ„์น˜๋ฅผ ์ง€์ •ํ•œ๋‹ค.

 

 

basePackageClasses

์ ํžŒ ํด๋ž˜์Šค๊ฐ€(ํŒจํ‚ค์ง€ ์•ˆ) ์œ„์น˜ํ•œ ๊ณณ๋ถ€ํ„ฐ ๋ชจ๋“  ์–ด๋…ธํ…Œ์ด์…˜์„ ๋ถ€์—ฌ๋œ ํด๋ž˜์Šค๋ฅผ bean์œผ๋กœ ๋“ฑ๋กํ•ด์ค€๋‹ค. 

 

 

excludeFilters 

:  ๊ฐ์ฒด๋ฅผ ์ œ์™ธํ•œ๋‹ค. (AppConfig์— ์ˆ˜๋™์œผ๋กœ ๋“ฑ๋กํ•œ ๊ฒƒ๋“ค์€ ๋นผ์ค€๋‹ค)

 

 

includeFilters

@Component ์–ด๋…ธํ…Œ์ด์…˜์ด ์‚ฌ์šฉ๋œ ๊ฐ์ฒด๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ณ  ์‹ถ์œผ๋ฉด,  includeFilters ์„ค์ •์„ ์‚ฌ์šฉํ•œ๋‹ค. ํŠน์ • ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ํด๋ž˜์Šค๋งŒ์„ ์Šค์บ”ํ•˜๋„๋ก ์ง€์ •ํ•œ๋‹ค. 

 

 

 

- @ComponentScan ์ถœ์ฒ˜

 

Spring - @ComponentScan ์–ด๋…ธํ…Œ์ด์…˜์ด๋ž€?

@ComponentScan @Componentscan ์–ด๋…ธํ…Œ์ด์…˜์€ @Component์–ด๋…ธํ…Œ์ด์…˜ ๋ฐ streotype(@Service, @Repository, @Controller.)์–ด๋…ธํ…Œ์ด์…˜์ด ๋ถ€์—ฌ๋œ Class๋“ค์„ ์ž๋™์œผ๋กœ Scanํ•˜์—ฌ Bean์œผ๋กœ ๋“ฑ๋กํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ž…๋‹ˆ

galid1.tistory.com

 

 

- @ComponentScan ์ถœ์ฒ˜

 

[Spring] @ComponentScan - basePackages, basePackageClasses

@ComponentScan@Configuration์ด ๋ถ™์€ ๋นˆ ์„ค์ • ์ž๋ฐ”ํด๋ž˜์Šค์— ๋ถ™์—ฌ์„œ ์Šคํ…Œ๋ ˆ์˜ค ํƒ€์ž… ์–ด๋…ธํ…Œ์ด์…˜์ด ๋ถ™์€ ...

blog.naver.com

 

 

 

Q. basePackages๋ณด๋‹ค basePackagesClasses๋ฅผ ์“ฐ๋Š”๊ฑธ ๊ถŒ์žฅํ•œ๋‹ค. ์™œ ๊ทธ๋Ÿฐ ๊ฒƒ์ผ๊นŒ?

A. ์ปดํฌ๋„ŒํŠธ ์Šค์บ”์ด ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ์ดํ•ดํ•ด์•ผํ•œ๋‹ค. ์ปจํฌ๋„ŒํŠธ ์Šค์บ”์„ ํ•˜๋ ค๋ฉด @SpringBootApplication์„ ์‚ดํŽด๋ด์•ผํ•œ๋‹ค. @SpringBootApplication์—๋Š” @ComponentScan์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  @ComponentScan์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด ์‹œ์ž‘์ง€์ ์ด๋‹ค. @ComponentScan์„ ๋ถ™์ด๊ณ  ์žˆ๋Š” ๊ทธ ํด๋ž˜์Šค๋ถ€ํ„ฐ ์ปดํฌ๋„ŒํŠธ ์Šค์บ”์„ ์‹œ์ž‘ํ•œ๋‹ค. ์„ค์ •ํ•ด ๋†“์€ ํŒจํ‚ค์ง€๋“ค ์ค‘์—์„œ, ํ•ด๋‹น ํŒจํ‚ค์ง€์™€ ํ•˜์œ„ ํŒจํ‚ค์ง€์— ๋Œ€ํ•ด์„œ @Component ๊ฐ™์€ ์Šคํ…Œ๋ ˆ์˜ค ํƒ€์ž… ์–ด๋…ธํ…Œ์ด์…˜์ด ๋ถ™์€ ํด๋ž˜์Šค๋ฅผ ๋ชจ๋‘ ์ฐพ์•„์„œ ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ์ด๋Ÿฐ์‹์œผ๋กœ ๊ฐ€๋Š”๊ฒŒ spring์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋ณธ์ ์ธ ๊ฒฝ๋กœ์ธ ๊ฒƒ ๊ฐ™๋‹ค. ๊ทธ๋Ÿฐ๋ฐ basePackages๋Š” ๋‚ด๊ฐ€ ์ง์ ‘ ๊ฒฝ๋กœ๋ฅผ ์ ๋Š” ๊ฒƒ์œผ๋กœ springboot์—์„œ ์ œ๊ณต๋˜๋Š” ์ตœ์ƒ์œ„ ํŒจํ‚ค์ง€๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์ง€ ์•Š๊ฒŒ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. springboot์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋ณธ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ํšจ์œจ์ ์ด๊ณ  ํ–ฅํ›„ ํ”„๋กœ์ ํŠธ๊ฐ€ ์ปค์ง์— ๋”ฐ๋ผ ๋ณต์žก์„ฑ์„ ์ค„์—ฌ์ค€๋‹ค.

 

 

- basePackage๋ฅผ ๊ถŒ์žฅํ•˜์ง€ ์•Š๋Š” ์ด์œ  ์ถœ์ฒ˜

 

spring[5] ComponentScan๊ณผ Component

Component Sacn ์ง€๊ธˆ๊นŒ์ง€ ๋นˆ์„ ๋“ฑ๋กํ•˜๊ธฐ ์œ„ํ•ด์„œ AppConfig class์— ์‚ฌ์šฉ์ž๊ฐ€ ์ผ์ผํžˆ @Bean์œผ๋กœ ๊ด€๋ฆฌํ•ด์ฃผ์–ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๊ฑด ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋„ˆ๋ฌด ๊ท€์ฐฎ์€ ์ž‘์—…์ด๊ณ  ๋ˆ„๋ฝํ•˜๊ฒŒ ๋˜๋ฉด ํฐ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ

ililil9482.tistory.com

 

- ComponentScan ๋™์ž‘ ์ถœ์ฒ˜

 

์Šคํ”„๋ง ํ•ต์‹ฌ ๊ธฐ์ˆ -03.@Component์™€ ์ปดํฌ๋„ŒํŠธ ์Šค์บ”

IoC ์ปจํ…Œ์ด๋„ˆ 4๋ถ€ : @Component์™€ ์ปดํฌ๋„ŒํŠธ ์Šค์บ”

jaeuk2274.github.io

 

 

 

••• ์ด์–ด์„œ ๋‹ค๋ฅธ ์ฝ”๋“œ ๋ถ€๋ถ„ •••

 

 

 

public class AutoAppConfig {

}

 

ํ˜„์žฌ AutoAppConfig ํด๋ž˜์Šค์˜ ์—ญํ• ์€ ์ปดํฌ๋„ŒํŠธ ์Šค์บ”์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์„œ๋“œ๋‚˜ ๋‹ค๋ฅธ ์ฝ”๋“œ๋Š” ์ ์ง€ ์•Š๋Š”๋‹ค.

 

 

 

 


 

 

 

 

โœ”๏ธ  OrderServiceImpl

์˜์กด๊ด€๊ณ„์ž๋™์ฃผ์ž…

 

@Component
public class OrderServiceImpl implements OrderService{

    private final MemberRepository memberRepository;
    private final DiscountPolicy discountPolicy;

    @Autowired
    public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) {
        this.memberRepository = memberRepository;
        this.discountPolicy = discountPolicy;
    }
    
    ...
}

 

 

@Component

@Component ์–ด๋…ธํ…Œ์ด์…˜์„ ์ด์šฉํ•˜๋ฉด Bean Configuration ํŒŒ์ผ์— Bean์„ ๋”ฐ๋กœ ๋“ฑ๋กํ•˜์ง€ ์•Š์•„๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

@Autowired

์ƒ์„ฑ์ž์—์„œ ์—ฌ๋Ÿฌ ์˜์กด๊ด€๊ณ„๋„ ํ•œ๋ฒˆ์— ์ฃผ์ž…๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

 

 

• @Component
: Bean ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์œผ๋ฉฐ(์ปดํฌ๋„ŒํŠธ ์Šค์บ”์— ์‚ฌ์šฉ), IoC์ปจํ…Œ์ด๋„ˆ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ž๋™์œผ๋กœ ๊ฐ์ฒด ์ƒ์„ฑ๋˜๋ฉด Sigleton์ด๋‹ค. 

• @Controller
: ์Šคํ”„๋ง MVC ์ปจํŠธ๋กค๋Ÿฌ์— ์‚ฌ์šฉํ•˜๋ฉฐ, Dispatcher(HTTPํ”„๋กœํ† ์ฝœ๋กœ ๋“ค์–ด์˜จ ์š”์ฒญ์„ ๋ฐ›์•„ ์ ํ•ฉํ•œ ์ปจํŠธ๋กค๋Ÿฌ์—๊ฒŒ ์œ„์ž„)์€ @Controller๊ฐ€ ์žˆ๋Š” ํด๋ž˜์Šค๋“ค์„ ํ™•์ธํ•ด์„œ @RequestMapping์ด ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋“ค์„ ํ™•์ธํ•ฉํ•˜์—ฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

• @Service
: ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง์— ์žˆ์œผ๋ฉฐ ์ €์žฅ์†Œ ๊ณ„์ธต์„ ์‚ฌ์šฉํ•œ๋‹ค.

• @Repository
: ๋ฐ์ดํ„ฐ ์—‘์„ธ์Šค ๊ณ„์ธต์—์„œ ์‚ฌ์šฉํ•œ๋‹ค. ์ฃผ๋กœ ์ปดํฌ๋„ˆ๋Š” ์Šค์บ” ๋Œ€์ƒ์ด ๋˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜์ง€๋งŒ, ์Šคํ”„๋ง๋ถ€ํŠธ์™€ JPA๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์˜ˆ์™ธ ๋ณ€ํ™˜๊ธฐ๋ฅผ ์ž๋™์œผ๋กœ ๋“ฑ๋กํ•ด์„œ @Repository๋ฅผ ์ ์šฉํ•œ ๋นˆ์„ ํ”„๋ก์‹œ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

• @Configuration
:  ์„ค์ •ํŒŒ์ผ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ, Bean์„ ๋“ฑ๋กํ•˜๊ธฐ ์œ„ํ•œ ์• ๋…ธํ…Œ์ด์…˜์ด๋‹ค. ์‹ฑ๊ธ€ํ†ค์„ ์œ ์ง€ํ•˜๋„๋ก ์ถ”๊ฐ€์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.

 

- @Controller, @Service ์ถœ์ฒ˜

 

@Controller, @Service, @Repository ์ฐจ์ด

๊ฐœ์š” ์Šคํ”„๋ง์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์•„๋งˆ ๊ฐ€์žฅ ์ฒ˜์Œ ์ ‘ํ–ˆ๋˜ ๊ฒƒ์ด @Controller, @Service, @Repository์˜€๋‹ค. ์ด ์–ด๋…ธํ…Œ์ด์…˜๋“ค์„ ๋ฌด์˜์‹์ ์œผ๋กœ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ, ๊ฐ ์ฐจ์ด์ ์€ ์žˆ์„๊นŒ? ์žˆ๋‹ค๋ฉด ์–ด๋–ค ๊ฒƒ์ผ๊นŒ? ์•Œ์•„๋ณด๋„๋ก ํ•ด๋ณด

escapefromcoding.tistory.com

 

 

- @Repository ์ถœ์ฒ˜

 

@Repository ๊ธฐ๋Šฅ

@Repository ๋Š” ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๊ณ„์ธต์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์• ๋„ˆํ…Œ์ด์…˜์ด๋‹ค. ๋ณดํ†ต์€ ์ปดํฌ๋„ŒํŠธ ์Šค์บ”์˜ ๋Œ€์ƒ์ด ๋˜๊ธฐ ์œ„ํ•ด ์ ์šฉํ•˜์ง€๋งŒ ์Šคํ”„๋ง ๋ถ€ํŠธ์™€ JPA ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์˜ˆ์™ธ ๋ณ€ํ™˜๊ธฐ(PersistenceExceptionTranslationPostP

hoonsmemory.tistory.com

 

 

- @Configuration ์ถœ์ฒ˜

 

[Spring] @Configuration ๊ฐœ๋…๊ณผ ์žฅ์ 

๋”๋ณด๊ธฐ 1. @Configuration ์ด๋ž€? : @Configuration์ด๋ผ๊ณ  ํ•˜๋ฉด ์„ค์ •ํŒŒ์ผ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์• ๋…ธํ…Œ์ด์…˜ or Bean์„ ๋“ฑ๋กํ•˜๊ธฐ ์œ„ํ•œ ์• ๋…ธํ…Œ์ด์…˜์ด๋‹ค. ๋”๋ณด๊ธฐ 2. @Configuration์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ญ๊ฐ€ ์ข‹์€๋ฐ? : @Configuration ์• 

castleone.tistory.com

 

 

 

 


 

 

 

 

โœ”๏ธ  AutoAppConfigTest

์ปดํฌ๋„ŒํŠธ ์Šค์บ”์ด ์ž˜ ์ž‘๋™๋˜๋Š”์ง€ ํ™•์ธ

 

 @Test
    void basicScan() {
        AnnotationConfigApplicationContext ac 
				 = new AnnotationConfigApplicationContext(AutoAppConfig.class);

 

 

AnnotationConfigApplicationContext๋Š” AutoAppConfig์˜ ์ธ์ž๋ฅผ ๋ฐ›์•„ ์Šคํ”„๋ง ์„ค์ • ํด๋ž˜์Šค๋กœ ์ธ์‹ํ•œ๋‹ค. AutoAppConfig์— @Configuration์„ ์ ์–ด๋†“์•˜์œผ๋‹ˆ ์ธ์‹์ด ๋˜๋Š” ๊ฒƒ์ด๋‹ค. AutoAppConfig์—๋Š” ์•„๊นŒ @Componentscan์— ๋Œ€ํ•œ ์ •๋ณด๋“ค์„ ์ ์–ด๋†“์•˜๋‹ค. ๊ทธ๋Ÿผ ๊ทธ๊ฑธ ๊ธฐ๋ฐ˜์œผ๋กœ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์Šค์บ”ํ•ด ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•˜๊ณ  ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•œ๋‹ค. ๋ชจ๋“  ์ค€๋น„๊ฐ€ ์™„๋ฃŒ๋˜๋ฉดAnnotationConfigApplicationContext๋Š” ์™„์ „ํžˆ ์ดˆ๊ธฐํ™”๋˜๋ฉฐ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.

 

 

 

••• ์ด์–ด์„œ ๋‹ค๋ฅธ ์ฝ”๋“œ ๋ถ€๋ถ„ •••

 

 

        MemberService memberService = ac.getBean(MemberService.class);
        assertThat(memberService).isInstanceOf(MemberService.class);
    }

 

์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์—์„œ MemberService ํƒ€์ž…์˜ ๋นˆ์„ ์กฐํšŒํ•œ๋‹ค. ์กฐํšŒ๋œ ๋นˆ์ด MemberServiceํƒ€์ž…์ธ์ง€ ๊ฒ€์ฆํ•˜์—ฌ ์„ค์ •์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

 

 

assertThat(A).isInstanceOf(B);

: isInstanceOf() ๋Š” ํ•ด๋‹น ํƒ€์ž…์˜ ์ธ์Šคํ„ด์Šค์ธ์ง€๋ฅผ ๋น„๊ตํ•˜๋Š” ๋ฉ”์„œ๋“œ๋‹ค. 

 

 

 

 


 

 

 

โœ”๏ธ  MyExcludeComponent

์ปดํฌ๋„ŒํŠธ ์Šค์บ” ๋Œ€์ƒ์—์„œ ์ œ์™ธํ•  ์• ๋…ธํ…Œ์ด์…˜

 

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MyExcludeComponent {

}

 

 

@interface 

: ์ž๋ฐ”์—์„œ ์ œ๊ณตํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜ ์™ธ์—, ์‚ฌ์šฉ์ž๊ฐ€ ์ปค์Šคํ…€ํ•  ์ˆ˜ ์žˆ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด๋‹ค. @interface๋Š” ํด๋ž˜์Šค๋‚˜ ๋ณ€์ˆ˜๋ฅผ ํŠน์ • ๊ฐ’์œผ๋กœ ์ง€์ •ํ•˜์—ฌ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

@Target

:  ์‚ฌ์šฉ์ž๊ฐ€ ๋งŒ๋“  annotation์ด ๋ถ€์ฐฉ๋  ์ˆ˜ ์žˆ๋Š” ํƒ€์ž…์„ ์ง€์ •ํ•œ๋‹ค. 

@Target({ElementType.TYPE})์€ ํด๋ž˜์Šค, ์ธํ„ฐํŽ˜์ด์„œ, Enum ๋˜๋Š” Record์— ๋ถ™์ผ ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

 

 

@Retention

: ํ•ด๋‹น ์–ด๋…ธํ…Œ์ด์…˜์„ ์–ธ์ œ๊นŒ์ง€ ์œ ์ง€ํ• ๊ฑด์ง€ ์ง€์ •ํ•œ๋‹ค.

@Retention(RetentionPolicy.RUNTIME)์€ Java๋กœ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๊ฐ€ ๋Œ์•„๊ฐ€๋Š” ๋™์•ˆ ์œ ์ง€ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

 

 

@Documented

:  ์–ด๋…ธํ…Œ์ด์…˜์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ javadoc์œผ๋กœ ์ž‘์„ฑํ•œ ๋ฌธ์„œ์— ํฌํ•จ๋˜๋„๋ก ํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด๋‹ค.

 

Q. Docummented๋ฅผ ์จ์„œ ๋ฌธ์„œ์— ํฌํ•จ๋˜๋„๋กœ ํ•˜๋Š” ์ด์œ ๊ฐ€ ๋ฌด์—‡์ธ๊ฐ€?

A. ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฐœ๋ฐœ๋œ ์ฝ”๋“œ๋ฅผ ๋ณด์•˜์„ ๋•Œ ์–ด๋–ค ์ฝ”๋“œ์ธ์ง€ ์‰ฝ๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค. ์–ด๋…ธํ…Œ์ด์…˜์„ ์™œ ์ผ๋Š”์ง€ ๋“ฑ ์„ค๋ช…์„ ํฌํ•จ์‹œํ‚ฌ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— @Documented๋ฅผ ํ•จ๊ป˜ ์ ์–ด ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž์˜ ์ดํ•ด๋ฅผ ๋•๋Š”๋‹ค. ํŠนํžˆ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ํ”„๋ ˆ์ž„์›Œํฌ ๊ฐœ๋ฐœํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค.

 

 

 

- @Target @Retention ์ถœ์ฒ˜

 

[Spring] ์ปค์Šคํ…€ Annotation ๋งŒ๋“ค๊ธฐ

๋‚˜๋งŒ์˜ ์–ด๋…ธํ…Œ์ด์…˜์„ ๋งŒ๋“ค์–ด๋ณด์ž

velog.io

 

 

- @Docummented ์ถœ์ฒ˜

 

[Java] ์ž๋ฐ” ๋ฉ”ํƒ€ ์–ด๋…ธํ…Œ์ด์…˜ ์ •๋ฆฌ ๋ฐ ํ™œ์šฉ

๋ฉ”ํƒ€ ์–ด๋…ธํ…Œ์ด์…˜ (Meta Annotation) ๋ฉ”ํƒ€ ์–ด๋…ธํ…Œ์ด์…˜์€ ์–ด๋…ธํ…Œ์ด์…˜์— ๋ถ™์ด๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด๋‹ค. ์ฆ‰, ์‚ฌ์šฉํ•  ์–ด๋…ธํ…Œ์ด์…˜์„ ์ •์˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•œ๋‹ค. ๋ฉ”ํƒ€ ์–ด๋…ธํ…Œ์ด์…˜์€ ์‚ฌ์šฉํ•  ์–ด๋…ธํ…Œ์ด์…˜์˜ ์ ์šฉ๋Œ€์ƒ ๋˜

ittrue.tistory.com

 

 

 

 


 

 

 

 

โœ”๏ธ  BeanB

์ปดํฌ๋„ŒํŠธ ์Šค์บ”์—์„œ ์ œ์™ธํ•  ํด๋ž˜์Šค

 

@MyExcludeComponent
public class BeanB {

}

 

์•„์ง๊นŒ์ง„ ์ œ์™ธ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š” ์–ด๋–ค ๊ธฐ๋Šฅ์ด ์‹คํ–‰๋œ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. @MyExcludeComponent๋ฅผ ์ ์–ด์ฃผ์–ด ์•„๊นŒ ๋งŒ๋“ค์—ˆ๋˜ ์• ๋…ธํ…Œ์ด์…˜๊ณผ ์—ฐ๊ฒฐํ–ˆ๋‹ค.

 

 

Q. ์™œ ์• ๋…ธํ…Œ์ด์…˜์„ ๋งŒ๋“œ๋Š”๊ฐ€?

A. ์• ๋…ธํ…Œ์ด์…˜์„ ๋งŒ๋“œ๋Š” ์ด์œ ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š”๋Œ€๋กœ ์„ค์ • ์ •๋ณด๋ฅผ ์ปค์Šคํ…€ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ผญ ์ปดํฌ๋„ˆํŠธ ์Šค์บ”์— ์–ด๋–ค ํด๋ž˜์Šค๋ฅผ ํฌํ•จํ•˜๊ณ  ์ œ์™ธ์‹œํ‚ค๊ธฐ ์œ„ํ•จ์€ ์•„๋‹ˆ๋‹ค. (์ œ์™ธ๋Š” ๋‹ค๋ฅธ ํด๋ž˜์Šค์—์„œ ๋ถ€์—ฌํ•จ) ์•„๊นŒ ๋Ÿฐํƒ€์ž„ ์‹œ๊ฐ„์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ด ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•„์š”ํ•œ ์„ค์ •์ •๋ณด๋ฅผ ๋งŒ๋“ค์–ด ๋‹ค๋ฅธ ํด๋ž˜์Šค์— ํŽธ๋ฆฌํ•˜๊ฒŒ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 


 

 

 

 

โœ”๏ธ ComponentFilterAppConfigTest

 

BeanA beanA = ac.getBean("beanA", BeanA.class);
Assertions.assertThat(beanA).isNotNull();

 

getBean

: ac(์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…์ŠคํŠธ)์—์„œ beanA ์ด๋ฆ„์œผ๋กœ BeanA๋ผ๋Š” ํƒ€์ž…์œผ๋กœ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์„ ๋œปํ•œ๋‹ค.

 

 

Assertions.assertThat(A).isNotNull( )

: A๊ฐ€ Null์ธ์ง€ ํ™•์ธํ•œ๋‹ค.

 

 

- Assertions.assertThat().isNotNull() ์ถœ์ฒ˜

 

[Spring] Junit5 Assertions, assertThat()

์ด ๊ธ€์€ ๊ณต๋ถ€๋ฅผ ํ•˜๋ฉด์„œ ์•Œ๊ฒŒ ๋œ ๋‚ด์šฉ๋“ค์„ ๊ธฐ๋กํ•˜๋Š” ๊ธ€ ์ž…๋‹ˆ๋‹ค. ์˜ค๋ฅ˜๋‚˜ ๊ณ ์ณ์•ผ ํ•  ์‚ฌํ•ญ๋“ค์ด ์žˆ๋‹ค๋ฉด ์ง€์  ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค! โ›…๏ธ Assertions ์ด์ „ ํฌ์ŠคํŠธ์—์„œ Junit5๋ฅผ ํ†ตํ•ด ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•ด๋ณด์•˜๋‹ค.

m42-orion.tistory.com

 

 

 

 

assertThrows(
        NoSuchBeanDefinitionException.class,
        () -> ac.getBean("beanB", BeanB.class));
}

 

 

NoSuchBeanDefinitionException

: BeanFactory์ •์˜๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๋Š” ๋นˆ ์ธ์Šคํ„ด์Šค๋ฅผ ์š”์ฒญํ–ˆ์„ ๋•Œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

NoSuchBeanDefinitionException.class, () -> ac.getBean("beanB", BeanB.class)์€ BeanB๋ฅผ beanB๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ๊ฐ€์ง€๊ณ  ์™”๋Š”๋ฐ ๊ทธ๊ฒŒ ์ •์˜๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๋Š” ๋นˆ ์ธ์Šคํ„ด์Šค์—ฌ์•ผ ํ…Œ์ŠคํŠธ๊ฐ€ ์„ฑ๊ณตํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

 

- NoSuchBeanDefinitionException  ์ถœ์ฒ˜

 

NoSuchBeanDefinitionException (Spring Framework 6.1.11 API)

Return the required type of the missing bean, if it was a lookup by type that failed.

docs.spring.io

 

 

 

••• ์ด์–ด์„œ ๋‹ค๋ฅธ ์ฝ”๋“œ ๋ถ€๋ถ„ •••

 

 

@ComponentScan(
            includeFilters = @Filter(classes = MyIncludeComponent.class),
            excludeFilters = @Filter(classes = MyExcludeComponent.class)
    )

 

 

@Filter

: ํ•„ํ„ฐ๋Š” ์ฃผ๋กœ ์š”์ฒญ์— ๋Œ€ํ•œ ์ธ์ฆ, ๊ถŒํ•œ ์ฒดํฌ ๋“ฑ์—  ์“ด๋‹ค. ๊ตฌ์ฒด์ ์œผ๋กœ ๋“ค์–ด์˜จ ์š”์ฒญ์ด DispatcherServlet์— ์ „๋‹ฌ๋˜๊ธฐ ์ „, ํ—ค๋”๋ฅผ ๊ฒ€์‚ฌํ•ด ์ธ์ฆ ํ† ํฐ์ด ์žˆ๋Š”์ง€ ์—†๋Š”์ง€, ์˜ฌ๋ฐ”๋ฅธ์ง€, ์˜ณ์ง€ ์•Š์€์ง€ ๋“ฑ์„ ๊ฒ€์‚ฌํ•œ๋‹ค.

 

 

- Filter ์ถœ์ฒ˜

 

spring - ์Šคํ”„๋ง์—์„œ์˜ ํ•„ํ„ฐ ๊ฐœ๋… ๋ฐ ์˜ˆ์ œ

๋ธ”๋กœ๊ทธ์—์„œ ์‚ฌ์šฉํ•œ ์†Œ์Šค์ฝ”๋“œ๋Š” https://github.com/97e57e/BLOG ์—์„œ ๋ณด์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Filter ๋ž€? ์‚ฌ์‹ค ํ•„ํ„ฐ๋Š” ์Šคํ”„๋ง์˜ ๋…์ž์ ์ธ ๊ธฐ๋Šฅ์ด ์•„๋‹Œ ์ž๋ฐ” ์„œ๋ธ”๋ฆฟ์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ

gardeny.tistory.com

 

 

 

excludeFilters

:  ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ๋Œ€์ƒ์„ ์Šค์บ”์—์„œ ์ œ์™ธ์‹œํ‚จ๋‹ค.

 

 

Q. ๊ทธ๋Ÿผ ๋‹ค์‹œ ํฌํ•จ์‹œํ‚ค๊ณ  ์‹ถ์œผ๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ•˜๋‚˜?

A. includeFilters = @Filter(classes = MyExcludeComponent.class)๋กœ ๋ฐ”๊ฟ”์ฃผ๋ฉด ๋œ๋‹ค.

 

- excludeFilters ์ถœ์ฒ˜

 

component scan

@Component ํด๋ž˜์Šค ์„ ์–ธ๋ถ€ ์œ„ ์ชฝ์— @Component ์–ด๋…ธํ…Œ์ด์…˜์„ ๋ถ™์ด๋ฉด @Configuration ํด๋ž˜์Šค์— ๋ณ„๋„๋กœ Bean ๋“ฑ๋ก ๊ณผ์ •์„ ๊ฑฐ์น˜์ง€ ์•Š์•„๋„ ์Šคํ”„๋ง์ด ํŒจํ‚ค์ง€ ์ „์ฒด๋ฅผ ํƒ์ƒ‰ํ•ด์„œ Bean์œผ๋กœ ๋“ฑ๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.

hyeon9mak.github.io

 

 

@ComponentScan์„ ํ†ตํ•ด ์†์„ฑ์„ ์‚ดํŽด๋ณธ๋‹ค. ์†์„ฑ์—” MyExcludeComponent๋ฅผ excludeFiltersํ•˜๋ผ๊ณ  ์ ํ˜€์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด MyExcludeComponent๋ฅผ ์ œ์™ธ์‹œํ‚ค๋„๋ก ๋˜์–ด์žˆ์œผ๋‹ˆ @MyExcludeComponent๊ฐ€ ๋ถ™์–ด์žˆ์œผ๋ฉด ์ œ์™ธ์‹œํ‚ค๋„๋ก ํ•œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ BeanB์—๋Š” @MyExcludeComponent๊ฐ€ ๋ถ™์–ด์žˆ์œผ๋‹ˆ ์ œ์™ธ๊ฐ€ ๋˜์—ˆ๋‹ค.

 

 

 

 


 

๐ŸŒท

 

์ปดํฌ๋„ŒํŠธ ์Šค์บ”์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ @ComponentScan์„ ์“ฐ๊ณ  { } ์•ˆ์— ์›ํ•˜๋Š” ํŠน์„ฑ์„ ๋„ฃ์„ ์ˆ˜ ์žˆ์Œ์„ ์•Œ์•„๋ดค๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ปดํฌ๋„ŒํŠธ ์Šค์บ”์— ๋Œ€ํ•œ ์š”๊ตฌ๋ฅผ ์„ค์ •ํ•˜๊ณ  ์‹ถ์€ ๊ฒจ์šฐ @interface์™€ ํด๋ž˜์Šค๋ฅผ ์—ฐ๊ฒฐ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.


๐Ÿ“š ์ฑ… ์†Œ๊ฐœํ•˜๊ธฐ

๋‚ด๊ฐ€ ์‚ฌ์šฉํ•œ ์ž๋ฐ”์™„์ „์ •๋ณต ์ฑ… ๋งํฌ!
ใ„ด ๊น€๋™ํ˜• ์ง€์Œ, ์ด์ง€์Šคํผ๋ธ”๋ฆฌ์‹ฑ



: ์ถœ์ฒ˜ ์˜ˆ์Šค24 ํ™ˆํŽ˜์ด์ง€

 

 

์ด ์ฑ…์„ ๊ณ ๋ฅด๊ฒŒ ๋œ ์ด์œ ๋Š” ์นœ๊ตฌ์˜ ์ถ”์ฒœ์ด์—ˆ๋‹ค. ๊ต‰์žฅํžˆ ๊ผผ๊ผผํ•˜๊ฒŒ ์ ํ˜€์žˆ์–ด ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋‹ค๋Š” ์ด์œ ๋กœ ์นœ๊ตฌ๋Š” ์ด ์ฑ…์„ ๊ณจ๋ž๋‹ค๊ณ  ํ–ˆ๋‹ค. ๋‚˜๋„ ๊ทธ๋ž˜์„œ ๊ทธ๋ƒฅ ๋”ฐ๋ผ์ƒ€๋‹ค. ์‹ค์ œ๋กœ ์ฑ…์„ ์‚ดํŽด๋ณด๋‹ˆ ๊ต‰์žฅํžˆ ๊ผผ๊ผผํ•˜๊ฒŒ ์ •๋ฆฌ๋˜์–ด์žˆ๋‹ค. ๋‹ค๋ฅธ ์ฑ…์€ ๋ณธ ์ ์ด ์—†์–ด ๋น„๊ต๊ฐ€ ๋ถˆ๊ฐ€ํ•˜์ง€๋งŒ, ๋‚ด ์ƒ๊ฐ์œผ๋ก  ์ฒ˜์Œ ์ž๋ฐ”๋ฅผ ๊ณต๋ถ€ํ•œ๋‹ค๋ฉด ์ด ์ฑ…์„ ๊ฐ€์ง€๊ณ  ์ถฉ๋ถ„ํžˆ ๋”ฐ๋ผ๊ฐˆ ์ˆ˜ ์žˆ์„ ๋“ฏ ํ•˜๋‹ค. ๋ชจ๋‘๋“ค ํ™”์ดํŒ…!!

 

 

๐Ÿฐ


 

โœ”๏ธ  1์ฐจ์› ๋ฐฐ์—ด_ 151p

๋™์ผํ•œ ์ž๋ฃŒํ˜•์„ ๋ฌถ์–ด ์ €์žฅํ•˜๋Š” ์ฐธ์กฐ ์ž๋ฃŒํ˜•

 

 

• ์ฐธ์กฐ์ž๋ฃŒํ˜•

: ์‹ค์ œ ๊ฐ’์„ ๊ฐ–๋Š”๊ฒƒ์ด ์•„๋‹Œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋œ ๋ฉ”๋ชจ๋ฆฌ์˜ “์ฃผ์†Œ ๊ฐ’”์„ ๊ฐ€์ง€๋Š” ์ž๋ฃŒํ˜•์ด๋ฉฐ, ํ•ด๋‹น ๊ฐ’์€ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๋ณ€์ˆ˜ ํƒ€์ž…์„ ์˜๋ฏธํ•œ๋‹ค.

 

 

- ์ฐธ์กฐ์ž๋ฃŒํ˜• ์ถœ์ฒ˜

 

[Java] ์ž๋ฃŒํ˜•(Data Type) ์ดํ•ดํ•˜๊ธฐ : ๊ธฐ๋ณธ / ์ฐธ์กฐ ์ž๋ฃŒํ˜•, ๋ž˜ํผ ํด๋ž˜์Šค

ํ•ด๋‹น ๊ธ€์—์„œ๋Š” ์ž๋ฃŒํ˜• ์ค‘ ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•, ์ฐธ์กฐ ์ž๋ฃŒํ˜•, ๋ž˜ํผ ํด๋ž˜์Šค์— ๋Œ€ํ•ด ์ดํ•ดํ•˜๊ณ  ๊ฐ๊ฐ์„ ๋น„๊ตํ•˜์—ฌ ์ดํ•ด๋ฅผ ๋•๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์œผ๋กœ ์ž‘์„ฑ์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค. 1) ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•(Primitive Data Type) ๐Ÿ’ก ๋ฐ์ดํ„ฐ๋ฅผ

adjh54.tistory.com

 

 

 

 

• ์ž๋ฐ”์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ

: ํด๋ž˜์Šค-์ •์ -์ƒ์ˆ˜- ๋ฉ”์„œ๋“œ ์˜์—ญ , ์Šคํƒ ์˜์—ญ(๋ชจ๋“  ์ง€์—ญ ๋ณ€์ˆ˜ ์œ„์น˜), ํž™ ์˜์—ญ(๊ฐ์ฒด๊ฐ€ ์œ„์น˜ํ•˜๋Š” ๊ณต๊ฐ„)

 

 

Q. ์ „์—ญ๋ณ€์ˆ˜์™€ ์ง€์—ญ๋ณ€์ˆ˜๋ž€?

A. ์ „์—ญ๋ณ€์ˆ˜๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ๋ชจ๋“  ์˜์—ญ์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜๋กœ, ํ•จ์ˆ˜ ์™ธ๋ถ€, ํŠนํžˆ ๋ชจ๋“ˆ์˜ ์ตœ์ƒ์œ„ ๋ ˆ๋ฒจ์—์„œ ์„ ์–ธํ•œ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ง€์—ญ๋ณ€์ˆ˜๋Š” ํ•œ์ •๋œ ์˜์—ญ์ธ ๋ธ”๋ก, ํ•จ์ˆ˜, ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ณ€์ˆ˜๋ฅผ ๋งํ•œ๋‹ค.

Class example {

	int globalVar = 1; // ์ „์—ญ๋ณ€์ˆ˜
    
    void method() {
    	int localVat = 2;  // ์ง€์—ญ๋ณ€์ˆ˜
    }
}โ€‹

 

 

 

- ์ „์—ญ๋ณ€์ˆ˜์™€ ์ง€์—ญ๋ณ€์ˆ˜ ์˜ˆ์ œ ์ถœ์ฒ˜

 

์ง€์—ญ๋ณ€์ˆ˜์™€ ์ „์—ญ๋ณ€์ˆ˜ ์ดํ•ดํ•˜๊ธฐ ์˜ˆ์‹œ

์›น ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ํšจ์œจ์ ์ธ ํ”„๋กœ๊ทธ๋žจ ์„ค๊ณ„๋ฅผ ์œ„ํ•ด ๋ณ€์ˆ˜๋ฅผ ์ ์ ˆํžˆ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ํ•„์ˆ˜์ ์ธ๋ฐ, ํŠนํžˆ ๋ณ€์ˆ˜์˜ ์œ ํšจ ๋ฒ”์œ„(scope)์™€ ์ƒ๋ช…์ฃผ๊ธฐ(lifetime)๋ฅผ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์„ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด์™€ ๊ด€๋ จํ•˜์—ฌ

developmentrecord.tistory.com

 

 

 

 

• ๊ธฐ๋ณธ ๋ฐฐ์—ด๊ณผ ๊ฐ์ฒด ๋Œ€์ž… ๋ฐฐ์—ด

// ๊ธฐ๋ณธ์ ์ธ ๋ฐฐ์—ด ํ˜•ํƒœ
new int[3];

// ๋ฐฐ์—ด ์ž๋ฃŒํ˜• ๋ณ€์ˆ˜์— ๊ฐ์ฒด ๋Œ€์ž…ํ•˜๊ธฐ
int[] a = new int[3];

// ๊ฐ’ ์ž…๋ ฅํ•˜๊ธฐ
a[1] = 3;
a[2] = 2;
a[3] = 1;

 

1.  int๋Š” ๋ฐฐ์—ด ์ž๋ฃŒํ˜•์ด๋‹ค.
2.  a๋Š” ์ฐธ์กฐ ๋ณ€์ˆ˜๋‹ค.
3.  new๋Š” ํž™ ๋ฉ”๋ชจ๋ฆฌ์— ๋„ฃ์–ด๋ผ๋ฅผ ๋œปํ•œ๋‹ค.
4.  int[3]์€ int ์ž๋ฃŒํ˜• 3๊ฐœ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐ„์ด๋‹ค.

a๋Š” ์ฐธ์กฐ๋ณ€์ˆ˜๋กœ ์‹ค์ œ ๋ฐ์ดํ„ฐ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. ์‹ค์ œ ๋ฐ์ดํ„ฐ๊ฐ’์˜ '์œ„์น˜๊ฐ’'์„ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด๋‹ค.  ์Šคํƒ ์˜์—ญ์—” ์ฃผ์†Œ๊ฐ’์„ ๊ทธ๋ฆฌ๊ณ  ์ด ์ฃผ์†Œ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ํž™ ์˜์—ญ์— ์ ‘๊ทผํ•œ๋‹ค. ์ฆ‰ ํž™ ์˜์—ญ์— ๋ฐฐ์—ด์ด ์ €์žฅ๋˜์–ด์žˆ๋‹ค. 

 

 

 

 

• 1์ฐจ์› ๋ฐฐ์—ด์˜ ๋‹ค์–‘ํ•จ

// ์ƒ์„ฑ ํ›„ ๊ฐ’ ๋Œ€์ž…
int[] a = new int[3]; // ๊ฐ•์ œ์ดˆ๊ธฐํ™”
a[0] = 3;
a[1] = 4;
a[2] = 5;


// ์ƒ์„ฑ๊ณผ ํ•จ๊ป˜ ๊ฐ’ ๋Œ€์ž…
int[] a = new int[]{3, 4, 5} // ๊ฐ•์ œ์ดˆ๊ธฐํ™” ์ƒ๋žต


// ๋Œ€์ž…ํ•  ๊ฐ’๋งŒ ์ž…๋ ฅ (๋ถ„๋ฆฌ ๋ถˆ๊ฐ€๋Šฅ)
int[] a = {3, 4, 5}


// ์„ ์–ธ๊ณผ ๊ฐ์ฒด ๋ถ„๋ฆฌ ๊ฐ€๋Šฅ
int[] a;
a = new int[]{3, 4, 5}

 

Q. ๋ฐฐ์—ด์„ ์–ด๋–ป๊ฒŒ ์„ ์–ธํ•˜๋Š”์ง€์— ๋”ฐ๋ผ ์‚ฌ์†Œํ•œ ๊ธฐ๋Šฅ์ ์ธ ์ฐจ์ด๊ฐ€ ์žˆ๋Š”๊ฐ€?

A. ๋‘ ๋ฐฐ์—ด์„ ์–ด๋–ป๊ฒŒ ์„ ์–ธํ•˜๋Š”์ง€์— ๋”ฐ๋ฅธ ๊ธฐ๋Šฅ์  ์ฐจ์ด์ ์€ ์—†๋‹ค. ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ, ์œ ์—ฐ์„ฑ, ๋ช…ํ™•์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ๋‹ค๋ฅธ ํ˜•ํƒœ์˜ ๋ฐฐ์—ด์ด ์กด์žฌํ•œ๋‹ค. 

 

 

 

 

• ์ฐธ์กฐ ๋ณ€์ˆ˜์™€ ๋ฐฐ์—ด ๊ฐ์ฒด์˜ ๊ฐ’ ์ดˆ๊ธฐํ™”

: ๋ชจ๋“  ๋ณ€์ˆ˜๋Š” ์ดˆ๊ธฐํ™” ์ดํ›„์— ์ถœ๋ ฅ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

int a;
int[]b;

System.out.println(a);
System.out.println(b);

 

๊ฐ ๊ฐ’์„ ์ดˆ๊ธฐํ™”ํ•˜์ง€ ์•Š์•˜๊ธฐ์— ์ถœ๋ ฅ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. (์˜ค๋ฅ˜ ๋ฐœ์ƒ)
int a  = 0;
int[ ]b = null;

 

๊ธฐ๋ณธ ์ž๋ฃŒํ˜•์˜ ์ดˆ๊นƒ๊ฐ’์œผ๋กœ๋Š” '๊ฐ’', ์ฐธ์กฐ ์ž๋ฃŒํ˜•์˜ ์ดˆ๊นƒ๊ฐ’์œผ๋กœ๋Š” 'null' ์„ ์‚ฌ์šฉํ•œ๋‹ค. 

๊ธฐ๋ณธ์ž๋ฃŒํ˜•์˜ ๊ธฐ๋ณธ๊ฐ’
- boolean : false
- ์ •์ˆ˜ : 0
- ์‹ค์ˆ˜ : 0.0

์ฐธ์กฐ์ž๋ฃŒํ˜•์˜ ๊ธฐ๋ณธ๊ฐ’
- ํด๋ž˜์Šค, ๋ฐฐ์—ด ๋“ฑ : null

 

 

 


 

 

 

โœ”๏ธ  ์ฐธ์กฐ์ž๋ฃŒํ˜• ๋ฐฐ์—ด์˜ ํŠน์ง•_ 151p

์ฐธ์กฐ์ž๋ฃŒํ˜•์€ ๊ธฐ๋ณธ์ž๋ฃŒํ˜•๊ณผ ๋‹ค๋ฅด๊ฒŒ ๋ณต์‚ฌ ๊ฐ’์„ ์ˆ˜์ •ํ•˜๋ฉด ๋ณธ๋ž˜ ๊ฐ’๋„ ๋ณ€๊ฒฝ๋œ๋‹ค.

 

 

 

• ์ฐธ์กฐ์ž๋ฃŒํ˜• ๋ณ€์ˆ˜ ๋ณต์‚ฌ

int[] a = {3, 4, 5}
int[] b = a;
b[0] = 7;

System.out.println(a[0]);
System.out.println(b[0]);

 

๊ฒฐ๊ณผ๊ฐ’์€ a[0]๊ณผ b[0]์ด 7๋กœ ๋™์ผํ•˜๋‹ค. 

Q. ์™œ ๋ณต์‚ฌ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ฉด ๋ณธ๋ž˜๊ฐ’๋„ ๋ณ€๊ฒฝ๋˜๋Š”๊ฑธ๊นŒ?

A. ์ฐธ์กฐ ์ž๋ฃŒํ˜• ๋ณ€์ˆ˜๋ฅผ ๋ณต์‚ฌํ•˜๋ฉด ์‹ค์ œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณต์‚ฌ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์‹ค์ œ ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜๊ฐ’์„ ๋ณต์‚ฌ(์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋Š”)ํ•˜๊ธฐ ๋–„๋ฌธ์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ํ•˜๋‚˜์˜ ์ฐธ์กฐ ๋ณ€์ˆ˜๋ฅผ ์ด์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด ๋‹ค๋ฅธ ์ฐธ์กฐ ๋ณ€์ˆ˜๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐ์ดํ„ฐ๋„ ๋ณ€ํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 

 

Q. ๊ธฐ๋ณธ์ž๋ฃŒํ˜•์€?

A. ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ์— ์‹ค์ œ ๋ฐ์ดํ„ฐ๊ฐ’์„ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ ์ž๋ฃŒํ˜• ๋ณ€์ˆ˜๋ฅผ ๋ณต์‚ฌํ•˜๋ฉด ์‹ค์ œ ๋ฐ์ดํ„ฐ๊ฐ’ 1๊ฐœ๊ฐ€ ๋ณต์‚ฌ๋œ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ์•„๋ฌด๋ฆฌ ๋ณ€๊ฒฝํ•ด๋„ ์›๋ณธ ๊ฐ’์€ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค.
int a = 3;
int b = a;
b = 7;


a๋Š” ์—ฌ์ „ํžˆ 3์ด ๋‚˜์˜ค๊ณ  b๋Š” 7์ด ๋œ๋‹ค.

 

 


 

 

 

 

โœ”๏ธ  ๋ฐ˜๋ณต๋ฌธ์„ ์ด์šฉํ•ด ๋ฐฐ์—ด ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ_ 165p

ํฌ์ธํŠธ ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉ

 

 

• ํฌ์ธํŠธ์—ฐ์‚ฐ์ž

int[] a = new int[100]

a[0] = 1, a[1] = 2, ... , a[99] = 100;

for(int i = 0; i < a.length; i++) {
	System.out.println(a[i]);
}

 

ํฌ์ธํŠธ์—ฐ์‚ฐ์ž๋Š” 'ํ•ด๋‹น ์ฐธ์กฐ ๋ณ€์ˆ˜๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ณณ์œผ๋กœ ๊ฐ€๋ผ'๋Š” ์˜๋ฏธ์ด๋‹ค.
๋ฐฐ์—ด์ฐธ์กฐ๋ณ€์ˆ˜.length๋Š” '๋ฐฐ์—ด ์ฐธ์กฐ ๋ณ€์ˆ˜๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ณณ์— ๊ฐ€๋ฉด ๋ฐฐ์—ด ๊ฐ์ฒด๊ฐ€ ์žˆ๋Š”๋ฐ, ๊ทธ ๋ฐฐ์—ด์˜ ๋ฐฉ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ฐ€์ ธ์˜ค๋ผ'๋Š” ์˜๋ฏธ์ด๋‹ค.

 

 

 

 

• for-each๋ฌธ

int[] a = new int[100];
a[0] = 1, a[1] = 2, ... , a[99] = 100;

for(int k: a) {
	System.out.println(k);
}

 

for-each๋ฌธ์€ ๋ฐฐ์—ด์ด๋‚˜ ์ปฌ๋ ‰์…˜์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ์ˆœํšŒํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ„๊ฒฐํ•œ ๋ฐ˜๋ชฉ๋ฌธ์ด๋‹ค.
for(int k: a)๋Š” for(์›์†Œ ์ž๋ฃŒํ˜• ๋ณ€์ˆ˜๋ช…: ์ง‘ํ•ฉ๊ฐ์ฒด)๋กœ ๋ฐฐ์—ด์ด๋‚˜ ์ปฌ๋ ‰์…˜ ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ์ž๋™์œผ๋กœ ์ธ๋ฑ์Šค๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ , ์š”์†Œ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ๊ฐ€์ ธ์™€ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•œ๋‹ค.

 

 

- for each ๊ตฌ๋ฌธ ์ถœ์ฒ˜

 

์ดˆ๋ณด ์ž๋ฐ” ํ”„๋กœ๊ทธ๋ž˜๋ฐ(9) - ๋ฐ˜๋ณต๋ฌธ for-each

๐Ÿ”– INDEX ์ž๋ฐ” ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ for-each ๋ฌธ๋ฒ•์€ "ํ–ฅ์ƒ๋œ for ๋ฌธ" ๋˜๋Š” "for-each ๋ฃจํ”„"๋ผ๊ณ ๋„ ๋ถˆ๋ฆฌ๋ฉฐ, ๋ฐฐ์—ด์ด๋‚˜ ์ปฌ๋ ‰์…˜์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ์ˆœํšŒํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ„๊ฒฐํ•œ ๋ฐ˜๋ณต๋ฌธ์ž…๋‹ˆ๋‹ค. for-each ๋ฌธ๋ฒ•์€ ๊ธฐ์กด์˜

moneylogging.tistory.com

 

 

 

 


 

 

 

โœ”๏ธ  2์ฐจ์› ์ •๋ฐฉ ํ–‰๋ ฌ ๋ฐฐ์—ด_ 169p

 

• 1์ฐจ์› ๋ฐฐ์—ด๊ณผ ๋‹ค๋ฅธ์ 

: ๋ฉ”๋ชจ๋ฆฌ๋Š” 2์ฐจ์› ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”๋กœ ์ €์žฅํ•  ์ˆ˜ ์—†๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์—ฐ์†์ ์ธ ์ฃผ์†Œ ๊ณต๊ฐ„์œผ๋กœ ๊ตฌ์„ฑ๋œ 1์ฐจ์› ๋ฐฐ์—ด์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ์— 1์ฐจ์› ๋ฐ์ดํ„ฐ๋“ค๋กœ ๋‚˜๋ˆ  2์ฐจ์› ๋ฐฐ์—ด์„ ์ €์žฅํ•˜๋ฉฐ 2์ฐจ์› ๋ฐฐ์—ด์€ 1์ฐจ์› ๋ฐฐ์—ด์„ ์›์†Œ๋กœ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” 1์ฐจ์–ธ ๋ฐฐ์—ด์ด๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

Q. ๊ทธ๋ ‡๋‹ค๋ฉด 3์ฐจ์› ๋ฐฐ์—ด์€?

A. 3์ฐจ์› ๋ฐฐ์—ด์€ 2์ฐจ์› ๋ฐฐ์—ด์„ ์›์†Œ๋กœ ํฌํ•จํ•˜๋Š” 1์ฐจ์› ๋ฐฐ์—ด์ด๋‹ค. ํ–‰๊ณผ ์—ด ๊ทธ๋ฆฌ๊ณ  ๋ฉด์„ ํฌํ•จํ•˜์—ฌ 3์ฐจ์›์„ ์™„์„ฑํ•œ๋‹ค.

 

 

 

 

• 2์ฐจ์› ๋ฐฐ์—ด์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ

// ๋ฐฐ์—ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ฐ’ ๋Œ€์ž…
int[][] a = new int[2][3];
a[0][0] = 1; a[0][1] = 2; a[0][2] = 3;
a[1][0] = 4; a[1][1] = 5; a[1][2] = 6;

 

 

a.length์€ 2์ด๋‹ค. a์ธ 100๋ฒˆ์ง€๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ณณ์— 200๊ณผ 300์ด ์žˆ์œผ๋‹ˆ 2๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.
a[0]์€ 200๋ฒˆ์ง€์ด๋ฉฐ 200๋ฒˆ์ง€๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ณณ์œผ๋กœ ๊ฐ€๋‹ˆ 1๊ณผ 2, 3์ด ์žˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— a[0].length๋Š” 3์ด ์ถœ๋ ฅ๋œ๋‹ค.

๊ฐ ์ฃผ์†Œ๊ฐ’์ด ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ณณ์˜ ๊ฐฏ์ˆ˜๋ฅผ ์ƒˆ๋ฉด ๋œ๋‹ค.

 

 

 

 

• ํ–‰ ์„ฑ๋ถ„๋ถ€ํ„ฐ ์ƒ์„ฑํ•˜๊ณ  ์—ด ์„ฑ๋ถ„ ์ƒ์„ฑ

// ํ–‰ ์„ฑ๋ถ„๋ถ€ํ„ฐ ์ƒ์„ฑํ•˜๊ณ  ์—ด ์„ฑ๋ถ„ ์ƒ์„ฑ
int[][] a = new int[2][]

a[0] = new int[]{1,2,3};
a[1] = new int[]{4,5,6};

 

ํ–‰์„ ๋จผ์ € ์ƒ์„ฑํ•˜์—ฌ 100๋ฒˆ์ง€์— ์žˆ์„ ํ–‰์˜ ๊ฐฏ์ˆ˜๋ฅผ ๋ฏธ๋ฆฌ ์ •ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. ์—ด์˜ ๊ฐœ์ˆ˜๋Š” ์–ด์ฐจํ”ผ 1์ฐจ์› ๋ฐฐ์—ด๋กœ ์ด์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ๋ฏธ๋ฆฌ ์ •ํ•ด์ฃผ์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

 

 

 

 

• ๋ฐฐ์—ด์˜ ์ž๋ฃŒํ˜•๊ณผ ํ•จ๊ป˜ ๋Œ€์ž…ํ•  ๊ฐ’ ์ž…๋ ฅ

: ๋Œ€๊ด„ํ˜ธ ์•ˆ์€ ๋ฐ˜๋“œ์‹œ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค.

int[][] a = new int[][] {{1, 2, 3}, {4, 5, 6}}

 

 

 

 

• ๋Œ€์ž…ํ•  ๊ฐ’๋งŒ ์ž…๋ ฅํ•˜๊ธฐ

// ๋Œ€์ž…ํ•  ๊ฐ’๋งŒ ์ž…๋ ฅ
int[][] a = {{1,2,3} , {4,5,6}};

 

 

 

 


 

 

 

 

โœ”๏ธ  2์ฐจ์› ๋น„์ •๋ฐฉ ํ–‰๋ ฌ ๋ฐฐ์—ด_ 178p

ํ–‰๋งˆ๋‹ค ์—ด์˜ ๊ธธ์ด๊ฐ€ ๋‹ค๋ฅธ 2์ฐจ์› ๋ฐฐ์—ด

 

 

• ์ด์ค‘ for๋ฌธ์„ ์ด์šฉํ•œ 2์ฐจ์› ๋ฐฐ์—ด ์›์†Œ ์ถœ๋ ฅ

int[][] a = {{1, 2}, {3, 4, 5}}

for(int i = 0; i < a.length; i++) {
	for(int j = 0; j < a[i].length; j++) {
    		System.out.println(a[i][j]);
    }
}

 

์—ด์˜ ๊ธธ์ด๊ฐ€ ๋‹ค๋ฅด๋‹ˆ ์—ด์„ ์ถœ๋ ฅํ•  ๋•Œ  j < a[i].length;๋ฅผ ์จ์ค€๋‹ค.

 

 

 

 

• ์ด์ค‘ for-each๋ฌธ์„ ์ด์šฉํ•œ 2์ฐจ์› ๋ฐฐ์—ด ์›์†Œ ์ถœ๋ ฅ

int[][] a = {{1, 2, 3}, {4, 5, 6}};

for(int[] m: a) {
	for(int n: m) {
    		System.out.println(n);
     }
}

 

 

m์€ ๋ฐฐ์—ด a์˜ ๊ฐ ํ–‰์„ ์ฐธ์กฐํ•˜๋Š” 1์ฐจ์› ๋ฐฐ์—ด์ด ๋œ๋‹ค. ( a[0]๊ณผ a[1] )
n์€ ๊ฐ ํ–‰ ์•ˆ์— ์žˆ๋Š” ์›์†Œ๋“ค์ด ๋œ๋‹ค. a[0]์˜ ์žˆ๋Š” 1,2,3์ด ๊ฐ n์ด ๋œ๋‹ค.

 

 


๐Ÿ“š ์ฑ… ์†Œ๊ฐœํ•˜๊ธฐ

๋‚ด๊ฐ€ ์‚ฌ์šฉํ•œ ์ž๋ฐ”์™„์ „์ •๋ณต ์ฑ… ๋งํฌ!
ใ„ด ๊น€๋™ํ˜• ์ง€์Œ, ์ด์ง€์Šคํผ๋ธ”๋ฆฌ์‹ฑ



: ์ถœ์ฒ˜ ์˜ˆ์Šค24 ํ™ˆํŽ˜์ด์ง€

 

 

์ด ์ฑ…์„ ๊ณ ๋ฅด๊ฒŒ ๋œ ์ด์œ ๋Š” ์นœ๊ตฌ์˜ ์ถ”์ฒœ์ด์—ˆ๋‹ค. ๊ต‰์žฅํžˆ ๊ผผ๊ผผํ•˜๊ฒŒ ์ ํ˜€์žˆ์–ด ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋‹ค๋Š” ์ด์œ ๋กœ ์นœ๊ตฌ๋Š” ์ด ์ฑ…์„ ๊ณจ๋ž๋‹ค๊ณ  ํ–ˆ๋‹ค. ๋‚˜๋„ ๊ทธ๋ž˜์„œ ๊ทธ๋ƒฅ ๋”ฐ๋ผ์ƒ€๋‹ค. ์‹ค์ œ๋กœ ์ฑ…์„ ์‚ดํŽด๋ณด๋‹ˆ ๊ต‰์žฅํžˆ ๊ผผ๊ผผํ•˜๊ฒŒ ์ •๋ฆฌ๋˜์–ด์žˆ๋‹ค. ๋‹ค๋ฅธ ์ฑ…์€ ๋ณธ ์ ์ด ์—†์–ด ๋น„๊ต๊ฐ€ ๋ถˆ๊ฐ€ํ•˜์ง€๋งŒ, ๋‚ด ์ƒ๊ฐ์œผ๋ก  ์ฒ˜์Œ ์ž๋ฐ”๋ฅผ ๊ณต๋ถ€ํ•œ๋‹ค๋ฉด ์ด ์ฑ…์„ ๊ฐ€์ง€๊ณ  ์ถฉ๋ถ„ํžˆ ๋”ฐ๋ผ๊ฐˆ ์ˆ˜ ์žˆ์„ ๋“ฏ ํ•˜๋‹ค. ๋ชจ๋‘๋“ค ํ™”์ดํŒ…!!

 

 

๐Ÿฐ


 

โœ”๏ธ  switch ์„ ํƒ ์ œ์–ด๋ฌธ_ 119p

์ ํ”„ ์œ„์น˜ ๋ณ€์ˆซ๊ฐ’์— ๋”ฐ๋ผ ํŠน์ • ์œ„์น˜(case)๋กœ ์ด๋™ํ•ด ๊ตฌ๋ฌธ์„ ์‹คํ–‰ํ•˜๋Š” ์„ ํƒ ์ œ์–ด๋ฌธ

 

 

์ผ๋ฐ˜ switch( )

int a = 2;

switch(a) {
case 1:
	System.out.println("A");
case 2:
	System.out.println("B");
case 3:
	System.out.println("C");
default:
	System.out.println("D");
}
1)  switch(a)์—์„œ a ์•ˆ์— ๋“ค์–ด๊ฐ€๋Š” ์ˆซ์ž๋Š” 2์ด๋‹ค.
2)  case 2๋กœ ์ด๋™ํ•˜์—ฌ B๋ฅผ ์ถœ๋ ฅ์‹œํ‚จ๋‹ค.
3)  break ๋ฌธ์ด ์—†์œผ๋ฏ€๋กœ case3๊ณผ default๋„ ์‹คํ–‰๋œ๋‹ค.

 

 

 

break๊ฐ€ ์žˆ๋Š” switch( )

int a = 8;

switch(a) {
case 10:
case 9:
case 8:
case 7:
	System.out.println("Pass");
    	break;
default:
	System.out.println("Fail");

 

1)  7์  ์ด์ƒ์€ Pass, ๊ทธ ์ดํ•˜๋Š” Fail์„ ์ฃผ๋Š” ์ฝ”๋“œ๋กœ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑํ–ˆ๋‹ค.
2)  switch(a)์˜ a์— ๋“ค์–ด๊ฐˆ ์ˆซ์ž๋Š” 8๋กœ case 8์— ํ•ด๋‹นํ•œ๋‹ค.
3)  ํ•˜์ง€๋งŒ case 8์— ๋ณ„๋‹ค๋ฅธ ์กฐ๊ฑด์ด ์—†์œผ๋ฏ€๋กœ case 7๋กœ ์ด๋™ํ•œ๋‹ค.
4)  Pass๋ฅผ ๊ฒฐ๊ณผ๋กœ ์ถœ๋ ฅ์‹œํ‚จ๋‹ค.
5)  break; ๋ฌธ์„ ํ†ตํ•ด ๋น ์ ธ๋‚˜๊ฐ„๋‹ค.

 

 

 

Q. if ์„ ํƒ ์ œ์–ด๋ฌธ๊ณผ switch ์„ ํƒ ์ œ์–ด๋ฌธ์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€?

A.
if ๋ฌธ์€ ์–ด๋–ค ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋Š๋ƒ์— ๋”ฐ๋ผ ์กฐ๊ฑด์‹์„ ๋ช‡ ๊ฐœ ๋น„๊ตํ•  ๊ฒƒ์ธ์ง€ ๋‹ฌ๋ผ์ ธ ๊ฐ’์— ๋”ฐ๋ผ ์†๋„๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค. ๋ฐ˜๋ฉด switch๋ฌธ์€ ๋™์ผํ•˜๊ฒŒ ํ•œ ๋ฒˆ์˜ ์ ํ”„๋งŒ์„ ์ˆ˜ํ–‰ํ•œ ํ›„ ์‹คํ–‰๋˜๋ฏ€๋กœ ๋ชจ๋“  ์ถœ๋ ฅ ์†๋„๊ฐ€ ๋™์ผํ•˜๋‹ค.

 

 

 


 

 

 

โœ”๏ธ  while ๋ฐ˜๋ณต ์ œ์–ด๋ฌธ_ 129p

์†Œ๊ด„ํ˜ธ ์•ˆ์˜ ์กฐ๊ฑด์‹์ด true์ธ ๋™์•ˆ ๋ฐ˜๋ณต์€ ์ง€์†๋œ๋‹ค. (ํšŸ์ˆ˜๊ฐ€ ์•„๋‹Œ ํŠน์ • ์กฐ๊ฑด๊นŒ์ง€ ๋ฐ˜๋ณต)

 

 

๊ธฐ๋ณธ while

int a = 0;

while(a < 10) {
	System.out.println(a);
    a++;
}

 

1)  int a = 0์€ ์ดˆ๊ธฐ์‹์ด๋‹ค.
2)  while(์กฐ๊ฑด์‹)์ด๋‹ค.
3)  System.out.println(a);๋Š” ์‹คํ–‰๊ตฌ๋ฌธ์ด๋‹ค.
4)  a++;๋Š” ์ฆ๊ฐ์‹์ด๋‹ค.

 

 

 


 

 

 

โœ”๏ธ  do - while ๋ฐ˜๋ณต ์ œ์–ด๋ฌธ_ 134p

while๋ฌธ๊ณผ ๋น„์Šทํ•œ ๋ฐ˜๋ณต ์ œ์–ด๋ฌธ, ๋ฐ˜๋ณต ์‹คํ–‰์˜ ์ˆœ์„œ์—๋งŒ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

 

 

 ๊ธฐ๋ณธ do - while

a = 0;

do {
	System.out.print(a + " ");
    	a++;
} while (a < 0);

 

1)  a = 0;์€ ์ดˆ๊ธฐ๊ฐ’์ด ๋œ๋‹ค.
2)  do ๊ด„ํ˜ธ ์•ˆ์—๋Š” ์‹คํ–‰๊ตฌ๋ฌธ๊ณผ ์ฆ๊ฐ์‹์ด ์žˆ๋‹ค.
3)  ๊ทธ ํ›„ while (์กฐ๊ฑด์‹);์ด ์žˆ๋‹ค.

 

 

Q. while๋ฌธ๊ณผ do-while๋ฌธ์˜ ์ฐจ์ด์ ์€?

A. while๋ฌธ์€ ์กฐ๊ฑด์‹์ด ๋จผ์ € ๋‚˜ํƒ€๋‚˜์žˆ๋‹ค. ์กฐ๊ฑด์ด false์ด๋ฉด ๊ด„ํ˜ธ ์•ˆ์œผ๋กœ ๋“ค์–ด๊ฐ€์ง€ ์•Š๊ณ  ๋๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ๋ฒˆ๋„ ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋Ÿฐ๋ฐ do - while๋ฌธ์€ ์กฐ๊ฑด์‹์ด ๋งˆ์ง€๋ง‰์— ์žˆ๋‹ค.  ๊ทธ๋ ‡๊ธฐ์— ํ•œ ๋ฒˆ์€ ์‹คํ–‰๋œ๋‹ค. 

 

Q. do-while๋ฌธ์„ ์“ฐ๋Š” ๊ฒฝ์šฐ๋Š” ์–ธ์ œ์ธ๊ฐ€?

A. ์กฐ๊ฑด์ด ๋งŒ์กฑํ•˜์ง€ ์•Š์•„๋„ ๋ฌด์กฐ๊ฑด ํ•œ ๋ฒˆ์€ ๋Œ์•„์•ผํ•˜๋Š” ๊ฒฝ์šฐ do-while๋ฌธ์„ ์“ด๋‹ค. ์˜ˆ์‹œ๋กœ ๋ฉ”๋‰ด๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ์œ ํšจํ•œ ์„ ํƒ์„ ํ•  ๋•Œ๊นŒ์ง€ ๋– ์•ผํ•˜๋Š” ๊ฒฝ์šฐ ํ˜น์€ ๊ฒŒ์ž„์ด ํ•œ ๋ฒˆ์€ ๋ฌด์กฐ๊ฑด ์‹คํ–‰๋˜๊ณ  ๊ทธ ํ›„ ์‚ฌ์šฉ์ž๊ฐ€ ์„ ํƒ์‹œ ๋‹ค์‹œ ์‹คํ–‰๋˜๋Š” ๊ฒฝ์šฐ์—๋„ ์†ํ•œ๋‹ค. 

 

 

 


 

 

 

โœ”๏ธ  break ์ œ์–ด ํ‚ค์›Œ๋“œ_ 139p

if๋ฌธ์„ ์ œ์™ธํ•œ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ค‘๊ด„ํ˜ธ๋ฅผ ํƒˆ์ถœํ•˜๋Š” ์ œ์–ดํ‚ค์›Œ๋“œ

 

 

 

๊ฐ„๋‹จํ•œ break 

for (int i = 0; i <10; i++) {
	System.out.println(i);
  	break;
}

 

1)  i =0 ์ผ ๋•Œ ์‹คํ–‰๋œ๋‹ค.
2)  System.out.println(i);์— 0์ด ์ถœ๋ ฅ๋œ๋‹ค.
3)  ์ฆ๊ฐ๋˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ์•„๋ž˜์ค„์— ์žˆ๋Š” break;๋ฅผ ๊ด„ํ˜ธ ๋ฐ–์œผ๋กœ  ๋‚˜๊ฐ„๋‹ค. 

 

 

 

 

if๋ฌธ ์•ˆ์— ์žˆ๋Š” break

for(int i = 0; i < 10; i++) {
	if(i == 5) {
    	break;
    }
    System.out.println(i);
}

 

1)  if( i == 5)์— ๋งž์ถฐ i๊ฐ€ 5๊ฐ€ ๋  ๋•Œ๊นŒ์ง€ i๋Š” ์ฆ๊ฐ€ํ•œ๋‹ค.
2)  i๊ฐ€ 5๊ฐ€ ๋˜๋ฉด ๋ฐ˜๋ณต๋ฌธ์—์„œ ๋น ์ ธ๋‚˜์˜จ๋‹ค.
3)  system.out.println(i);๊ฐ€ ์‹คํ–‰๋œ๋‹ค. 
4)  if๋ฌธ ์ž์ฒด๊ฐ€ break๋ฅผ ์‹คํ–‰ํ•  ์กฐ๊ฑด๋ฌธ์ด ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 

 

 

 

๋ ˆ์ด๋ธ”์„ ์ด์šฉํ•œ break

out:
for(int i = 0; i < 10; i++) {
	for(int j = 0; j <10; j++) {
    		if(j == 3)
        		break out;
        	 System.out.println(i + "," + j);
     }
}

 

1)  ์ด์ค‘ for๋ฌธ์œผ๋กœ ๋“ค์–ด๊ฐ„๋‹ค.
2)  if๋ฌธ์˜ ์กฐ๊ฑด์— ๋งž์ถฐ 3์ด ๋˜๋ฉด break๊ฐ€ ์‹คํ–‰๋œ๋‹ค.
3)  for๋ฌธ์„ ์™„์ „ํžˆ ๋ฒ—์–ด๋‚˜๊ฒŒ ๋œ๋‹ค.

 

 

 

 


 

 

 

 

โœ”๏ธ  continue ์ œ์–ด ํ‚ค์›Œ๋“œ_ 143p

๋‹ซํžŒ ์ค‘๊ด„ํ˜ธ ์—ญํ• ์„ ํ•˜๋Š” ์ œ์–ดํ‚ค์›Œ๋“œ

 

 

 

if ๋ฌธ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋œ continue

for(int i = 0; i < 10; i++) {
	if(i == 5) {
    	continue;
    }
    System.out.println(i);
}

 

1)  if๋ฌธ์˜ ์กฐ๊ฑด์— ๋งž์ถฐ i๊ฐ€ 5๊ฐ€ ๋˜์—ˆ๋‹ค.
2)  countinue์— ๋งž์ถฐ i == 5์— ๋Œ€ํ•œ ์ถœ๋ ฅ๊ฐ’์€ ๋„˜์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.
3)  i์˜ ์ถœ๋ ฅ๊ฐ’์œผ๋กœ๋Š” 0,1,2,3,4,6,7,8,9 ๊นŒ์ง€ ๋‚˜์˜ค๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.

 

 

 

<์ถœ์ฒ˜ ์ธํ”„๋Ÿฐ>

 


 

 

 

๋งŒ์ผ ๊ฒฐ๊ณผ๊ฐ’์ด ๊ฐ•์˜์™€ ๋‹ค๋ฅด๊ฒŒ ๋‚˜์˜จ๋‹ค๋ฉด,

AppConfig์˜ MemberRepository ์•ž์— static์ด ๋ถ™์–ด์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋ผ!

 

 

 

 

 

Q. ์™œ static์„ ์“ฐ๋ฉด ์ธ์Šคํ„ด์Šค ๊ฐ’์ด ๋‹ค๋ฅด๊ฒŒ ํ• ๋‹น๋ ๊นŒ?

 

A. static์„ ๋ถ™์ด๊ฒŒ ๋˜๋ฉด spring์˜ bean ๋ผ์ดํ”„ ์‚ฌ์ดํด ๊ด€๋ฆฌ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ™์€ ํƒ€์ž…์˜ bean์ด ์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค๋กœ ์ƒ์„ฑ๋˜๊ฒŒ ๋œ๋‹ค.

 

 

 


 

 

๐Ÿ‘๏ธ‍๐Ÿ—จ๏ธ  static ์ด๋ž€?

 

1. ํด๋ž˜์Šค ๋ ˆ๋ฒจ์˜ ๋ณ€์ˆ˜๋‚˜ ๋ฉ”์†Œ๋“œ์— ์‚ฌ์šฉ๋˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด ์ƒ์„ฑ ์—†์ด ํ•ด๋‹น ๋ณ€์ˆ˜๋‚˜ ๋ฉ”์†Œ๋“œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2. static ๋ฉค๋ฒ„๋Š” ํด๋ž˜์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ๋  ๋•Œ ๋‹จ ํ•œ ๋ฒˆ๋งŒ ์ƒ์„ฑ๋˜๋ฉฐ, ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๊ฐ€ ๊ณต์œ ํ•˜๋Š” ๊ณตํ†ต์˜ ์ž์›์ด ๋ฉ๋‹ˆ๋‹ค.

3. ํด๋ž˜์Šค ๋‹จ์œ„๋กœ ๊ด€๋ฆฌ๋˜์–ด ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ค„์ด๊ณ , ๊ฐ์ฒด ์ƒ์„ฑ ์˜ค๋ฒ„ํ—ค๋“œ ์—†์ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

- Static ์ถœ์ฒ˜

 

์ž๋ฐ”์˜ ์Šคํƒœํ‹ฑ(static) ํ‚ค์›Œ๋“œ ์ดํ•ดํ•˜๊ธฐ

์ž๋ฐ”์˜ ์Šคํƒœํ‹ฑ(static) ํ‚ค์›Œ๋“œ์˜ ์—ญํ• , ์‚ฌ์šฉ ๋ฐฉ๋ฒ•, ๊ทธ๋ฆฌ๊ณ  ์‚ฌ์šฉ ์‹œ ๊ณ ๋ คํ•ด์•ผ ํ•  ์ฃผ์˜์ ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

f-lab.kr

 

 

 

 

 

๐Ÿ‘๏ธ‍๐Ÿ—จ๏ธ  static์ด spring์˜ ๋ผ์ดํ”„ ์‚ฌ์ดํด์„ ์–ด๋–ป๊ฒŒ ๊ผฌ๋Š” ๊ฒƒ์ธ๊ฐ€?

(์ •ํ™•ํ•˜๊ฒŒ ์ดํ•ดํ•œ ๊ฑด ์•„๋‹™๋‹ˆ๋‹ค๐Ÿฅฒ)

 

 

1. ์›๋ž˜ spring์˜ ๋ผ์ดํ”„ ์‚ฌ์ดํด์€ @Configuration ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  @bean ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์•ผํ•œ๋‹ค.

 

2. ๊ทธ๋Ÿฐ๋ฐ static์„ bean ๋ฉ”์„œ๋“œ์— ์ •์˜ํ•˜๊ฒŒ ๋˜๋ฉด, static์˜ ํŠน์„ฑ์ธ ๊ฐ์ฒด ์ƒ์„ฑ ์—†์ด ํ•ด๋‹น ๋ณ€์ˆ˜๋‚˜ ๋ฉ”์†Œ๋“œ์— ์ ‘๊ทผํ•˜๊ธฐ ๋•Œ๋ฌธ์—  1๋ฒˆ์˜ ์‚ฌ์ดํด์„ ๋”ฐ๋ผ๊ฐ€์ง€ ์•Š๊ฒŒ ๋œ๋‹ค. 

 

3. ๊ทธ๋ ‡๊ธฐ์— ๋ฉ”์„œ๋“œ๊ฐ€ ํด๋ž˜์Šค ๋ ˆ๋ฒจ์—์„œ ํ˜ธ์ถœ๋˜์–ด(static์˜ ํŠน์ง•) @Configuration์˜ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ์—†์ด๋„ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋˜๊ณ  spring์˜ ๋ผ์ดํ”„ ์‚ฌ์ดํด์„ ๊นจ๊ฒŒ ๋งŒ๋“ค์–ด ์‹ฑ๊ธ€ํ†ค ๋ณด์žฅ์„ ํ•ด์ฃผ์ง€ ๋ชปํ•˜๊ฒŒ ๋œ๋‹ค.

 

 

 

 


 

 

 

๐Ÿ‘๏ธ‍๐Ÿ—จ๏ธ  static๊ณผ spring bean์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€?

 

  static bean
๊ณตํ†ต์  • ๊ณต์œ ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค = static์€ ํด๋ž˜์Šค์˜ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๋ฅผ ๊ณต์œ    /    bean์€ ์Šคํ”„๋ง์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ†ตํ•ด ๊ณต์œ 
 
(์–ด๋””์„œ๋“ ์ง€ ๊ทธ ์ธ์Šคํ„ด์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š”) ์ „์—ญ์ ์ธ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 

๋ผ์ดํ”„์‚ฌ์ดํด์ด ์กด์žฌํ•œ๋‹ค = static์€ ํ”„๋กœ๊ทธ๋žจ ์‹œ์ž‘๋ถ€ํ„ฐ ๋๋‚ ๋•Œ๊นŒ์ง€  /   bean์€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด 
๋‹ค๋ฅธ์  static์€ ์˜์กด์„ฑ ์ฃผ์ž…์ด ์•ˆ๋œ๋‹ค.
   bean์€ ์˜์กด์„ฑ ์ฃผ์ž…์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

static์€ ์ฃผ๋กœ ์–ด๋–ค ์ƒํƒœ๋‚˜ ๋™์ž‘์„ ๊ณต์œ ํ•˜๊ธฐ ์œ„ํ•ด 
   bean์€ ๋ผ์ดํ”„์‚ฌ์ดํด ๊ด€๋ฆฌ, ์˜์กด์„ฑ์ฃผ์ž…, ํšจ์œจ์ ์ธ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

static์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์„ ์–ธ
   bean์€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ๊ด€๋ฆฌ.
 

 

 

- static๊ณผ bean์˜ ๊ณตํ†ต์ ๊ณผ ์ฐจ์ด์  ์ถœ์ฒ˜

 

[Spring] Static ๊ฐ์ฒด์™€ Bean์˜ ์ฐจ์ด

์˜๋ฌธ์  ํ”„๋กœ์ ํŠธ ์ง„ํ–‰ ์ค‘ ์ƒ์ˆ˜ ํด๋ž˜์Šค๋ฅผ ์„ ์–ธํ•  ์ผ์ด ์ƒ๊ฒผ๋Š”๋ฐ, ๋ฉ”๋ชจ๋ฆฌ์— ๋ฏธ๋ฆฌ ์˜ฌ๋ ค๋‘๊ณ  ๋‹ค๋ฅธ ํด๋ž˜์Šค์—์„œ ์ƒ์ˆ˜๋ฅผ ๊ฐ€์ ธ์™€์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ƒ์ˆ˜ ํด๋ž˜์Šค๋ฅผ static final์„ ์‚ฌ์šฉํ•ด์„œ ๊ตฌํ˜„ํ•˜์˜€๋‹ค. ๊ทธ

bbogle2.tistory.com

 

 

+ Recent posts