๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
TIL

9์ผ์ฐจ) ์ž๋ฐ” 3์ฃผ์ฐจ ์ˆ™์ œ

by suyeoneee 2024. 11. 14.

Today I Learned ๐Ÿ‘ฉ๐Ÿฝ‍๐Ÿ’ป

- ์•Œ๊ณ ๋ฆฌ์ฆ˜ 17, 18๋ฒˆ

- ์ž๋ฐ” ๋ฌธ๋ฒ• ์ข…ํ•ฉ๋ฐ˜ 3์ฃผ์ฐจ ๊ฐ•์˜(์ƒ์†, ์ถ”์ƒํด๋ž˜์Šค, ๋‹คํ˜•์„ฑ, ์ธํ„ฐํŽ˜์ด์Šค ๋“ฑ๋“ฑ)

- ์ž๋ฐ” ๋ฌธ๋ฒ• ์ข…ํ•ฉ๋ฐ˜ 3์ฃผ์ฐจ ์ˆ™์ œ

- ์ž๋ฐ” ๋ฌธ๋ฒ• ์ข…ํ•ฉ๋ฐ˜ 4์ฃผ์ฐจ ๊ฐ•์˜ ์•ž๋ถ€๋ถ„


์•Œ๊ณ ๋ฆฌ์ฆ˜ 18๋ฒˆ ๋ฌธ์ œ๋ฅผ ํ’€๋ฉด์„œ ๋ฌธ์ œ๋Š” ๊ผผ๊ผผํžˆ ์ฝ์–ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋˜ ๊นจ๋‹ฌ์•˜๋‹ค..

2024.11.14 - [Algorithm] - [Java] ๋ฌธ์ž์—ด์„ ์ •์ˆ˜๋กœ ๋ฐ”๊พธ๊ธฐ

 

[Java] ๋ฌธ์ž์—ด์„ ์ •์ˆ˜๋กœ ๋ฐ”๊พธ๊ธฐ

# ๋ฌธ์ œ์„ค๋ช…๋ฌธ์ž์—ด s๋ฅผ ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜, solution์„ ์™„์„ฑํ•˜์„ธ์š”. # ์ œํ•œ ์กฐ๊ฑดs์˜ ๊ธธ์ด๋Š” 1 ์ด์ƒ 5์ดํ•˜์ž…๋‹ˆ๋‹ค.s์˜ ๋งจ์•ž์—๋Š” ๋ถ€ํ˜ธ(+, -)๊ฐ€ ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.s๋Š” ๋ถ€ํ˜ธ์™€ ์ˆซ์ž๋กœ๋งŒ ์ด๋ฃจ

mon-monde.tistory.com

s์˜ ๋งจ์•ž์—๋Š” ๋ถ€ํ˜ธ(+, -)๊ฐ€ ์˜ฌ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ œํ•œ ์กฐ๊ฑด์—์„œ ์Œ์ˆ˜๋งŒ ์ƒ๊ฐํ•ด๋ฒ„๋ ธ๋‹ค..;;

์ฒ˜์Œ์—๋Š” if(s.charAt(0) == '-' || s.charAt(0) == '+') ์ด ์กฐ๊ฑด๋ฌธ์„ ์ž‘์„ฑํ•˜์ง€ ์•Š์•˜๋‹ค.

๊ทธ๋žฌ๋”๋‹ˆ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค 2๊ฐœ๊ฐ€ ์˜ค๋‹ต์œผ๋กœ ๋‚˜์™€์„œ ๋ญ์ง€? ๊ณ ๋ฏผํ•ด๋ณด๋‹ˆ ๋ฌธ์ž์—ด์•ž์— '+'๊ฐ€ ๋ถ™๋Š” ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐ ๋ชป ํ–ˆ๋˜ ๊ฒƒ์ด์—ˆ๋‹ค...@@๐Ÿฅน

 

 

๊ทธ๋ฆฌ๊ณ  ์–ด์ œ ๋๋‚ด์ง€ ๋ชปํ•œ ์ž๋ฐ” 3์ฃผ์ฐจ ๊ฐ•์˜๋ฅผ ๋“ค์—ˆ๋‹ค. ์ƒ์†, ์ถ”์ƒํด๋ž˜์Šค, ๋‹คํ˜•์„ฑ, ์ธํ„ฐํŽ˜์ด์Šค ๋“ฑ๋“ฑ ์ž๋ฐ”์˜ ์ค‘์š”ํ•œ ๊ฐœ๋…๋“ค์„ ๋ฐฐ์› ๋‹ค!

์ž๋ฐ” ๊ฐœ๋…์„ ๋ฐฐ์šด์ง€ 4๋…„ ๋„˜์€๊ฑฐ ๊ฐ™์€๋ฐ ๋‹ค ๊นŒ๋จน์–ด์„œ ์ƒˆ๋กœ์šด ๋งˆ์Œ์œผ๋กœ ๋‹ค์‹œ ๋ฐฐ์› ๋‹ค.. 

