์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

์ฐธ์กฐ์ž๋ฃŒํ˜• - static ๋ฉ”์†Œ๋“œ์™€ ์ผ๋ฐ˜ ๋ฉ”์†Œ๋“œ์˜ ์ฐจ์ด, static ๋ธ”๋ก, Pass by value, Pass by reference, ํŠน์ดํ•œ ๋งค๊ฐœ ๋ณ€์ˆ˜

daramii 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๋ผ๋Š” ๊ฒƒ์„ ์ž„์˜ ๊ฐœ์ˆ˜๋งŒํผ ๋ฐ›์Šต๋‹ˆ๋‹ค. 

 

 

 

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

 

 

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

 

 

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

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