๐Ÿ“š/Clean Code(ํด๋ฆฐ ์ฝ”๋“œ)

[ํด๋ฆฐ์ฝ”๋“œ ์Šคํ„ฐ๋””] 5์žฅ. ํ˜•์‹ ๋งž์ถ”๊ธฐ

z_ero 2025. 5. 1. 02:28

5์žฅ. ํ˜•์‹ ๋งž์ถ”๊ธฐ

๐Ÿงพ ํ˜•์‹์€ ์˜์‚ฌ์†Œํ†ต์ด๋‹ค

ํด๋ฆฐ ์ฝ”๋“œ๋ฅผ ์งœ๊ธฐ ์œ„ํ•ด์„  ์ฝ”๋“œ์˜ ๋‚ด์šฉ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ˜•์‹๋„ ์ค‘์š”ํ•˜๋‹ค.
ํ˜•์‹์„ ์ž˜ ๋งž์ถ”๋ฉด ์ฝ”๋“œ๊ฐ€ ๋” ๋น ๋ฅด๊ฒŒ ์ฝํžˆ๊ณ , ์ดํ•ด๋„๋„ ๋†’์•„์ง„๋‹ค.

์‹ค์ œ๋กœ ์ €์ž๋Š” ์ด๋ ‡๊ฒŒ ๋งํ•œ๋‹ค:

“ํ˜•์‹์„ ๋งž์ถ”์ง€ ์•Š์œผ๋ฉด, ๋งˆ์น˜ ์ˆ  ์ทจํ•œ ๋ฑƒ์‚ฌ๋žŒ์ด ์ง  ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ธ๋‹ค.”


์ฝ๊ธฐ ์ข‹์€ ์ฝ”๋“œ๋Š” ๊น”๋”ํ•˜๊ณ , ์งˆ์„œ ์žˆ๊ณ , ์ „๋ฌธ์ ์œผ๋กœ ๋ณด์ธ๋‹ค.
์ด์ œ๋ถ€ํ„ฐ๋Š” ์‹ ๋ขฐ๊ฐ์„ ์ฃผ๋Š” ์ฝ”๋“œ๋ฅผ ์งœ๊ธฐ ์œ„ํ•ด, ํ˜•์‹์— ๋Œ€ํ•ด์„œ๋„ ํ•จ๊ป˜ ๊ณต๋ถ€ํ•ด๋ณด์ž.


๐Ÿ“ฐ ์‹ ๋ฌธ์ฒ˜๋Ÿผ ์ž‘์„ฑํ•˜๋ผ

์ข‹์€ ์‹ ๋ฌธ ๊ธฐ์‚ฌ๋Š” ํ•ญ์ƒ ์ œ๋ชฉ → ์š”์•ฝ → ์„ธ๋ถ€์‚ฌํ•ญ ์ˆœ์œผ๋กœ ํ๋ฅธ๋‹ค.
์ฝ”๋“œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋‹ค.

  • ํŒŒ์ผ ์ƒ๋‹จ์—๋Š” ๊ณ ์ˆ˜์ค€ ํ•จ์ˆ˜
  • ์•„๋ž˜๋กœ ๋‚ด๋ ค๊ฐˆ์ˆ˜๋ก ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„
  • ์ฝ๋Š” ์‚ฌ๋žŒ์€ ์œ„์—์„œ๋ถ€ํ„ฐ ์ฐจ๊ทผ์ฐจ๊ทผ ๋‚ด๋ ค์˜ค๋ฉฐ ๋งฅ๋ฝ์„ ํŒŒ์•…ํ•˜๊ฒŒ ๋œ๋‹ค

์ด๋Ÿฐ ํ๋ฆ„์ด ์žกํžŒ ์ฝ”๋“œ๋Š” ์ฝ๋Š” ์‚ฌ๋žŒ์—๊ฒŒ "์ด๊ฑด ์ž˜ ์งœ์—ฌ ์žˆ๊ฒ ๊ตฌ๋‚˜"๋ผ๋Š” ์ธ์ƒ์„ ์ค€๋‹ค.

