CodeGym /ํ–‰๋™ /์ž๋ฐ” ์ฝ”์–ด /๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ๋ฌธ์ œ: ๊ณต์œ  ๋ฆฌ์†Œ์Šค ์•ก์„ธ์Šค

๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ๋ฌธ์ œ: ๊ณต์œ  ๋ฆฌ์†Œ์Šค ์•ก์„ธ์Šค

์ž๋ฐ” ์ฝ”์–ด
๋ ˆ๋ฒจ 7 , ๋ ˆ์Šจ 1
์‚ฌ์šฉ ๊ฐ€๋Šฅ

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

์ด์ „์— ์šฐ๋ฆฌ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์„œ๋กœ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฐœ์ฒด ์ง‘ํ•ฉ์œผ๋กœ ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋ชจ๋“  ๊ฒƒ์ด ์กฐ๊ธˆ ๋” ๋ณต์žกํ•ด์ง‘๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ "์ž‘์€ ๋กœ๋ด‡"(์Šค๋ ˆ๋“œ)์ด ํฌ๋กค๋งํ•˜๊ณ  ๋ฉ”์„œ๋“œ์— ํฌํ•จ๋œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋Š” ๊ฐœ์ฒด ์ง‘ํ•ฉ๊ณผ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค.

์ด ์ƒˆ๋กœ์šด ํ•ด์„์€ ์ฒซ ๋ฒˆ์งธ ํ•ด์„์„ ์ทจ์†Œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๊ฐ์ฒด์ด๊ณ  ์—ฌ์ „ํžˆ ์„œ๋กœ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๋Š” ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ์žˆ๊ณ  ๊ฐ ์Šค๋ ˆ๋“œ๋Š” ์ž์ฒด ์ž‘์—… ๋˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค๋Š” ์ ์„ ๊ธฐ์–ตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ๊ทธ๋žจ์ด ์ ์  ๋ณต์žกํ•ด์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๋Š” ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๊ฐœ์ฒด์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๋“ค์€ ์„œ๋กœ์˜ ๋ฐœ๊ฐ€๋ฝ์„ ๋ฐŸ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

์ฒซ ๋ฒˆ์งธ ์Šค๋ ˆ๋“œ์˜ ์ฝ”๋“œ ๋‘ ๋ฒˆ์งธ ์Šค๋ ˆ๋“œ์˜ ์ฝ”๋“œ
System.out.print ("Nick is"); System.out.print (""); System.out.print ("15"); System.out.print (""); System.out.print ("years old");
System.out.println ();
System.out.print ("Lena is"); System.out.print (""); System.out.print ("21"); System.out.print (""); System.out.print ("years old");
System.out.println ();
ํ‘œ์‹œ๋  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋˜๋Š” ๊ฒƒ
๋‹‰์€ 15์„ธ
๋ ˆ๋‚˜๋Š” 21์„ธ
์‹ค์ œ ์ฝ”๋“œ ์‹คํ–‰ ์ฒซ ๋ฒˆ์งธ ์Šค๋ ˆ๋“œ์˜ ์ฝ”๋“œ ๋‘ ๋ฒˆ์งธ ์Šค๋ ˆ๋“œ์˜ ์ฝ”๋“œ
System.out.print ("Nick is");
System.out.print ("Lena is"); System.out.print (" ");
System.out.print (" "); System.out.print ("15");
System.out.print ("21"); System.out.print (" ");
System.out.print (" "); System.out.print ("years old"); System.out.println ();
System.out.print ("years old"); System.out.println ();
System.out.print ("Nick is");
//other thread is running
//other thread is running
System.out.print (" "); System.out.print ("15"); //other thread is running
//other thread is running
System.out.print (" "); System.out.print ("years old"); System.out.println ();
//other thread is running
//other thread is running
//other thread is running
System.out.print ("Lena is"); System.out.print (" ");
//other thread is running
//other thread is running
System.out.print ("21"); System.out.print (" ");
//other thread is running
//other thread is running
//other thread is running
System.out.print ("years old"); System.out.println ();
์‹ค์ œ๋กœ ํ‘œ์‹œ๋˜๋Š” ๊ฒƒ
๋‹‰์€  ๋ ˆ๋‚˜๊ฐ€   15  ์‚ด 21  ์‚ด

๊ทธ๋ฆฌ๊ณ  ์—ฌ๊ธฐ ๋˜ ๋‹ค๋ฅธ ์˜ˆ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค:

์•”ํ˜ธ ์„ค๋ช…
class MyClass
{
private String name1 = "Ally";
private String name2 = "Lena";
public void swap()
{
String s = name1;
name1 = name2;
name2 = s;
}
}
์Šค์™‘ ๋ฐฉ๋ฒ•์€ ๋ฐ ๋ณ€์ˆ˜ swap์˜ ๊ฐ’์ž…๋‹ˆ๋‹ค .name1name2

๋™์‹œ์— ๋‘ ์Šค๋ ˆ๋“œ์—์„œ ํ˜ธ์ถœ๋˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”?

์‹ค์ œ ์ฝ”๋“œ ์‹คํ–‰ ์ฒซ ๋ฒˆ์งธ ์Šค๋ ˆ๋“œ์˜ ์ฝ”๋“œ ๋‘ ๋ฒˆ์งธ ์Šค๋ ˆ๋“œ์˜ ์ฝ”๋“œ
String s1 = name1; //Ally
name1 = name2; //Lena
String s2 = name1; //Lena(!)
name1 = name2; //Lena
name2 = s1; //Ally
name2 = s2; //Lena
String s1 = name1; name1 = name2;
//other thread is running
//other thread is running
name2 = s1;
//other thread is running
//other thread is running
//other thread is running
String s2 = name1; name1 = name2;
//other thread is running
name2 = s2;
๊ฒฐ๋ก 
๋‘ ๋ณ€์ˆ˜ ๋ชจ๋‘ ยซLenaยป ๊ฐ’์„ ๊ฐ–์Šต๋‹ˆ๋‹ค.
ยซAllyยป ๊ฐœ์ฒด๊ฐ€ ์„ฑ๊ณตํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ์žƒ์–ด๋ฒ„๋ ธ์Šต๋‹ˆ๋‹ค.

"์ด๋ ‡๊ฒŒ ๊ฐ„๋‹จํ•œ ๋Œ€์ž… ์—ฐ์‚ฐ์œผ๋กœ ์ด๋Ÿฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ค„ ๋ˆ„๊ฐ€ ์ง์ž‘์ด๋‚˜ ํ–ˆ๊ฒ ์Šต๋‹ˆ๊นŒ!"

"์˜ˆ, ์ด ๋ฌธ์ œ์—๋Š” ํ•ด๊ฒฐ์ฑ…์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๊ฒƒ์— ๋Œ€ํ•ด์„œ๋Š” ๋‚˜์ค‘์— ์ด์•ผ๊ธฐํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ชฉ์ด ๊ฑด์กฐํ•ฉ๋‹ˆ๋‹ค."

์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION