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

ํด๋ฆฐ์ฝ”๋“œ Day 11. ํ˜•์‹ ๋งž์ถ”๊ธฐ

by vividmin 2022. 5. 3.
320x100

โœ… ์ด ํฌ์ŠคํŒ…์€ ๋…ธ๋งˆ๋“œ ์ฝ”๋” ๋ถํด๋Ÿฝ  'ํด๋ฆฐ ์ฝ”๋“œ' ์ฑŒ๋ฆฐ์ง€๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์ž‘์„ฑํ•˜๋Š” TIL์ด๋ฉฐ,  ์ถœ์ฒ˜๋Š” Clean Code์ž…๋‹ˆ๋‹ค.

 

๐Ÿ“š ๋ฒ”์œ„ :  ~05. ํ˜•์‹ ๋งž์ถ”๊ธฐ

 

 

๐Ÿ““ ์ฑ…์—์„œ ๊ธฐ์–ตํ•˜๊ณ  ์‹ถ์€ ๋‚ด์šฉ์„ ์จ๋ณด์„ธ์š”.
  • ์ฝ”๋“œ ํ˜•์‹ === ์˜์‚ฌ์†Œํ†ต
  • ์ข‹์€ ํ˜•์‹์œผ๋กœ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•
    • ์ƒˆ ๊ฐœ๋…์„ ์‹œ์ž‘ํ•  ๋•Œ๋Š” ๋นˆ ํ–‰ ๋„ฃ๊ธฐ
    • ๋ฐ€์ ‘ํ•œ ๋‚ด์šฉ์€ ๊ฐ€๊นŒ์ด (์„ธ๋กœ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€๊น๊ฒŒ ์ž‘์„ฑ)
      • instance ๋ณ€์ˆ˜ โ‡’ class ๋งจ ์ฒ˜์Œ์— ์„ ์–ธ
      • a ํ•จ์ˆ˜๊ฐ€ b ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค๋ฉด ๋‘˜์„ ๊ฐ€๊น๊ฒŒ, ๋˜๋„๋ก a๋ฅผ b๋ณด๋‹ค ๋จผ์ € ์ž‘์„ฑ
      • ๊ฐœ๋… ์นœํ™”๋„ โฌ† โ‡’ ๊ฐ€๊นŒ์ด! (์ข…์† ํ•จ์ˆ˜, ๋ณ€์ˆ˜ - ๋ณ€์ˆ˜ ์‚ฌ์šฉ ํ•จ์ˆ˜, ๋น„์Šทํ•œ ๋™์ž‘ ์ˆ˜ํ–‰)
    • ๋“ค์—ฌ ์“ฐ๊ธฐ ์ž˜ํ•˜๊ธฐ 
    • Team์ด ์žˆ๋‹ค๋ฉด Team ๊ทœ์น™ ์ •ํ•˜๊ณ  ๊ทธ์— ๋”ฐ๋ฅด๊ธฐ, ๊ฐœ์ธํ–‰๋™ํ•˜์ง€ ์•Š๊ธฐ
    • ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์ฝ๊ธฐ ์‰ฝ๊ฒŒ, ๊ทœ๊ฒฉํ™”ํ•ด์„œ ์ž‘์„ฑ (์žฌ ์‚ฌ์šฉ์„ฑโฌ†)

 

 

โœ๐Ÿป ์˜ค๋Š˜ ์ฝ์€ ์†Œ๊ฐ์€? ๋– ์˜ค๋ฅด๋Š” ์ƒ๊ฐ์„ ๊ฐ€๋ณ๊ฒŒ ์ ์–ด๋ณด์„ธ์š”.

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

๊ทธ๋ฆฌ๊ณ  ์ง€๋‚œ๋ฒˆ์— ๋งŒ๋“  ํ† ์ด ํ”„๋กœ์ ํŠธ์˜ ์ฝ”๋“œ๋“ค์„ ๋‹ค์‹œ ์‚ดํŽด๋ณด๋ฉด์„œ ์˜ค๋Š˜ ๋ฐฐ์šด ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ๋‹ค์‹œ ๊ณ ์ณ๋ด์•ผ๊ฒ ๋‹ค.

 

๐Ÿ‘€ ๊ถ๊ธˆํ•œ ๋‚ด์šฉ์ด ์žˆ๊ฑฐ๋‚˜, ์ž˜ ์ดํ•ด๋˜์ง€ ์•Š๋Š” ๋‚ด์šฉ์ด ์žˆ๋‹ค๋ฉด ์ ์–ด๋ณด์„ธ์š”.

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

์ข‹์€ ์˜ˆ:

    class PerformanceReview {
      constructor(employee) {
        this.employee = employee;
      }

      perfReview() {
        this.getPeerReviews();
        this.getManagerReview();
        this.getSelfReview();
      }

      getPeerReviews() {
        const peers = this.lookupPeers();
        // ...
      }

      lookupPeers() {
        return db.lookup(this.employee, 'peers');
      }

      getManagerReview() {
        const manager = this.lookupManager();
      }

      lookupManager() {
        return db.lookup(this.employee, 'manager');
      }

      getSelfReview() {
        // ...
      }
    }

    const review = new PerformanceReview(employee);
    review.perfReview();

์ถœ์ฒ˜ : ํด๋ฆฐ ์ฝ”๋“œ - ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ko ๋ฒ„์ „ ๊นƒํ—ˆ๋ธŒ

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€