๐Ÿ“ ์„ธ๋กœ ํ˜•์‹์˜ ๊ธฐ๋ณธ

  • ๋นˆ ์ค„๋กœ ๊ฐœ๋…์„ ๋‚˜๋ˆ„๊ณ 
  • ๊ด€๋ จ ์žˆ๋Š” ์ฝ”๋“œ๋“ค์€ ๊ฐ€๊นŒ์ด ๋ฐฐ์น˜ํ•˜๊ณ 
  • ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜๋Š” ์œ„์—, ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜๋Š” ์•„๋ž˜์—
  • ์ค‘์š”ํ•œ ๊ฐœ๋…๋ถ€ํ„ฐ ์œ„์— ๋ฐฐ์น˜ํ•˜๊ณ 
  • ํŒŒ์ผ ํฌ๊ธฐ๋Š” 200์ค„~500์ค„ ์ •๋„๊ฐ€ ์ด์ƒ์ 

๐Ÿ’ฌ ์˜ˆ์‹œ 1: ๋นˆ ์ค„์ด ์žˆ๋Š” ์ฝ”๋“œ (๊ฐ€๋…์„ฑ ↑)

public class BoldWidget extends ParentWidget {
  public static final String REGEXP = "'''.+?'''";

  private static final Pattern pattern = Pattern.compile("'''(.+?)'''");

  public BoldWidget(ParentWidget parent, String text) throws Exception {
    super(parent);
    Matcher match = pattern.matcher(text);
    match.find();
    addChildWidgets(match.group(1));
  }

  public String render() throws Exception {
    return "<b>" + childHtml() + "</b>";
  }
}


๐Ÿ’ฌ ์˜ˆ์‹œ 2: ๋นˆ ์ค„ ์—†์ด ๋ชฐ๋ ค ์žˆ๋Š” ์ฝ”๋“œ (๊ฐ€๋…์„ฑ ↓)

public class BoldWidget extends ParentWidget {
  public static final String REGEXP = "'''.+?'''";
  private static final Pattern pattern = Pattern.compile("'''(.+?)'''");
  public BoldWidget(ParentWidget parent, String text) throws Exception {
    super(parent);
    Matcher match = pattern.matcher(text);
    match.find();
    addChildWidgets(match.group(1));}
  public String render() throws Exception {
    return "<b>" + childHtml() + "</b>";}
}

→ ๊ฐ™์€ ์ฝ”๋“œ๋ผ๋„ ์ค„ ํ•˜๋‚˜๋กœ ๊ฐ€๋…์„ฑ์ด ์™„์ „ํžˆ ๋‹ฌ๋ผ์ง„๋‹ค.

๐Ÿ“ ๊ฐ€๋กœ ํ˜•์‹๋„ ์ค‘์š”ํ•˜๋‹ค

  • ํ–‰ ๊ธธ์ด๋Š” 100~120์ž ์ •๋„๊ฐ€ ์ด์ƒ์ 
  • ํ• ๋‹น๋ฌธ, ์—ฐ์‚ฐ์ž ์•ž๋’ค๋กœ ๊ณต๋ฐฑ์„ ํ™œ์šฉํ•ด์„œ ํ๋ฆ„์„ ๋‚˜๋ˆ ์ค€๋‹ค
  • ํ•จ์ˆ˜์™€ ๊ด„ํ˜ธ๋Š” ๋ถ™์ด๊ณ , ์ธ์ˆ˜๋Š” ์‰ผํ‘œ๋กœ ๊ณต๋ฐฑ ๋ถ„๋ฆฌ
int lineSize = line.length();
totalChars += lineSize;
public static double root(double a, double b, double c) {
  return (-b + Math.sqrt(b*b - 4*a*c)) / (2*a);
}


๐Ÿ” ๋“ค์—ฌ์“ฐ๊ธฐ์™€ ์ •๋ ฌ

  • ๋“ค์—ฌ์“ฐ๊ธฐ๋Š” ๋ฒ”์œ„์™€ ๊ตฌ์กฐ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์‹œ๊ฐ์  ์žฅ์น˜๋‹ค
  • ํด๋ž˜์Šค → ๋ฉ”์„œ๋“œ → ๋ธ”๋ก ์ˆœ์œผ๋กœ ํ•œ ์ˆ˜์ค€์”ฉ ๋“ค์—ฌ์“ด๋‹ค
  • ๊ฐ€๋กœ ์ •๋ ฌ(์˜ˆ: ๋ณ€์ˆ˜ ์„ ์–ธ ์ •๋ ฌ)์€ ๊ฐ€๋…์„ฑ์„ ํ•ด์น˜๋Š” ๊ฒฝ์šฐ๋„ ๋งŽ๋‹ค
