Skip to main content

๋ฐ์ดํ„ฐ ํ”Œ๋กœ ์ œ์–ด

ํ•™์Šต ๋ชฉํ‘œ

์ด ์œ ๋‹›์„ ์™„๋ฃŒํ•˜๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ๋น„๊ต ์—ฐ์‚ฐ์ž์˜ ์šฉ๋„๋ฅผ ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค.
  2. Switch ๋ฌธ ๋ฐ if-else ๋ฌธ ๊ฐ„์˜ ์ฐจ์ด์ ์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค.

์ผ์ƒ์—์„œ ๊ฒฐ์ •์„ ๋‚ด๋ ค์•ผ ํ•˜๋Š” ์ˆœ๊ฐ„์€ ์–ธ์ œ๋“ ์ง€ ์˜ต๋‹ˆ๋‹ค. ์˜ท์„ ์–ด๋–ป๊ฒŒ ์ž…์„๊นŒ? ๋ฌด์—‡์„ ๋จน์„๊นŒ? ์™ผ์ชฝ์œผ๋กœ ๊ฐ€์•ผ ํ• ๊นŒ, ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๊ฐ€์•ผ ํ• ๊นŒ? ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ์œ ๋‹› 1์˜ 2๋‹จ๊ณ„์—์„œ ๋‹ค๋ฃจ์—ˆ๋˜ Teatime ์˜์‚ฌ ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ์ƒ๊ฐํ•ด ๋ณด์„ธ์š”.

Boil water in a Tea Kettle
Fill Kettle with Water
Switch Kettle On
Wait for Water to Boil

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

ํ‘œํ˜„์‹ ๋ฐ ํ‘œํ˜„์‹ ์—ฐ์‚ฐ์ž

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

ํ‘œํ˜„์‹์€ ๊ณ„์‚ฐ ์‹œ ๋‹จ์ผ ๊ฐ’์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋ฐ˜ํ™˜๋˜๋Š” ์ฝ”๋“œ์กฐ๊ฐ์ž…๋‹ˆ๋‹ค. ์ด ๋ชจ๋“ˆ์˜ ๋ชฉ์ ์„ ์œ„ํ•ด ํ‘œํ˜„์‹์€ ๋ฆฌํ„ฐ๋Ÿด ๊ฐ’(์˜ˆ: 12), ๋ณ€์ˆ˜(์˜ˆ: numberOfTeaCups) ๋˜๋Š” ์ˆ˜ํ•™ ์—ฐ์‚ฐ(์˜ˆ: 7 x 4)์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ‘œํ˜„์‹ ์—ฐ์‚ฐ์ž๋Š” ๋‘ ๊ฐ’์ด ๊ฐ™์€์ง€ ๋น„๊ตํ•˜๊ฑฐ๋‚˜ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ๋น„๊ต๋ฌธ์€ ํ‘œํ˜„์‹ ์—ฐ์‚ฐ์ž๋กœ ๊ตฌ๋ถ„๋œ ๋‘ ๊ฐœ์˜ ํ‘œํ˜„์‹์œผ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ true ๋˜๋Š” false์˜ ๋ถ€์šธ ๊ฐ’์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๋น„๊ต ์—ฐ์‚ฐ์ž

Operator(์—ฐ์‚ฐ์ž)

์„ค๋ช…

๊ตฌ๋ฌธ

๊ฒฐ๊ณผ

<

๋‹ค์Œ ๊ฐ’๋ณด๋‹ค ์ž‘์Œ

1 < 2

TRUE

<=

๋‹ค์Œ ๊ฐ’๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์Œ

1 <= 2

3 <= 3

TRUE

==

๋‹ค์Œ ๊ฐ’๊ณผ ๊ฐ™์Œ

10 == 10

TRUE

!=

<>

๋‹ค์Œ ๊ฐ’๊ณผ ๊ฐ™์ง€ ์•Š์Œ

10 != 0

10 <> 11

TRUE

>

๋‹ค์Œ ๊ฐ’๋ณด๋‹ค ํผ

11 > 10

TRUE

>=

๋‹ค์Œ ๊ฐ’๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์Œ

40 >=10

40 >= 40