๊ทธ๋ฆฌ๊ณ  ์ˆ™์ œ ํ•˜๋ฉด์„œ ๋ณต์Šตํ•˜๋Š” ๋Š๋‚Œ์œผ๋กœ gogo๐Ÿ’จ๐Ÿ’จ๐Ÿ’จ

 

# 3์ฃผ์ฐจ ์ˆ™์ œ step3

 

  • Calculator ํด๋ž˜์Šค์™€ ํฌํ•จ๊ด€๊ณ„๋ฅผ ๋งบ๊ณ  ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ๊ฐ๊ฐ์˜ ์—ฐ์‚ฐ ํด๋ž˜์Šค ํƒ€์ž…์˜ ํ•„๋“œ์— ๊ฐ์ฒด๋ฅผ ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค.

์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด๋ฅผ ์ฃผ์ž…ํ•œ๋‹ค๋Š”๊ฒŒ ๋ญ์ง€? ์ƒ๊ฐํ•˜๋‹ค๊ฐ€

์—ฐ์‚ฐ ํด๋ž˜์Šค ํƒ€์ž…์˜ ํ•„๋“œ์— => this.addOperation

๊ฐ์ฒด๋ฅผ ์ฃผ์ž… => new AddOperation() 

์ด๋ ‡๊ฒŒ ํ•˜์—ฌ ์ƒ์„ฑ์ž๋ฅผ ์ž‘์„ฑํ•˜์˜€๋‹ค.

// ์ƒ์„ฑ์ž : ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ๊ฐ๊ฐ์˜ ์—ฐ์‚ฐ ํด๋ž˜์Šค ํƒ€์ž…์˜ ํ•„๋“œ์— ๊ฐ์ฒด๋ฅผ ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค.
Calculator(){
        this.addOperation = new AddOperation();
        this.substractOperation = new SubstractOperation();
        this.multiplyOperation = new MultiplyOperation();
        this.divideOperation = new DivideOperation();
    }

 

# 3์ฃผ์ฐจ ์ˆ™์ œ step3

 

  • calculate ๋ฉ”์„œ๋“œ์—์„œ ์ง์ ‘ ์—ฐ์‚ฐ์„ ํ•˜์ง€ ์•Š๊ณ  ์ฃผ์ž…๋ฐ›์€ ์—ฐ์‚ฐ ํด๋ž˜์Šค๋“ค์˜ operate ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ์‚ฐ์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

-> calculate() ๋ฉ”์„œ๋“œ๋กœ ๋“ค์–ด์˜จ ๋ฌธ์ž์—ด(์—ฐ์‚ฐ์ž)๊ฐ’์— ๋”ฐ๋ผ switch๋ฌธ์œผ๋กœ ์—ฐ์‚ฐ ์ข…๋ฅ˜๋ฅผ ๋‚˜๋ˆ„๊ณ , ํ”ผ์—ฐ์‚ฐ์ž๊ฐ’๋“ค์„ ์—ฐ์‚ฐ ํด๋ž˜์Šค๋“ค์˜ operate๋ฉ”์„œ๋“œ๋กœ ๋„˜๊ฒจ์ฃผ๋ฉด์„œ ๊ณ„์‚ฐ๊ฐ’์„ return๋ฐ›์•˜๋‹ค.

case "+":
    answer = addOperation.operate(firstNumber, secondNumber);
    break;

 

 

# 3์ฃผ์ฐจ ์ˆ™์ œ step4 (step4์—์„œ๋Š” ์ถ”์ƒ ํด๋ž˜์Šค๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ๋‹ค.)

 

  • Calculator ํด๋ž˜์Šค๋Š” 4๊ฐœ์˜ ์—ฐ์‚ฐ ํด๋ž˜์Šค๋“ค์ด ์ƒ์†๋ฐ›๊ณ  ์žˆ๋Š” AbstractOperation ํด๋ž˜์Šค๋งŒ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
  • ์ƒ์„ฑ์ž ํ˜น์€ Setter๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ์—ฐ์‚ฐ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ AbstractOperation ํด๋ž˜์Šค ํƒ€์ž…์˜ ํ•„๋“œ์— ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค.(๋‹คํ˜•์„ฑ)
  • calculate ๋ฉ”์„œ๋“œ์—์„œ๋Š” ๋” ์ด์ƒ ์—ฐ์‚ฐ์ž ํƒ€์ž…์„ ๋ฐ›์•„ ๊ตฌ๋ถ„ํ•  ํ•„์š” ์—†์ด ์ฃผ์ž… ๋ฐ›์€ ์—ฐ์‚ฐ ํด๋ž˜์Šค์˜ operate ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๋ฐ”๋กœ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