// ๋น„์ถ”์ฒœ: ์ •๋ ฌ๋กœ ์ธํ•ด ์ค‘์š”ํ•œ ์ •๋ณด๊ฐ€ ํ๋ ค์ง
private   InputStream     input;
private   OutputStream    output;
// ์ถ”์ฒœ: ๋“ค์—ฌ์“ฐ๊ธฐ๋งŒ์œผ๋กœ๋„ ์ถฉ๋ถ„
private InputStream input;
private OutputStream output;


๐Ÿค ํŒ€ ๊ทœ์น™์ด ๊ฐ€์žฅ ์ค‘์š”ํ•˜๋‹ค

๊ฐœ์ธ ์ทจํ–ฅ๋ณด๋‹ค ๋” ์ค‘์š”ํ•œ ๊ฑด ํŒ€ ์ „์ฒด์˜ ํ•ฉ์˜๋‹ค.
์„œ๋กœ ๋‹ค๋ฅธ ์Šคํƒ€์ผ์ด ์„ž์ด๋ฉด, ์ฝ”๋“œ๋ฒ ์ด์Šค๋Š” ๊ธˆ์„ธ ๋ณต์žกํ•˜๊ณ  ์–ด์ง€๋Ÿฝ๊ฒŒ ๋А๊ปด์ง„๋‹ค.

๊ทธ๋ž˜์„œ ํŒ€์€ ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ๋ฅผ ์ •ํ•˜๊ณ , ๋„๊ตฌ๋กœ ๊ฐ•์ œํ•˜๋ฉฐ, ๋ชจ๋‘๊ฐ€ ํ•จ๊ป˜ ์ง€์ผœ์•ผ ํ•œ๋‹ค.


โœ๏ธ ๋งˆ๋ฌด๋ฆฌํ•˜๋ฉฐ

ํ˜•์‹์€ ๋‹จ์ˆœํžˆ ๋ณด๊ธฐ ์ข‹๊ธฐ ์œ„ํ•œ ๊ฒŒ ์•„๋‹ˆ๋‹ค.
์ฝ”๋“œ๋ฅผ ๋” ๋น ๋ฅด๊ฒŒ ์ฝ๊ณ , ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š” ๋„๊ตฌ๋‹ค.

  • ์‹ ๋ฌธ์ฒ˜๋Ÿผ ์œ„์—์„œ ์•„๋ž˜๋กœ ํ๋ฆ„ ์žˆ๊ฒŒ ์ž‘์„ฑํ•˜๊ณ 
  • ๊ฐœ๋…์€ ๋นˆ ์ค„๋กœ ๋‚˜๋ˆ ์ฃผ๊ณ 
  • ๊ด€๋ จ ์žˆ๋Š” ์ฝ”๋“œ๋Š” ๊ฐ€๊นŒ์ด ๋‘๊ณ 
  • ์ค‘์š”ํ•œ ๊ฑด ์œ„์ชฝ์— ๋จผ์ € ๋ณด์—ฌ์ฃผ๊ณ 
  • ๊ทธ๋ฆฌ๊ณ  ๋ฌด์—‡๋ณด๋‹ค, ๊ฐ™์€ ๊ทœ์น™์„ ๊พธ์ค€ํžˆ ์ง€ํ‚ค๋Š” ๊ฒƒ

ํ•œ ์ค„ ํ•œ ์ค„์— ๋“ค์–ด๊ฐ„ ์ž‘์€ ๋ฐฐ๋ ค๋“ค์ด ๊ฒฐ๊ตญ ํด๋ฆฐ ์ฝ”๋“œ์˜ ์‹œ์ž‘์ ์ด ๋œ๋‹ค๋Š” ๊ฒƒ์„ ๋ช…์‹ฌํ•˜์ž!

๋ฐ˜์‘ํ˜•