TRUE

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

Integer i = 2;

ํ•˜๋‚˜์˜ ๋“ฑํ˜ธ( = )๋Š” ํ• ๋‹น ์—ฐ์‚ฐ์ž๋กœ, ๊ฐ’์„ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. ๋‘ ๊ฐœ์˜ ๋“ฑํ˜ธ( == )๋Š” ๋น„๊ต ์—ฐ์‚ฐ์ž๋กœ, ๋‘ ๊ฐ’์„ ๋น„๊ตํ•˜์—ฌ ๊ฐ™์€์ง€(true) ๋˜๋Š” ๊ฐ™์ง€ ์•Š์€์ง€(false)๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

์—ฐ์‚ฐ์ž๋Š” ์•Œ๋ ค์ง„ ๊ฐ’์„ ๋ณ€์ˆ˜์™€ ๋น„๊ตํ•˜๊ฑฐ๋‚˜ ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋น„๊ตํ•  ๋•Œ ํŠนํžˆ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

Integer numberOfTeaCups = 2;
numberOfTeaCups == 3;  //false
numberOfTeaCups == 2; //true

์ •์ˆ˜ ๋ณ€์ˆ˜์™€ ๋ฌธ์ž์—ด ๋ณ€์ˆ˜์˜ ์˜ˆ์‹œ๋ฅผ ๋ณด์•˜๋Š”๋ฐ, ๋น„๊ต ๊ฒฐ๊ณผ๋ฅผ ๋ณด์œ ํ•˜๋Š” ๋ถ€์šธ ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์„ ํ™•์ธํ•ด ๋ณด์„ธ์š”.

Integer numberOfTeaCups = 2;
Boolean result = numberOfTeaCups > 3; // 2 > 3 = false

์ค„ 1์—์„œ๋Š” numberOfTeaCups ๋ณ€์ˆ˜๋ฅผ 2๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

์ค„ 2์—์„œ๋Š” result๋ผ๋Š” ๋ถ€์šธ ์œ ํ˜•์˜ ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค๊ณ , numberOfTeaCups ๋ณ€์ˆ˜ ๊ฐ’์„ ์ˆซ์ž 3๊ณผ ๋น„๊ตํ•œ ๋‹ค์Œ, ๋น„๊ต ๊ฒฐ๊ณผ(false)๋ฅผ result ๋ณ€์ˆ˜์— ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

๋น„๊ต๋Š” ํŠน์ • ํ•ญ๋ชฉ์ด ๋‹ค๋ฅธ ํ•ญ๋ชฉ๊ณผ ์–ด๋–ป๊ฒŒ ์—ฐ๊ด€๋˜๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜์ง€๋งŒ, ๋ฌด์—‡๋ณด๋‹ค ์กฐ๊ฑด๋ฌธ ๋‚ด์—์„œ ๊ฒฐ์ •์„ ๋‚ด๋ฆฌ๋Š” ๋ฐ ํฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

์กฐ๊ฑด๋ฌธ

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

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

If-Else ๋ฌธ

Apex์—์„œ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์กฐ๊ฑด๋ฌธ์€ if-else ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด ์กฐ๊ฑด๋ฌธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

if(condition is true) {
    //do this
} else {
    //do this
}

์ค„ 1์—์„œ๋Š” ์กฐ๊ฑด์„ ๊ด„ํ˜ธ ์•ˆ์— ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

์ค„ 2์—์„œ๋Š” ์ค„ 1์˜ ์กฐ๊ฑด์ด ์ฐธ์ผ ๊ฒฝ์šฐ ์‹คํ–‰ํ•  ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

์ค„ 3์—์„œ๋Š” ๋‘ ๋ฒˆ์งธ else ์˜ต์…˜์„ ์ œ์‹œํ•ฉ๋‹ˆ๋‹ค.

์ค„ 4์—์„œ๋Š” ์ค„ 1์˜ ์กฐ๊ฑด์ด ๊ฑฐ์ง“์ผ ๊ฒฝ์šฐ ์‹คํ–‰ํ•  ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