Calculrator ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž ๋ถ€๋ถ„๊ณผ main์—์„œ ์—ฐ์‚ฐ ํด๋ž˜์Šค๋ฅผ ์–ด๋–ป๊ฒŒ ๋‹ค๋ค„์•ผ๋ ์ง€ ๊ณ ๋ฏผ์„ ํ–ˆ๋‹ค.

์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ๋Š” ๋‹ค์ด์–ด๊ทธ๋žจ์„ ๋ณด๋ฉด์„œ ์ ‘๊ทผ์ œ์–ด์ž(+๋Š” public), ํƒ€์ž…, ๋ณ€์ˆ˜๋ช… ๋“ฑ์„ ๊ตฌ์„ฑํ•˜๋ฉด ๋œ๋‹ค.

 

Calculrator ํด๋ž˜์Šค์˜ ์†์„ฑ์€ AbstractOperation ํด๋ž˜์Šค, ๋ฉ”์„œ๋“œ๋Š” operation ๋ฉ”์„œ๋“œ ํ•˜๋‚˜์ธ๋ฐ ๋‚˜๋Š” setter ์—ญํ• ์„ ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋„ ์ถ”๊ฐ€ํ–ˆ๋‹ค. 

Calculator(AbstractOperation operation){
    this.operation = operation;
}

 

์ถ”์ƒํด๋ž˜์Šค๋งŒ์„ ๋‹ด์œผ๋ฉด ๋˜๋ฏ€๋กœ ์ƒ์„ฑ์ž ์ฝ”๋“œ๊ฐ€ ๊ฐ„๋‹จํ•ด์กŒ๋‹ค.!

๋ฉ”์„œ๋“œ๋Š” ์ถ”์ƒํด๋ž˜์Šค operation์˜ operate ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ•˜์˜€๋‹ค.

 

๊ทธ ํ›„ Main์—์„œ๋Š” Setter๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ์—ฐ์‚ฐ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ AbstractOperation ํด๋ž˜์Šค ํƒ€์ž…์˜ ํ•„๋“œ์— ์ฃผ์ž…ํ•˜๋„๋ก ํ•˜์˜€๋‹ค. (์•„๋ž˜์™€ ๊ฐ™์ด)

cal.setOperation(new AddOperation());

 

 

์ƒ๊ฐ๋ณด๋‹ค ์ˆ™์ œ๋ฅผ ํ‘ธ๋Š” ๋ฐ ์˜ค๋ž˜๊ฑธ๋ ธ์ง€๋งŒ ๋‚˜๋ฆ„ ๋ฟŒ๋“ฏํ–ˆ๋‹ค...

step4๊นŒ์ง€ ๋๋‚ด๊ณ ๋ณด๋‹ˆ ํ›จ์”ฌ ๋” ๊น”๋”ํ•ด์ง€๊ณ  ๊ตฌ์กฐ์ ์ธ ์ฝ”๋“œ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ ๋œ ๊ฒƒ ๊ฐ™์•˜๋‹ค.

 

โœ… ์ถ”์ƒํด๋ž˜์Šค์˜ ์žฅ์ 

๊ตฌ์กฐํ™”๋œ ์„ค๊ณ„ ์ œ๊ณต → ์ƒ์†๋ฐ›๋Š” ํด๋ž˜์Šค๋“ค์ด ์ผ์ •ํ•œ ๋ฉ”์„œ๋“œ๋‚˜ ์†์„ฑ์„ ๊ตฌํ˜„, ์ฝ”๋“œ์˜ ์ผ๊ด€์„ฑ ์œ ์ง€
์žฌ์‚ฌ์šฉ์„ฑ ํ–ฅ์ƒ → ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋งŒ ํ™•์žฅํ•˜์—ฌ ์žฌ์‚ฌ์šฉ
์œ ์—ฐํ•œ ๋‹คํ˜•์„ฑ ๊ตฌํ˜„ → ์ƒ์†๋ฐ›์€ ํด๋ž˜์Šค์—์„œ ํŠน์ • ๋ฉ”์„œ๋“œ๋ฅผ ๋‹ค์–‘ํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Œ
์บก์Šํ™” → ์„ธ๋ถ€ ๊ตฌํ˜„์€ ์ƒ์†๋ฐ›์€ ํด๋ž˜์Šค์— ์œ„์ž„

 


What I will learn tomorrow ๐Ÿ‘€

- ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ฝ”๋“œ์นดํƒ€ ๋ฐ์ผ๋ฆฌ๋ฃจํ‹ด

- ์ž๋ฐ” 4์ฃผ์ฐจ ๊ฐ•์˜

- ๊ฐœ์ธ ๊ณผ์ œ ๋ ˆ๋ฒจ2๊นŒ์ง€ ๋„์ „!

๋Œ“๊ธ€