๐ŸŒ WEB/JAVA

๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ฐ์ฒด, ์บก์Šํ™”

์• ์ •์“ฐ 2020. 12. 5. 23:22
 ์ธํ”„๋Ÿฐ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ž…๋ฌธ - ์ตœ๋ฒ”๊ท ๋ฅผ ๊ณต๋ถ€ํ•˜๋ฉฐ ์ ์€ํ•„๊ธฐ ๋…ธํŠธ์ž…๋‹ˆ๋‹ค.

 

์ง์ ‘ ์‹ค์ „์—์„œ Java๋ฅผ ์“ฐ๊ฒŒ ๋˜๋ฉด์„œ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ์ค‘์š”์„ฑ์ด ๋ผˆ๋ฅผ ๊ฐ•ํƒ€ํ–ˆ๋‹ค... ๊ณต๋ถ€ํ•˜์ž!

 

"Software maintenance is not keep it working like before it is keep being useful in a changing world" - Jessica Kerr

์œ ์ง€๋ณด์ˆ˜๋Š” ๊ทธ๋Œ€๋กœ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์œ ์šฉํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋ถ„์„๊ณผ ์ˆ˜์ •์ด ๋น ๋ฅด๊ฒŒ ๋˜์–ด์•ผ ํ•œ๋‹ค.

 

๋น„์šฉ๊ณผ ๋ณ€ํ™”

๋‚ฎ์€ ๋น„์šฉ์œผ๋กœ ๋ณ€ํ™”ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

1. ํŒจ๋Ÿฌ๋‹ค์ž„

  ๊ฐ์ฒด ์ง€ํ–ฅ, ํ•จ์ˆ˜ํ˜•, ๋ฆฌ์•กํ‹ฐ๋ธŒ ๋“ฑ

2. ์ฝ”๋“œ, ์„ค๊ณ„, ์•„ํ‚คํ…์ฒ˜

  DRY, TDD, SOLID, DDD, ...

  ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜, MSA, ...

3. ์—…๋ฌด ํ”„๋กœ์„ธ์Šค/๋ฌธํ™”

  ์• ์ž์ผ, DevOps, ...

+

๊ฐ์ฒด์ง€ํ–ฅ์ด ๋น„์šฉ์„ ๋‚ฎ์ถ”๋Š” ๋ฐฉ๋ฒ•

์บก์Šํ™” + ๋‹คํ˜•์„ฑ(์ถ”์ƒํ™”)

 

๊ฐ์ฒด

์ ˆ์ฐจ ์ง€ํ–ฅ vs ๊ฐ์ฒด ์ง€ํ–ฅ : ์ ˆ์ฐจ ์ง€ํ–ฅ

์ ˆ์ฐจ ์ง€ํ–ฅ์€ ์‹œ๊ฐ„์ด ๊ฐˆ์ˆ˜๋ก ๋ณต์žกํ•ด์ง€๊ณ  ์ˆ˜์ •์ด ์–ด๋ ค์›Œ์ง„๋‹ค. 

-> ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์€ ๊ณณ์—์„œ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ๋ณต์žกํ•ด์ง€๊ณ  ์ •ํ™•์„ฑ์ด ๋–จ์–ด์ง„๋‹ค.

 

๊ฐ์ฒด์ง€ํ–ฅ์€ ๊ฐ๊ฐ์˜ ๊ฐ์ฒด๊ฐ€ ๋ฐ์ดํ„ฐ์™€ ํ”„๋กœ์‹œ์ €๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์–ด ๋‹ค๋ฅธ ๊ฐ์ฒด๊ฐ€ ํ•ด๋‹น ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๋„๋ก ํ•œ๋‹ค.

-> ํ”„๋กœ์‹œ์ €๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์—ฐ๊ฒฐํ•˜๊ฒŒ ํ•œ๋‹ค.

 

๊ฐ์ฒด์˜ ํ•ต์‹ฌ -> ๊ธฐ๋Šฅ ์ œ๊ณต

 ๊ฐ์ฒด๋Š” ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์œผ๋กœ ์ •์˜ -> ๋‚ด๋ถ€์ ์œผ๋กœ ๊ฐ€์ง„ ๋ฐ์ดํ„ฐ๋กœ ์ •์˜ํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

์ด๋Ÿฌํ•œ ๊ฐ์ฒด์™€ ๊ฐ์ฒด๊ฐ€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š”๋‹ค๊ณ  ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.

 -> ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฉ”์‹œ์ง€, ๋ฆฌํ„ด ๋ฉ”์‹œ์ง€, ์ต์…‰์…˜ ๋ฉ”์‹œ์ง€

 

์บก์Šํ™”

์บก์Šํ™”๋งŒ ์ž˜ํ•ด๋„,,, ์ข‹์€ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค ๊ฐ€๋Šฅ์„ฑ์„ ๋†’ํžŒ๋‹ค...

 

- ๋ฐ์ดํ„ฐ + ๊ด€๋ จ ๊ธฐ๋Šฅ ๋ฌถ๊ธฐ

- ๊ฐ์ฒด๊ฐ€ ๊ธฐ๋Šฅ์„ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ–ˆ๋Š”์ง€ ์™ธ๋ถ€์— ๊ฐ์ถ˜๋‹ค. ( ๋ฐ์ดํ„ฐ ์ƒ์„ธ ๋‚ด์šฉ์„ ์™ธ๋ถ€์— ๊ฐ์ถค)