Apex์—์„œ๋Š” ์กฐ๊ฑด๋ฌธ์„ ์ค‘๊ด„ํ˜ธ({ })์— ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ์—ฌ๋Š” ์ค‘๊ด„ํ˜ธ({)๋Š” ๋‹ซ๋Š” ์ค‘๊ด„ํ˜ธ(})์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ ๋ธ”๋ก์— ์—ฌ๋Š” ์ค‘๊ด„ํ˜ธ๋งŒ ์žˆ๊ณ  ๋‹ซ๋Š” ์ค‘๊ด„ํ˜ธ๊ฐ€ ์—†์„ ๊ฒฝ์šฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

Teatime ์˜์‚ฌ ์ฝ”๋“œ์—์„œ ์กฐ๊ฑด๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฐป์ฃผ์ „์ž์˜ ๋ฌผ ๋†’์ด๋ฅผ ํ™•์ธํ•˜๊ณ  ์ด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‹ค์Œ์— ์ˆ˜ํ–‰ํ•  ์ž‘์—…์„ ํŒ๋‹จํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

  1. Developer Console์—์„œ Debug(๋””๋ฒ„๊ทธ) | Open Execute Anonymous Window(์ต๋ช… ์‹คํ–‰ ์ฐฝ ์—ด๊ธฐ)๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  2. ์ด ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ Enter Apex Code(Apex ์ฝ”๋“œ ์ž…๋ ฅ) ์ฐฝ์— ๋ถ™์—ฌ ๋„ฃ์Šต๋‹ˆ๋‹ค.
    String waterLevel = 'full'; /*This variable keeps track of the water level status: full or empty*/
    if(waterLevel == 'empty') {
        System.debug('Fill the tea kettle');
        waterLevel = 'full'; /*Once the tea kettle is filled the variable is changed to full*/
    } else {
        System.debug('The tea kettle is full');
    }
  3. Open log(๋กœ๊ทธ ์—ด๊ธฐ) ํ™•์ธ๋ž€์„ ์„ ํƒํ•˜๊ณ  Execute(์‹คํ–‰)๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด Execution Log(์‹คํ–‰ ๋กœ๊ทธ)๊ฐ€ ์—ด๋ฆฌ๋ฉฐ ์ฝ”๋“œ ์‹คํ–‰ ๊ฒฐ๊ณผ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  4. ์ฐฝ ์•„๋ž˜์— ์žˆ๋Š” Debug Only(๋””๋ฒ„๊ทธ๋งŒ) ํ™•์ธ๋ž€์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

์ค„ 1์—์„œ๋Š” waterLevel ๋ณ€์ˆ˜๋ฅผ full๋กœ ์ดˆ๊ธฐํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ฝ”๋“œ์˜ ๋ณ€์ˆ˜ ๊ฐ’์€ ์ฝ”๋“œ ์ž์ฒด์—์„œ ์ง€์ •๋˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ์—์„œ ํŒŒ์ƒ๋ฉ๋‹ˆ๋‹ค. Teatime ์˜ˆ์‹œ์—์„œ๋Š” ์ฃผ์ „์ž์˜ ์„ผ์„œ์—์„œ ๋ฌผ๋ฆฌ์  ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€ ๋ฌผ ๋†’์ด๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Ÿฌํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ, ๊ฐœ๋ฐœ์ž๋Š” ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋„๋ก ์ฝ”๋“œ์—์„œ ์ง์ ‘(์ž„์‹œ๋กœ) ๊ฐ’์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์ฝ”๋“œ์— ๊ฐ’์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์„ ํ•˜๋“œ ์ฝ”๋”ฉ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ํ…Œ์ŠคํŠธ ๋ชฉ์ ์œผ๋กœ waterLevel ๋ณ€์ˆ˜ ๊ฐ’์„ full๋กœ ํ•˜๋“œ ์ฝ”๋”ฉํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ’์ด ์ด๋ฏธ ์„ค์ •๋˜์—ˆ์œผ๋ฏ€๋กœ ์ฒซ if ๋ฌธ(์ค„ 3)์€ ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. waterLevel์ด empty์—์„œ ์‹œ์ž‘ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ฝ”๋“œ์—์„œ๋Š” waterLevel ๋ณ€์ˆ˜๊ฐ€ empty์™€ ๋™์ผํ•œ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. waterLevel์„ full๋กœ ํ•˜๋“œ์ฝ”๋”ฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— if ๋ฌธ ์กฐ๊ฑด์€ false์ž…๋‹ˆ๋‹ค. if ์กฐ๊ฑด์ด false์ธ ๊ฒฝ์šฐ else ์ฝ”๋“œ ๋ธ”๋ก์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ ์ฝ”๋“œ๋Š” ๋‘ ๊ฐœ์˜ ์˜ต์…˜์œผ๋กœ ๋ฌผ ๋†’์ด๊ฐ€ full์ธ ๊ฒฝ์šฐ์™€ ๋ฌผ ๋†’์ด๊ฐ€ empty์ธ ๊ฒฝ์šฐ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Ÿฌํ•œ ์˜ต์…˜์€ ๋‹จ์ง€ ๊ฐ€๋Šฅ์„ฑ์ผ ๋ฟ์ด๋ฉฐ, ์ฃผ์ „์ž๊ฐ€ ์–ด๋А ์ •๋„๋งŒ ์ฑ„์›Œ์ ธ ์žˆ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. 3๊ฐœ ์ด์ƒ์˜ ๊ฐ€๋Šฅ์„ฑ์„ ์ฒ˜๋ฆฌํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ์š”?

