ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ์ฐธ์กฐ์ž๋ฃŒํ˜• - static ๋ฉ”์†Œ๋“œ์™€ ์ผ๋ฐ˜ ๋ฉ”์†Œ๋“œ์˜ ์ฐจ์ด, static ๋ธ”๋ก, Pass by value, Pass by reference, ํŠน์ดํ•œ ๋งค๊ฐœ ๋ณ€์ˆ˜
    ์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ 2022. 3. 22. 00:00

    ๋ด„์„ ๋งž์•„ ๋ฐ”๊ฟ”๋ดค์Šต๋‹ˆ๋‹ค :)

     

     

    ์•ˆ๋…•ํ•˜์„ธ์š”,

    ์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” ์ฐธ์กฐ์ž๋ฃŒํ˜•์— ๋Œ€ํ•ด ์ด์–ด์„œ ๊ณ„์† ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

     

    โ–ก ๊ธฐ๋ณธ์ƒ์„ฑ์ž
    โ–ก ๋ฉ”์†Œ๋“œ overloading
    โ–ก return (๋ฉ”์†Œ๋“œ์—์„œ ๊ฐ’ ๋„˜๊ฒจ์ฃผ๊ธฐ)
    โ–ฃ static ๋ฉ”์†Œ๋“œ์™€ ์ผ๋ฐ˜ ๋ฉ”์†Œ๋“œ์˜ ์ฐจ์ด
    โ–ฃ static ๋ธ”๋ก
    โ–ฃ Pass by value, Pass by reference
    โ–ฃ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•˜๋Š” ํŠน์ดํ•œ ๋ฐฉ๋ฒ•

     

    ์ง€๋‚œ ์‹œ๊ฐ„๊นŒ์ง€๋Š” ์ „์ฒด ํ•ญ๋ชฉ ์ค‘์—์„œ ์œ„์˜ 3๊ฐ€์ง€๋ฅผ ๋ณด์•˜๊ณ , ์ง€๊ธˆ๋ถ€ํ„ฐ๋Š” ์•„๋ž˜์— 4๊ฐ€์ง€ ์ฒดํฌ ๋œ ์ฃผ์ œ๋ฅผ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. :)

     

    ์ง€๋‚œ ๊ฒŒ์‹œ๊ธ€์€ ์•„๋ž˜๋ฅผ ํด๋ฆญํ•ด ์ฃผ์„ธ์š”!

     

    https://mong-dev.tistory.com/12
     

    ์ฐธ์กฐ ์ž๋ฃŒํ˜• - ๊ธฐ๋ณธ ์ƒ์„ฑ์ž, ์˜ค๋ฒ„๋กœ๋”ฉ(overloading), return

    ์•ˆ๋…•ํ•˜์„ธ์š”, ์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” ์ฐธ์กฐ์ž๋ฃŒํ˜•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ๋‚ด์šฉ์€ '์ž๋ฐ”์˜ ์‹ ' chapter8๋ฅผ ๊ธฐ์ดˆ๋กœ ์ž‘์„ฑํ–ˆ์œผ๋ฉฐ, ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ œ ๋‚˜๋ฆ„์˜ ์š”์•ฝ ์ •๋ฆฌ๋ฅผ ํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๊ณต๋ถ€๋ฅผ ์œ„ํ•ด

    mong-dev.tistory.com

     

     

     

    static ๋ฉ”์†Œ๋“œ์™€ ์ผ๋ฐ˜ ๋ฉ”์†Œ๋“œ์˜ ์ฐจ์ด


    ๊ฐ„๋‹จํ•˜๊ฒŒ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด์„œ ํ•ต์‹ฌ๋งŒ ์ •๋ฆฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. 

     

    public class ReferenceStatic {
    	
        //static ๋ฉ”์†Œ๋“œ๋Š” ํด๋ž˜์Šค ๋ณ€์ˆ˜๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    	static String name = "Name";
    	//String name = "Min";
        //--> ์ปดํŒŒ์ผ ์—๋Ÿฌ(non-static variable name cannot be referenced from static context)
    
    	public static void main(String args[]) {
        	ReferenceStatic.staticMethod1(); //๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœ
        }
    	
        //์œ„์น˜ : ๋ฆฌํ„ดํƒ€์ž… ์•ž์— static ์„ ์–ธ
        public static void staticMethod1() {
        	System.out.println("This is a staticMethod.");
        }
        
        
        public static void staticMethod2() {
        	System.out.println(name);
        }
    }

     

    ์œ„์˜ ์ฝ”๋“œ๋ฅผ ์ •๋ฆฌํ•˜์ž๋ฉด,

    1. static ๋ฉ”์†Œ๋“œ๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ ์„œ๋„ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (main ์ฐธ๊ณ )

    2. static ๋ฉ”์†Œ๋“œ๋Š” ํด๋ž˜์Šค ๋ณ€์ˆ˜๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. (StaticMethod2 ์ฐธ๊ณ  : ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋กœ ์„ ์–ธํ•˜๋ฉด ์ปดํŒŒ์ผ ์—๋Ÿฌ๊ฐ€ ๋‚œ๋‹ค --> ๋ฉ”์†Œ๋“œ์—์„œ static ์„ ์–ธ์„ ์ œ๊ฑฐํ•˜๋˜์ง€, (๋Œ€์‹  ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ ํ›„ ํ˜ธ์ถœํ•ด์•ผํ•œ๋‹ค.) ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜์— static์„ ๋ถ™์—ฌ ํด๋ž˜์Šค ๋ณ€์ˆ˜๋กœ ๋ฐ”๊ฟ”์ค˜์•ผํ•œ๋‹ค.)

     

     

    ๊ทธ๋Ÿฐ๋ฐ, ๊ทธ๋ ‡๋‹ค๊ณ  ํ•ด์„œ ์•„๋ฌด๋•Œ๋‚˜ ํด๋ž˜์Šค ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•ด์„œ ์‚ฌ์šฉํ•˜๋ฉด ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด์„œ ํ•ด๋‹น ๋‚ด์šฉ์€ ๋งˆ๋ฌด๋ฆฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค :)

     

    public class ReferenceStaticVariable {
      
      static String name;
      
      public ReferenceStaticVariable() {}
      
      public ReferenceStaticVariable(String name) {
        this.name = name;
      }
      
      public static void main(String args[]) {
        ReferenceStaticVariable reference = new ReferenceStaticVariable();
        reference.checkName();
      }
      
      public void checkName() {
        ReferenceStaticVariable reference1 = new ReferenceStaticVariable("Sangmin");
        System.out.println(reference1.name);
        ReferenceStaticVariable reference2 = new ReferenceStaticVariable("Sungchoon");
        System.out.println(reference1.name);
        
      }
      
    }

     

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

     

    ์—ฌ๊ธฐ์„œ reference1๊ณผ reference2๋ผ๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ ์žˆ๋Š”๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๊ณ , ๊ฐ์ž ๋‹ค๋ฅธ Sangmin๊ณผ Sungchoon์ด๋ผ๋Š” name๊ฐ’์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ํ•˜์—ฌ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ์ƒ์„ฑ์ž๋ฅผ ๋ณด์‹œ๋ฉด, ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์€ name์„ ํด๋ž˜์Šค ๋ณ€์ˆ˜์ธ name์— ์ €์žฅ์„ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ this๋Š” "์ด ๊ฐ์ฒด"๋ผ๋Š” ์˜๋ฏธ๋กœ ๋™์ผํ•œ ์ด๋ฆ„์„ ๊ฐ€์ง„ ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜ ํ˜น์€ ํด๋ž˜์Šค ๋ณ€์ˆ˜๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์“ฐ๋Š” ํ‘œํ˜„์ž…๋‹ˆ๋‹ค. ์ฆ‰ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ name์ด ์•„๋‹Œ ์ด ๊ฐ์ฒด์˜ name์ด๋ผ๊ณ  ๋งํ•ด์ฃผ๊ณ  ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค์‹œ checkName()์œผ๋กœ ๋Œ์•„์™€์„œ ๋ณด์‹œ๋ฉด, ์ถœ๋ ฅ๋ถ€๋ถ„์—์„œ ์ฒ˜์Œ์— reference1์˜  name์„ ํ˜ธ์ถœํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๊ณ ๋‚˜์„œ, reference2๋ฅผ ์ƒ์„ฑ ํ›„, ๋‹ค์‹œ reference1์˜ name์„ ์ถœ๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด์—๋Š” ์ด ๋‘ ๊ฐ์ฒด๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— reference2๊ฐ€ ์ƒ์„ฑ๋˜๋”๋ผ๋„, reference1์˜ name์€ ๊ทธ๋Œ€๋กœ Sangmin์ด์–ด์•ผ๊ฒ ์ง€์š”. ๊ทธ๋Ÿฐ๋ฐ ํ•ด๋‹น ํ˜ธ์ถœ์˜ ๊ฒฐ๊ณผ๋Š” Sangmin๊ณผ Sungchoon์ด ๋ฉ๋‹ˆ๋‹ค.

     

    ์™œ๊ทธ๋Ÿด๊นŒ์š”?

     

    ์™œ๋ƒํ•˜๋ฉด ReferenceStaticVariable์˜ name์ด๋ผ๋Š” ๋ณ€์ˆ˜๊ฐ€ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๊ฐ€ ์•„๋‹Œ static์œผ๋กœ ์„ ์–ธํ•œ ํด๋ž˜์Šค ๋ณ€์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ํด๋ž˜์Šค ๋ณ€์ˆ˜๊ฐ€ ๋˜๋ฉด, ๋ชจ๋“  ๊ฐ์ฒด์—์„œ ํ•˜๋‚˜์˜ ๊ฐ’์„ ๋ฐ”๋ผ๋ณด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ static์„ ์•„๋ฌด๋•Œ๋‚˜ ๋ถ™์ด๋ฉด ์œ„ํ—˜ํ•  ์ˆ˜ ๋„ ์žˆ๊ฒ ์Šต๋‹ˆ๋‹ค. ReferenceStaticVariable์˜ name ์„ ์–ธ๋ถ€์—์„œ static์„ ์ œ๊ฑฐํ•˜๊ณ  ์ปดํŒŒ์ผ ํ›„ ์‹คํ–‰ํ•ด๋ณด๋ฉด Sangmin Sangmin์œผ๋กœ ์šฐ๋ฆฌ๊ฐ€ ์›๋ž˜ ์ƒ๊ฐํ•˜๋˜ ๋‹ต์ด ๋‚˜์˜ฌ ๊ฒƒ์ž…๋‹ˆ๋‹ค. 

     

     

     

    static ๋ธ”๋ก


    static์„ ํŠน์ดํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ํ•œ๊ฐ€์ง€ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์•„๋ž˜์™€ ๊ฐ™์ด static { ... } ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ธ๋ฐ์š”, ์•„๋ž˜ ์ฝ”๋“œ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉฐ static ๋ธ”๋ก์— ๋Œ€ํ•ด ์งง๊ฒŒ ์š”์•ฝํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

     

    public class StaticBlock {
      
      //ํด๋ž˜์Šค ๋ณ€์ˆ˜
      static int data=1;
      
      //์ƒ์„ฑ์ž
      public StaticBlock() {
        System.out.println("StaticBlock Constructor.");
      }
      
      //static๋ธ”๋ก
      static {
        System.out.println("*** First static block. ***");
        data = 3;
      }
      
       //static๋ธ”๋ก
      static {
        System.out.println("*** Second static block. ***");
        data = 5;
      }
      
      //static ๋ฉ”์†Œ๋“œ
      public static int getData() {
        return data;
      }
      
    }
    public class StaticBlockCheck{
     
      public static void main (String[] args) {
        StaticBlockCheck check = new StaticBlockCheck();
        //check.makeStaticBlockObject();
        check.makeStaticBlockObjectWithData();
        
      }
      
      public void makeStaticBlockObject() {
        System.out.println("Creating block1");
        StaticBlock block1 = new StaticBlock();
        System.out.println("Created block1");
        System.out.println("--------------------");
        System.out.println("Creating block2");
        StaticBlock block2 = new StaticBlock();
        System.out.println("Created block2");
        
      }
      
      public void makeStaticBlockObjectWithData() {
        System.out.println("data=" + StaticBlock.getData());
        StaticBlock block1 = new StaticBlock();
        block1.data = 1;
        System.out.println("---------------------");
        StaticBlock block2 = new StaticBlock();
        block2.data = 2;
        System.out.println("data=" + StaticBlock.getData());
      }
      
    }

     

    makeStaticBlockObject()๋ฅผ ์ถœ๋ ฅํ•œ ๊ฒฐ๊ณผ :

    Creating block1
    *** First static block. ***
    *** Second static block.
    *** StaticBlock Constructor.
    Created block1
    --------------------
    Creating block2
    StaticBlock Constructor.
    Created block2

     

     

    makeStaticBlockObjectWithData()๋ฅผ ์ถœ๋ ฅํ•œ ๊ฒฐ๊ณผ :

    *** First static block. ***
    *** Second static block. ***
    data=5
    StaticBlock Constructor.
    ---------------------
    StaticBlock Constructor.
    data=2

     

    ์ •๋ฆฌ ์š”์•ฝ์„ ์œ„ํ•œ ๊ธ€์ด๋ผ ์ฝ”๋“œ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•ต์‹ฌ๋งŒ ์š”์•ฝํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

    ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์ž…๋ ฅํ•ด๋ณด์‹œ๊ณ , ์‹คํ–‰ํ•ด๋ณด์‹œ๋ฉด ์ดํ•ด๊ฐ€ ์‰ฌ์šธ๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค :)

     

    1. static ๋ธ”๋ก์€ ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋‹ค.
    2. static ๋ธ”๋ก์€ ์„ ์–ธํ•œ ์ˆœ์„œ๋Œ€๋กœ ๋ธ”๋ก๋“ค์ด ์ฐจ๋ก€๋Œ€๋กœ ํ˜ธ์ถœ ๋œ๋‹ค.
    3. static ๋ธ”๋ก์€ ๋”ฑ ํ•œ ๋ฒˆ์”ฉ๋งŒ ํ˜ธ์ถœ๋œ๋‹ค.
    4. static ๋ธ”๋ก์€ ์ƒ์„ฑ์ž๊ฐ€ ํ˜ธ์ถœ ๋˜๊ธฐ ์ „์— ํ˜ธ์ถœ๋œ๋‹ค.
    5. static ๋ธ”๋ก ์•ˆ์—์„œ๋Š” staticํ•œ ๊ฒƒ๋“ค๋งŒ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค. (์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜X, ํด๋ž˜์Šค ๋ณ€์ˆ˜O)
    6. static ๋ธ”๋ก์€ ํด๋ž˜์Šค ๋‚ด, ๋ฉ”์†Œ๋“œ ๋ฐ–์—์„œ ์„ ์–ธํ•œ๋‹ค.

     

    3๋ฒˆ์˜ ๊ฒฐ๊ณผ์ฒ˜๋Ÿผ static ๋ธ”๋ก์€ ๊ฐ์ฒด๋Š” ์—ฌ๋Ÿฌ ๊ฐœ ์ƒ์„ฑํ•˜์ง€๋งŒ, ํ•œ ๋ฒˆ๋งŒ ํ˜ธ์ถœ๋˜์–ด์•ผ ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

     

     

     

    Pass by Value, Pass by reference


     

    ๋‘ ๊ฐ€์ง€ ๊ฐœ๋…์˜ ํ•ต์‹ฌ ์ฐจ์ด๋ฅผ ํ‘œ๋กœ ๊ฐ„๋‹จํžˆ ์ •๋ฆฌํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

      Pass by Value Pass by reference
    ๋ˆ„๊ฐ€ ๊ธฐ๋ณธ ์ž๋ฃŒํ˜• ์ฐธ์กฐ ์ž๋ฃŒํ˜•
    ๋ฌด์—‡์„ ์ „๋‹ฌ ๊ฐ’ ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ฐธ์กฐ
    ํ˜ธ์ถœ ์ดํ›„ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ ๋˜์ง€ ์•Š๋Š”๋‹ค. ๋งŒ์•ฝ ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ๋ฐ›์€ ์ฐธ์กฐ ์ž๋ฃŒํ˜• ์•ˆ์— ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ๋ณ€๊ฒฝํ•  ๊ฒฝ์šฐ, ํ˜ธ์ถœํ•œ ์ฐธ์กฐ ์ž๋ฃŒํ˜• ์•ˆ์— ์žˆ๋Š” ๊ฐ์ฒด๋Š” ํ˜ธ์ถœ๋œ ๋ฉ”์†Œ๋“œ์—์„œ ๋ณ€๊ฒฝํ•œ ๋Œ€๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ”๋€๋‹ค.

     

     

    ์˜ˆ์‹œ๋กœ ๋ณด๊ณ  ์‹ถ์œผ์‹  ๋ถ„๋“ค์„ ์œ„ํ•ด, ์•„๋ž˜์˜ ์ฝ”๋“œ์™€ ์ฃผ์„์„ ์ฐธ๊ณ ํ•˜์„ธ์š” :)

    public class ReferencePass {
      
      public static void main(String args[]) {
        ReferencePass reference = new ReferencePass();
        //reference.callPassByValue();    
        reference.callPassByReference();  
      }
      
      public void callPassByValue() {
        int a = 10;
        String b = "b";
        System.out.println("before passByValue");
        System.out.println("a=" + a);
        System.out.println("b=" + b);
        //pass by value : ๊ฐ’๋งŒ ์ „๋‹ฌํ•œ๋‹ค. --> ๊ธฐ๋ณธ์ฐธ์กฐํ˜•!
        //์›๋ž˜์˜ a,b๋Š” ๊ทธ๋Œ€๋กœ ๋‘๊ณ , ํ•ด๋‹นํ•˜๋Š” ๊ฐ’๋งŒ ์ „๋‹ฌํ•œ๋‹ค.
        passByValue(a,b);
        System.out.println("after passByValue");
        System.out.println("a=" + a);
        System.out.println("b=" + b);
      }
      
      public void passByValue(int a, String b) {
        a=20;
        b="z";
        System.out.println("in passByValue");
        System.out.println("a=" + a);
        System.out.println("b=" + b);
        
      }
      
      
      public void callPassByReference() {
       MemberDTO member = new MemberDTO("Sangmin");
       System.out.println("before passByReference");
       System.out.println("member.name=" + member.name);
       passByReference(member);
       System.out.println("after passByReference");
       System.out.println("member.name=" + member.name);
       
      }
      
      public void passByReference(MemberDTO member) {
      //๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ๋ฐ›์€ ์ฐธ์กฐ ์ž๋ฃŒํ˜• ์•ˆ์— ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ๋ณ€๊ฒฝํ•  ๊ฒฝ์šฐ,
      //ํ˜ธ์ถœํ•œ ์ฐธ์กฐ ์ž๋ฃŒํ˜• ์•ˆ์— ์žˆ๋Š” ๊ฐ์ฒด๋Š” ํ˜ธ์ถœ๋œ ๋ฉ”์†Œ๋“œ์—์„œ ๋ณ€๊ฒฝํ•œ ๋Œ€๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ”๋€๋‹ค.
        member.name = "SungChoon";
        System.out.println("in passByReference");
        System.out.println("member.name=" + member.name);
        
      }
      
    }

     

    ์ฐธ๊ณ ๋กœ, String์€ b="z"; ์ด๋Ÿฐ์‹์œผ๋กœ ๋”ฐ์˜ดํ‘œ๋กœ ๊ฐ’์„ ํ• ๋‹นํ•˜๋ฉด b=new String("z"); ์ด๋ ‡๊ฒŒ new๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. String์ด ์•„๋‹Œ ๋‹ค๋ฅธ ์ฐธ์กฐ ์ž๋ฃŒํ˜•๋“ค๋„ ์ด์ฒ˜๋Ÿผ ํ˜ธ์ถœ๋œ ๋ฉ”์†Œ๋“œ์—์„œ ๋‹ค๋ฅธ ๊ฐ์ฒด๋กœ ๋Œ€์ฒดํ•˜์—ฌ ์ฒ˜๋ฆฌํ•˜๋ฉด ๊ธฐ์กด ๊ฐ’์€ ๋ฐ”๋€Œ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 

     

    ์ •๋ฆฌ๋ฅผ ํ•˜์ž๋ฉด,

    - ๋ชจ๋“  ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•์€ Pass by Value์ด๋‹ค.
    - ์ฐธ์กฐ ์ž๋ฃŒํ˜•์€ ๊ฐ’์ด ์•„๋‹Œ ์ฐธ์กฐ๊ฐ€ ์ „๋‹ฌ๋˜๋Š” Pass by Reference์ด๋‹ค.

     

     

    ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•˜๋Š” ํŠน์ดํ•œ ๋ฐฉ๋ฒ•


    ์ œ๋ชฉ์—์„œ ํŠน์ดํ•œ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ํ–ˆ๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ๋Š” "๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ๋ช‡ ๊ฐœ๊ฐ€ ๋ ์ง€, ํ˜ธ์ถœํ•  ๋•Œ๋งˆ๋‹ค ๋ฐ”๋€Œ๋Š” ๊ฒฝ์šฐ"์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋ฅผ ํ•ฉ๋‹ˆ๋‹ค.

     

    ์ž๋ฐ”์—์„œ๋Š” ์ž„์˜ ๊ฐœ์ˆ˜์˜ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ๋„˜๊ฒจ์ค„ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๋Š”๋ฐ, "ํƒ€์ž…...๋ณ€์ˆ˜๋ช…"์œผ๋กœ ์„ ์–ธํ•ด์ฃผ๋ฉด๋ฉ๋‹ˆ๋‹ค.

     

    public void calculateNumbers(int...numbers) {
    	int total=0;
        //numbers๋ฅผ ๋ฐฐ์—ด๋กœ ์ธ์‹
        for(int number:numbers) {
        	total+=number;
        }
        System.out.println("Total=" + total);
    }

     

     

    ์œ„์˜ ์ฝ”๋“œ ์ฒ˜๋Ÿผ, ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•ด์ฃผ๋ฉด numbers๋ฅผ ๋ฐฐ์—ด๋กœ ์ธ์‹ํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ถœ์€ calculateNumbers(1,2,3,4,5); ์ด๋Ÿฐ์‹์œผ๋กœ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  calculateNumbers(1); calculateNumbers(1,2,3,4,5,6,7,8); ์ด๋ ‡๊ฒŒ๋„ ๋‹ค ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

     

     

    ์ฆ‰, ํ•„์š”์— ๋”ฐ๋ผ์„œ ๋งค๊ฐœ ๋ณ€์ˆ˜ ์ˆ˜๋ฅผ ์ •ํ•˜๊ธฐ ์• ๋งคํ•œ ๊ฒฝ์šฐ ํƒ€์ž…๊ณผ ๋ณ€์ˆ˜๋ช… ์‚ฌ์ด์— ์  ์„ธ๊ฐœ๋ฅผ ์—ฐ๋‹ฌ์•„ ์ž…๋ ฅํ•ด์ฃผ๋ฉด ๋˜๋Š”๋ฐ, ์ด๋•Œ ์ฃผ์˜ํ•ด์•ผํ•  ๊ฒƒ์€ ์ ์˜ ์ค‘๊ฐ„์— ๊ณต๋ฐฑ์ด ๋“ค์–ด๊ฐ€๋ฉด ์•ˆ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ํ•˜๋‚˜์˜ ๋ฉ”์†Œ๋“œ์—์„œ๋Š” ํ•œ ๋ฒˆ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ณ , ์—ฌ๋Ÿฌ ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋‹ค๋ฉด, ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ์„ ์–ธํ•ด์•ผ๋งŒ ํ•ฉ๋‹ˆ๋‹ค.

     

    ์ด ๊ฒƒ์˜ ๊ฐ€์žฅ ์‰ฌ์šด ์˜ˆ๋Š” printf() ๋ฉ”์†Œ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌด์—‡์ธ์ง€ ์•„์‹œ๊ฒ ์ฃ ?

    printf(String format, Object... args) 

     

    ๊ฐ€์žฅ ์•ž์—๋Š” ์ถœ๋ ฅํ•˜๋Š” ํฌ๋งท์„ ์„ ์–ธํ•˜๊ณ , ๊ทธ๋’ค์—๋Š” Object๋ผ๋Š” ํƒ€์ž…์˜ args๋ผ๋Š” ๊ฒƒ์„ ์ž„์˜ ๊ฐœ์ˆ˜๋งŒํผ ๋ฐ›์Šต๋‹ˆ๋‹ค. 

     

     

     

    ์ด๋ ‡๊ฒŒ ์ฐธ์กฐ ์ž๋ฃŒํ˜•์˜ ์ค‘์‹ฌ์„ ์ด๋ฃจ๋Š” ์ƒ์„ฑ์ž์™€ ๋ฉ”์†Œ๋“œ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค.

     

     

    ์ €๋„ ๊ณต๋ถ€ํ•˜๋ฉด์„œ, ์ž˜ ๋ชจ๋ฅด๊ฑฐ๋‚˜ ์• ๋งคํ•œ ๋ถ€๋ถ„๋“ค์ด ์žˆ์—ˆ๋˜๊ฒƒ ๊ฐ™์€๋ฐ, ์ด๋ฒˆ ๊ธฐํšŒ๋ฅผ ํ†ตํ•ด ์ข€๋” ๊ธฐ์ดˆ๋ฅผ ํƒ„ํƒ„ํžˆ ํ•˜๋Š” ๊ณ„๊ธฐ๊ฐ€ ๋˜์—ˆ๋˜๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. 

     

     

    ๊ทธ๋Ÿผ ๋‹ค์Œ์— ๋˜ ๋‹ค๋ฅธ ๋‚ด์šฉ์œผ๋กœ ๋ต™๊ฒ ์Šต๋‹ˆ๋‹ค,

    ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค :)

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    ๋Œ“๊ธ€

Designed by Tistory.