- ์ •๋ณด ์€๋‹‰ ์˜๋ฏธ ํฌํ•จ

- ์™ธ๋ถ€์— ์˜ํ–ฅ ์—†์ด ๊ฐ์ฒด ๋‚ด๋ถ€ ๊ตฌํ˜„ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ

 


// ์ด๋Ÿฐ ๊ธฐ๋Šฅ์ด ์žˆ๋‹ค๋ฉด
if(acc.getMembership() == REGULAR && acc.getExpDate().isAfter(now())) {
	...์ •ํšŒ์› ๊ธฐ๋Šฅ
}


// ์š”๊ตฌ์‚ฌํ•ญ์ด ๋ณ€๊ฒฝ๋˜๋ฉด์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ 
if(acc.getMembership() == REGULAR && 
 (
   (acc.getServiceDate().isAfter(fiveYearAgo) && acc.getExpDate().isAfter(now())) ||
     ์กฐ๊ฑด || ์กฐ๊ฑด || ์กฐ๊ฑด  . . .)
 )
 {
   ...์ •ํšŒ์› ๊ธฐ๋Šฅ
 }

์š”๊ตฌ ์‚ฌํ•ญ์ด ๋ณ€ํ™”๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ/์‚ฌ์šฉ์— ๋ณ€ํ™”๊ฐ€ ์ƒ๊น€ -> ์ˆ˜์ •์ด ์—ฐ์‡„์ ์œผ๋กœ ๋ฐœ์ƒ๋œ๋‹ค.(์ ˆ์ฐจ์ง€ํ–ฅ ๋ฐฉ์‹) 

 

 

์บก์Šํ™”๋ฅผ ํ•˜์—ฌ ํ•ด๊ฒฐํ•œ ๋ฐฉ๋ฒ•

if(acc.hasRegularPermission()) {
  ... ์ •ํšŒ์› ๊ธฐ๋Šฅ
  }
  
  
  pulbic class Account{
    private Membership memvership;
    private Date expDate;
    
    // ํšŒ์› ๊ด€๋ จ๋œ ๊ธฐ๋Šฅ
    public boolean hasRegularPermission(){
     return membership == REGULAR && expDate.isAfter(now())
   }

์ด๋Ÿฐ์‹์œผ๋กœ ๊ตฌ์กฐ๋ฅผ ์žก์œผ๋ฉด ์š”๊ตฌ์‚ฌํ•ญ์ด ๋ณ€ํ™”๊ฐ€ ์ƒ๊ฒจ๋„ ์บก์Šํ™”ํ•œ ํšŒ์› ๊ด€๋ จ๋œ ๊ธฐ๋Šฅ ๋ฉ”์†Œ๋“œ๋งŒ ์ˆ˜์ •ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

- ์—ฐ์‡„์ ์ธ ๋ณ€๊ฒฝ ์ „ํŒŒ๋ฅผ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ์–ด ์บก์Šํ™”๋œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ ์˜ํ–ฅ์„ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

- ๊ทธ๋ฆฌ๊ณ  ์บก์Šํ™”๋ฅผ ์‹œ๋„ํ•˜๊ฒŒ ๋˜๋ฉด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ดํ•ด๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.

- ์บก์Šํ™”๋ฅผ ์œ„ํ•œ ๊ทœ์น™ 

   Tell, Don't Ask ๋ฐ์ดํ„ฐ ๋‹ฌ๋ผ ํ•˜์ง€ ๋ง๊ณ  ํ•ด๋‹ฌ๋ผ๊ณ  ํ•˜๊ธฐ --> ์บก์Šํ™” ๊ฐ€๋Šฅ์„ฑ ๋†’์•„์ง

if(acc.getMembership() == REGULAR(){
	์ •ํšŒ์› ๊ธฐ๋Šฅ
 }
 
 // --->
 
 if(acc.hasRegularPermission()){
 	์ •ํšŒ์› ๊ธฐ๋Šฅ
 }

์บก์Šํ™”๋ฅผ ์œ„ํ•œ ๊ทœ์น™

- Demeter's Law

 ๋ฉ”์„œ๋“œ์—์„œ ์ƒ์„ฑํ•œ ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ๋งŒ ํ˜ธ์ถœ

 ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›์€ ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ๋งŒ ํ˜ธ์ถœ

 ํ•„๋“œ๋กœ ์ฐธ์กฐํ•˜๋Š” ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ๋งŒ ํ˜ธ์ถœ

 

acc.getExpDate().isAfter(now)   ->  acc.isExpried()
Date date = acc.getExpdate();   ->  acc.isValid(now)
date.isAter(now);  

 

์ •๋ฆฌ

์บก์Šํ™” : ๊ธฐ๋Šฅ์˜ ๊ตฌํ˜„์„ ์™ธ๋ถ€์— ๊ฐ์ถค

์บก์Šํ™”๋ฅผ ํ†ตํ•ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ณ (๋˜๋Š” ์ตœ์†Œํ™”) ๋‚ด๋ถ€ ๊ตฌํ˜„์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์—ฐํ•จ

 

 

 

๋ฐ˜์‘ํ˜•