If-Else If ๋ฌธ

3๊ฐœ ์ด์ƒ์˜ ๊ฐ€๋Šฅ์„ฑ์„ ์ฒ˜๋ฆฌํ•˜๋ ค๋ฉด if-else if ๋ฌธ์„ ์‚ฌ์šฉํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. if-else if ๋ฌธ์€ ๋งˆ์ง€๋ง‰ else ์กฐ๊ฑด ์•ž์— ๋˜ ๋‹ค๋ฅธ if ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

  1. Developer Console์—์„œ Debug(๋””๋ฒ„๊ทธ) | Open Execute Anonymous Window(์ต๋ช… ์‹คํ–‰ ์ฐฝ ์—ด๊ธฐ)๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  2. ์ด ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ Enter Apex Code(Apex ์ฝ”๋“œ ์ž…๋ ฅ) ์ฐฝ์— ๋ถ™์—ฌ ๋„ฃ์Šต๋‹ˆ๋‹ค.
    String waterLevel = 'half';
    if(waterLevel == 'empty') {
        System.debug('Fill the tea kettle');
        waterLevel = 'full';
    } else if(waterLevel == 'half') {
        System.debug('Fill the tea kettle');
        waterLevel = 'full';
    } else { /*This statement only runs if line 3 and line 6 result in false.*/
        System.debug('The tea kettle is full');
    }
  3. Open log(๋กœ๊ทธ ์—ด๊ธฐ) ํ™•์ธ๋ž€์„ ์„ ํƒํ•˜๊ณ  Execute(์‹คํ–‰)๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด Execution Log(์‹คํ–‰ ๋กœ๊ทธ)๊ฐ€ ์—ด๋ฆฌ๋ฉฐ ์ฝ”๋“œ ์‹คํ–‰ ๊ฒฐ๊ณผ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  4. ์ฐฝ ์•„๋ž˜์— ์žˆ๋Š” Debug Only(๋””๋ฒ„๊ทธ๋งŒ) ํ™•์ธ๋ž€์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

์ฝ”๋“œ๋ฅผ ํ…Œ์ŠคํŠธํ•  ๋•Œ ์ค„ 1์— ์žˆ๋Š” waterLevel ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๋””๋ฒ„๊ทธ ๋กœ๊ทธ์˜ ์ถœ๋ ฅ์— ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค. half, full, empty์˜ ์„ธ ๊ฐ€์ง€ ๊ฐ’์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•ด ๋ณด์„ธ์š”.

์ฒซ ๋ฒˆ์งธ ์กฐ๊ฑด์ด ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์กฐ๊ฑด์ด ๋˜๋„๋ก ์กฐ๊ฑด๋ฌธ์„ ์ •๋ ฌํ•˜์„ธ์š”. ์ด๋ ‡๊ฒŒ ์ •๋ ฌํ•˜๋ฉด ์ฝ”๋“œ ๋ธ”๋ก์ด ์‹คํ–‰๋  ๋•Œ๋งˆ๋‹ค ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ์˜ ์–‘์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Teatime ์˜ˆ์‹œ์—์„œ ์ฃผ์ „์ž๋Š” ๋น„์–ด ์žˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ๊ฐ€์žฅ ๋†’์œผ๋ฏ€๋กœ ํ•ด๋‹น ์กฐ๊ฑด์„ ๋จผ์ € ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ฐป์ฃผ์ „์ž๊ฐ€ ๊ฐ€๋“ ์ฐจ ์žˆ์„ ๊ฐ€๋Šฅ์„ฑ์€ ๋‚ฎ์œผ๋ฏ€๋กœ ๋งˆ์ง€๋ง‰์œผ๋กœ ํ•ด๋‹น ์ƒํƒœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

Switch ๋ฌธ

if-else ๋ฌธ์˜ ๊ฐ€์žฅ ํšจ๊ณผ์ ์ธ ๋Œ€์•ˆ์€ switch ๋ฌธ์ž…๋‹ˆ๋‹ค. switch ๋ฌธ์€ ๊ฐ’ ์ง‘ํ•ฉ์„ ์ง€์ •ํ•˜๊ณ  ํ‘œํ˜„์‹์„ ํ…Œ์ŠคํŠธํ•˜์—ฌ ํ•ด๋‹น ๊ฐ’ ์ค‘ ํ•˜๋‚˜์™€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ด ์กฐ๊ฑด๋ฌธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

switch on expression {
    when value1 {
        //code block 1
    }
    when value2 {
        //code block 2
    }
    when else { //if none of the previous values apply
        //code block 3
    }
}

switch ๋ฌธ์—์„œ when ์˜ˆ์•ฝ์–ด ๋’ค์— ํ•˜๋‚˜ ์ด์ƒ์˜ ๊ฐ’์„ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

switch on expression {
    when value1 { //single value
        //code block 1
    }
    when value2, value3 { //multiple values
        //code block 2
    }
}

Teatime ์˜์‚ฌ ์ฝ”๋“œ์— switch ๋ฌธ์„ ์ ์šฉํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

  1. Developer Console์—์„œ Debug(๋””๋ฒ„๊ทธ) | Open Execute Anonymous Window(์ต๋ช… ์‹คํ–‰ ์ฐฝ ์—ด๊ธฐ)๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  2. ์ด ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ Enter Apex Code(Apex ์ฝ”๋“œ ์ž…๋ ฅ) ์ฐฝ์— ๋ถ™์—ฌ ๋„ฃ์Šต๋‹ˆ๋‹ค.
    String waterLevel = 'empty';
    //option 1 using a single value
    switch on waterLevel {
        when 'empty' {
            System.debug('Fill the tea kettle');
        }
        when 'half' {
            System.debug('Fill the tea kettle');
        }
        when 'full' {
            System.debug('The tea kettle is full');
        }
        when else {
            System.debug('Error!');
        }
    }
    //option 2 using multiple values
    switch on waterLevel {
        when 'empty', 'half' { //when waterLevel is either empty or half
            System.debug('Fill the tea kettle');
        }
        when 'full' {
            System.debug('The tea kettle is full');
        }
        when else {
            System.debug('Error!');
        }
    }
  3. Open log(๋กœ๊ทธ ์—ด๊ธฐ) ํ™•์ธ๋ž€์„ ์„ ํƒํ•˜๊ณ  Execute(์‹คํ–‰)๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด Execution Log(์‹คํ–‰ ๋กœ๊ทธ)๊ฐ€ ์—ด๋ฆฌ๋ฉฐ ์ฝ”๋“œ ์‹คํ–‰ ๊ฒฐ๊ณผ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  4. ์ฐฝ ์•„๋ž˜์— ์žˆ๋Š” Debug Only(๋””๋ฒ„๊ทธ๋งŒ) ํ™•์ธ๋ž€์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž

๋‘ ๊ฐœ ์ด์ƒ์˜ ์กฐ๊ฑด์„ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š”์ง€ ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋‹จ์ผ ์กฐ๊ฑด์ด ๋‘˜ ์ด์ƒ์˜ ๊ฐ’์œผ๋กœ ์ถฉ์กฑ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ์š”?

๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž

Operator(์—ฐ์‚ฐ์ž)

OR

AND

์—ฐ์‚ฐ ๊ธฐํ˜ธ

||

&&

์˜์‚ฌ ์ฝ”๋“œ

If X or Y, do this.

Otherwise, do that.

If X and Y, do this.

Otherwise, do that.

Apex ์ฝ”๋“œ

if(X || Y) {
//do this
} else {
//do this
}
if(X && Y) {
//do this
} else {
//do this
}

๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž and ๋ฐ or๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์กฐ๊ฑด์ด ์ฐธ์ธ์ง€ ๊ฑฐ์ง“์ธ์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด ๋‘˜ ์ด์ƒ์˜ ๊ฐ’์„ ํ™•์ธํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. and ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋“  ๊ฐ’์ด ์ฐธ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. or ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜๊ธฐ ์œ„ํ•ด ์ตœ์†Œ ํ•˜๋‚˜ ์ด์ƒ์˜ ๊ฐ’์ด ์ฐธ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž ํ‰๊ฐ€

๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž

๊ตฌ๋ฌธ

์„ค๋ช…

&& (AND)

X && Y

System.debug(true && true); // true

System.debug(false && true); //false

System.debug(true && false); // false

System.debug(false && false); //false

X ๋ฐ Y๋Š” ๋ถ€์šธ ๊ฐ’์ž…๋‹ˆ๋‹ค. X ๋ฐ Y๊ฐ€ ๋ชจ๋‘ ์ฐธ์ด๋ผ๋ฉด ํ‘œํ˜„์‹๋„ ์ฐธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ํ‘œํ˜„์‹์€ ๊ฑฐ์ง“์ž…๋‹ˆ๋‹ค.

|| (OR)

X || Y

System.debug(true || true); //true

System.debug(false || true); //true

System.debug(true || false); //true

System.debug(false || false); //false

X ๋ฐ Y๋Š” ๋ถ€์šธ ๊ฐ’์ž…๋‹ˆ๋‹ค. X ๋ฐ Y๊ฐ€ ๋ชจ๋‘ ๊ฑฐ์ง“์ด๋ผ๋ฉด ํ‘œํ˜„์‹๋„ ๊ฑฐ์ง“์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ํ‘œํ˜„์‹์€ ์ฐธ์ž…๋‹ˆ๋‹ค.

๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ if-else if ๋ฌธ์œผ๋กœ ์ž‘์„ฑ๋œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

String waterLevel = 'half';
if(waterLevel == 'empty') {
    System.debug('Fill the tea kettle');
    waterLevel = 'full';
} else if(waterLevel == 'half') {
    System.debug('Fill the tea kettle');
    waterLevel = 'full';
} else { //This statement only runs if line 3 and line 6 result in false.
    System.debug('The tea kettle is full');
}

์ค„ 4~5์™€ ์ค„ 7~8์„ ๋ณด๋ฉด ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์ค‘๋ณต ์ฝ”๋“œ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด์ค‘ํ™”๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ๋” ์ฝ๊ธฐ ์‰ฌ์›Œ์ง€๋ฉฐ ์ดํ•ด, ๋””๋ฒ„๊ทธ ๋ฐ ์œ ์ง€ ๊ด€๋ฆฌ๋„ ์‰ฌ์›Œ์ง€๋ฏ€๋กœ ์ด๋Š” ๋ชจ๋ฒ” ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค. ์ฝ”๋“œ๋Š” waterLevel์ด empty๋“  half์ด๋“  ๊ด€๊ณ„์—†์ด ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. empty ๋ฐ half๋ฅผ ํ•˜๋‚˜์˜ ์กฐ๊ฑด์— ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ ์ด ์ฝ”๋“œ๋ฅผ ๋‹จ์ˆœํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. or ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ empty ๋˜๋Š” half ๊ฐ’์ด ์ฐธ์ผ ๊ฒฝ์šฐ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. Developer Console์—์„œ Debug(๋””๋ฒ„๊ทธ) | Open Execute Anonymous Window(์ต๋ช… ์‹คํ–‰ ์ฐฝ ์—ด๊ธฐ)๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  2. ์ด ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ Enter Apex Code(Apex ์ฝ”๋“œ ์ž…๋ ฅ) ์ฐฝ์— ๋ถ™์—ฌ ๋„ฃ์Šต๋‹ˆ๋‹ค.
    String waterLevel = 'half';
    if(waterLevel == 'empty' || waterLevel == 'half') {
        System.debug('Fill the tea kettle');
        waterLevel = 'full';
    } else { //This statement only runs if line 3 false.
        System.debug('The tea kettle is full');
    }
  3. Open log(๋กœ๊ทธ ์—ด๊ธฐ) ํ™•์ธ๋ž€์„ ์„ ํƒํ•˜๊ณ  Execute(์‹คํ–‰)๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด Execution Log(์‹คํ–‰ ๋กœ๊ทธ)๊ฐ€ ์—ด๋ฆฌ๋ฉฐ ์ฝ”๋“œ ์‹คํ–‰ ๊ฒฐ๊ณผ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  4. ์ฐฝ ์•„๋ž˜์— ์žˆ๋Š” Debug Only(๋””๋ฒ„๊ทธ๋งŒ) ํ™•์ธ๋ž€์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

ํ•œ๋ฒˆ ๋ณด์„ธ์š”. ์ฝ”๋“œ์˜ ์ด์ค‘ํ™”๋ฅผ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž(&& ๋ฐ ||)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํšจ๊ณผ์ ์œผ๋กœ ์ฝ”๋“œ์˜ ์ด์ค‘ํ™”๋ฅผ ์—†์• ๊ณ  ๊ฐ€๋…์„ฑ์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฝ”๋“œ๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ

ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ๋Š” ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋‘ ๊ฐ€์ง€ ์ด์ƒ์ธ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด switch ๋ฌธ ๋˜๋Š” if-else ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•  ๋ฌธ์˜ ์œ ํ˜•์„ ์„ ํƒํ•  ๋•Œ ๊ณ ๋ คํ•ด์•ผ ํ•  ์ค‘์š”ํ•œ ์‚ฌํ•ญ์€ ๊ฐ ๋ฌธ์ด ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์ž…๋‹ˆ๋‹ค. ์ฝ”๋“œ ์ž‘์—…์„ ๊ณ„์†ํ•˜๋‹ค ๋ณด๋ฉด ์ฝ”๋“œ๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋” ๋งŽ์ด ๋ฐฐ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ ์ฝ”๋“œ๋ฅผ ์ฝ๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฐ ์ง‘์ค‘ํ•˜์„ธ์š”.

๋ฆฌ์†Œ์Šค

  1. Apex ๊ฐœ๋ฐœ์ž ๊ฐ€์ด๋“œ: ํ‘œํ˜„์‹ ์—ฐ์‚ฐ์ž
  2. Apex ๊ฐœ๋ฐœ์ž ๊ฐ€์ด๋“œ: Switch ๋ฌธ
  3. GeeksforGeeks: switch์™€ if else ๋น„๊ต

Salesforce ๋„์›€๋ง์—์„œ Trailhead ํ”ผ๋“œ๋ฐฑ์„ ๊ณต์œ ํ•˜์„ธ์š”.

Trailhead์— ๊ด€ํ•œ ์—ฌ๋Ÿฌ๋ถ„์˜ ์˜๊ฒฌ์— ๊ท€ ๊ธฐ์šธ์ด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด์ œ Salesforce ๋„์›€๋ง ์‚ฌ์ดํŠธ์—์„œ ์–ธ์ œ๋“ ์ง€ ์ƒˆ๋กœ์šด ํ”ผ๋“œ๋ฐฑ ์–‘์‹์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž์„ธํžˆ ์•Œ์•„๋ณด๊ธฐ ์˜๊ฒฌ ๊ณต์œ ํ•˜๊ธฐ