Amenable
Amenable's Blog
Amenable
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (189)
    • ๐Ÿ“‚ JAVA (87)
      • ์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” (65)
      • ์ฃผ์š” ๊ฐœ๋… (22)
    • ๐Ÿ“‚ ๊ฐœ๋ฐœ ์„œ์  (22)
      • ์‹ค์šฉ์ฃผ์˜ ํ”„๋กœ๊ทธ๋ž˜๋จธ (1)
      • ๊ฐ์ฒด์ง€ํ–ฅ์˜ ์‚ฌ์‹ค๊ณผ ์˜คํ•ด (2)
      • ํด๋ฆฐ ์ฝ”๋“œ (8)
      • ํ•จ๊ป˜ ์ž๋ผ๊ธฐ (1)
      • ๊ทธ๋ฆผ์œผ๋กœ ๋ฐฐ์šฐ๋Š” HTTP&Network Basic (10)
    • ๐Ÿ“‚ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (8)
      • ๊ฐœ๋… (8)
      • ๋ฌธ์ œํ’€์ด (0)
    • ๐Ÿ“‚ ๋„คํŠธ์›Œํฌ (14)
      • ๊ฐœ๋… (6)
      • ์„ฑ๊ณต๊ณผ ์‹คํŒจ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” 1%์˜ ๋„คํŠธ์›Œํฌ ์›๋ฆฌ (8)
    • ๐Ÿ“‚ ์Šคํ”„๋ง (13)
      • ๊ธฐ๋ณธ ๊ฐœ๋… (13)
    • ๐Ÿ“‚ WEB (5)
    • ๐Ÿ“‚ ์ž๋ฃŒ๊ตฌ์กฐ (12)
      • ๊ฐœ๋… (2)
      • ์ •๋ ฌ (8)
      • ํŠธ๋ฆฌ (2)
    • ๐Ÿ“‚ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (10)
      • ์ตœ์†Œ์‹ ์žฅํŠธ๋ฆฌ (2)
      • ์ตœ๋‹จ ๊ฒฝ๋กœ (2)
      • ๋ฌธ์ž์—ด (2)
      • ETC (4)
    • ๐Ÿ“‚ ์•Œ๊ณ ๋ฆฌ์ฆ˜_๋ฌธ์ œํ’€์ด (4)
      • BOJ_๋ฐฑ์ค€ (4)
    • ๐Ÿ“‚ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (3)
    • ๐Ÿ“‚ DevOps (2)
      • ๋ฐฐํฌ (2)
    • ๐Ÿ“‚ ํ›„๊ธฐ (8)
      • ์šฐ์•„ํ•œ ํ…Œํฌ์ฝ”์Šค(ํ”„๋ฆฌ์ฝ”์Šค) (4)
      • 2023๋…„ (3)
      • 2024๋…„ (1)
    • ๐Ÿ“‚ ํšŒ๊ณ  (1)
      • 2023๋…„ (1)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ๐Ÿš€ GitHub

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
Amenable
๐Ÿ“‚ ๊ฐœ๋ฐœ ์„œ์ /ํด๋ฆฐ ์ฝ”๋“œ

ํด๋ฆฐ ์ฝ”๋“œ(Clean Code) - 10์žฅ

ํด๋ฆฐ ์ฝ”๋“œ(Clean Code) - 10์žฅ
๐Ÿ“‚ ๊ฐœ๋ฐœ ์„œ์ /ํด๋ฆฐ ์ฝ”๋“œ

ํด๋ฆฐ ์ฝ”๋“œ(Clean Code) - 10์žฅ

2023. 1. 11. 22:07

10์žฅ. ํด๋ž˜์Šค ๐Ÿ 

  ์ง€๊ธˆ๊นŒ์ง€ ์ฝ”๋“œ ํ–‰๊ณผ ์ฝ”๋“œ ๋ธ”๋ก์„ ์˜ฌ๋ฐ”๋กœ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์— ์ดˆ์ ์„ ๋งž์ท„๋‹ค. ํ•จ์ˆ˜๋ฅผ ์˜ฌ๋ฐ”๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ํ•จ์ˆ˜๊ฐ€ ์„œ๋กœ ๊ด€๋ จ์„ ๋งบ๋Š” ๋ฐฉ์‹๋„ ๊ณต๋ถ€ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ฝ”๋“œ์˜ ํ‘œํ˜„๋ ฅ๊ณผ ๊ทธ ์ฝ”๋“œ๋กœ ์ด๋ฃจ์–ด์ง„ ํ•จ์ˆ˜์— ์•„๋ฌด๋ฆฌ ์‹ ๊ฒฝ ์“ธ์ง€๋ผ๋„ ์ข€ ๋” ์ฐจ์› ๋†’์€ ๋‹จ๊ณ„๊นŒ์ง€ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์œผ๋ฉด ๊นจ๋—ํ•œ ์ฝ”๋“œ๋ฅผ ์–ป๊ธฐ๋Š” ์–ด๋ ต๋‹ค. ์ด ์žฅ์—์„œ๋Š” ๊นจ๋—ํ•œ ํด๋ž˜์Šค๋ฅผ ๋‹ค๋ฃฌ๋‹ค.

  • ํด๋ž˜์Šค๋Š” ์ž‘์•„์•ผ ํ•œ๋‹ค!
      ์–ผ๋งˆ๋‚˜ ์ž‘์•„์•ผ ํ•˜๋Š”๊ฐ€? ํ•จ์ˆ˜๋Š” ๋ฌผ๋ฆฌ์ ์ธ ํ–‰ ์ˆ˜๋กœ ํฌ๊ธฐ๋ฅผ ์ธก์ •ํ–ˆ๋‹ค. ํด๋ž˜์Šค๋Š” ๋งก์€ ์ฑ…์ž„์œผ๋กœ ์ธก์ •์„ ํ•œ๋‹ค.
  • ๋‹จ์ผ ์ฑ…์ž„ ์›์น™ (Single Responsibility Priciple)
      SRP๋Š” ํด๋ž˜์Šค๋‚˜ ๋ชจ๋“ˆ์„ ๋ณ€๊ฒฝํ•  ์ด์œ ๊ฐ€ ํ•˜๋‚˜, ๋‹จ ํ•˜๋‚˜๋ฟ์ด์–ด์•ผ ํ•œ๋‹ค๋Š” ์›์น™์ด๋‹ค. ์ด๋Š” '์ฑ…์ž„'์ด๋ผ๋Š” ๊ฐœ๋…์„ ์ •์˜ํ•˜๋ฉฐ ์ ์ ˆํ•œ ํด๋ž˜์Šค ํฌ๊ธฐ๋ฅผ ์ œ์‹œํ•œ๋‹ค.
public class SuperDashboard extends JFrame implements MetaDataUser {
    public Component getLastFocusedComponent()
    public void setLastFocused(Component lastFocused)
    public int getMajorVersionNumber()
    public int getMinorVersionNumber()
    public int getBuildNumber()
}

  ์œ„์˜ ํด๋ž˜์Šค๋Š” ๊ฒ‰๋ณด๊ธฐ์—๋Š” ์ž‘์•„ ๋ณด์ด์ง€๋งŒ ๋ณ€๊ฒฝํ•  ์ด์œ ๊ฐ€ ๋‘ ๊ฐ€์ง€๋‹ค. ์ฒซ ๋ฒˆ์งธ๋กœ๋Š” SuperDashboard๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๋ฒ„์ „ ์ •๋ณด๋ฅผ ์ถ”์ ํ•œ๋‹ค. ๋‘ ๋ฒˆ์งธ๋กœ๋Š” SuperDashboard๋Š” ์ž๋ฐ” ์Šค์œ™ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค. (SuperDashboard๋Š” ์ตœ์ƒ์œ„ GUI ์œˆ๋„์˜ ์Šค์œ™ ํ‘œํ˜„์ธ JFrame์—์„œ ํŒŒ์ƒํ•œ ํด๋ž˜์Šค๋‹ค.) ์ฆ‰, ์Šค์œ™ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ๋งˆ๋‹ค ๋ฒ„์ „ ์ •๋ณด๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค.

  SRP๋ฅผ ์ง€ํ‚ค๊ธฐ ์œ„ํ•ด์„œ๋Š” SuperDashboard์—์„œ ๋ฒ„์ „ ์ •๋ณด๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฉ”์„œ๋“œ ์„ธ ๊ฐœ๋ฅผ ๋”ฐ๋กœ ๋นผ๋‚ด Version์ด๋ผ๋Š” ๋…์ž์ ์ธ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๋ฉด ๋œ๋‹ค.

public class Version {
    public int getMajorVersionNumber()
    public int getMinorVersionNumber()
    public int getBuildNumber()
}

  ์ด์ฒ˜๋Ÿผ ํฐ ํด๋ž˜์Šค ๋ช‡ ๊ฐœ๊ฐ€ ์•„๋‹ˆ๋ผ ์ž‘์€ ํด๋ž˜์Šค ์—ฌ๋Ÿฟ์œผ๋กœ ์ด๋ค„์ง„ ์‹œ์Šคํ…œ์ด ๋” ๋ฐ”๋žŒ์งํ•˜๋‹ค. ์ž‘์€ ํด๋ž˜์Šค๋Š” ๊ฐ์ž ๋งก์€ ์ฑ…์ž„์ด ํ•˜๋‚˜๋ฉฐ, ๋ณ€๊ฒฝํ•  ์ด์œ ๊ฐ€ ํ•˜๋‚˜๋ฉฐ, ๋‹ค๋ฅธ ์ž‘์€ ํด๋ž˜์Šค์™€ ํ˜‘๋ ฅํ•ด ์‹œ์Šคํ…œ์— ํ•„์š”ํ•œ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 

  • ์‘์ง‘๋„
      ์‘์ง‘๋„๊ฐ€ ๋†’๋‹ค๋Š” ๋ง์€ ํด๋ž˜์Šค์— ์†ํ•œ ๋ฉ”์„œ๋“œ์™€ ๋ณ€์ˆ˜๊ฐ€ ์„œ๋กœ ์˜์กดํ•˜๋ฉฐ ๋…ผ๋ฆฌ์ ์ธ ๋‹จ์œ„๋กœ ๋ฌถ์ธ๋‹ค๋Š” ์˜๋ฏธ๋‹ค. ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ์‘์ง‘๋„๊ฐ€ ๋†’์€ ํด๋ž˜์Šค๋ฅผ ์„ ํ˜ธํ•œ๋‹ค. ๊ทธ๋Ÿฌ๊ธฐ ์œ„ํ•ด์„œ๋Š” ํด๋ž˜์Šค๋Š” ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜ ์ˆ˜๊ฐ€ ์ž‘์•„์•ผ ํ•œ๋‹ค. ๊ฐ ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ๋Š” ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋ฅผ ํ•˜๋‚˜ ์ด์ƒ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฉ”์„œ๋“œ๊ฐ€ ๋ณ€์ˆ˜๋ฅผ ๋” ๋งŽ์ด ์‚ฌ์šฉํ• ์ˆ˜๋ก ๋ฉ”์„œ๋“œ์™€ ํด๋ž˜์Šค๋Š” ์‘์ง‘๋„๊ฐ€ ๋” ๋†’๋‹ค. ๋ชจ๋“  ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋ฅผ ๋ฉ”์„œ๋“œ๋งˆ๋‹ค ์‚ฌ์šฉํ•˜๋Š” ํด๋ž˜์Šค๋Š” ์‘์ง‘๋„๊ฐ€ ๊ฐ€์žฅ ๋†’๋‹ค.
      ๊ทธ๋ž˜์„œ 'ํ•จ์ˆ˜๋ฅผ ์ž‘๊ฒŒ, ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ชฉ๋ก์„ ์งง๊ฒŒ'๋ผ๋Š” ์ „๋žต์„ ๋”ฐ๋ฅด๋‹ค ๋ณด๋ฉด ๋•Œ๋•Œ๋กœ ๋ช‡๋ช‡ ๋ฉ”์„œ๋“œ๋งŒ์ด ์‚ฌ์šฉํ•˜๋Š” ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๊ฐ€ ์•„์ฃผ ๋งŽ์•„์ง„๋‹ค. ์ด๋Š” ์‹ญ์ค‘ํŒ”๊ตฌ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋กœ ์ชผ๊ฐœ์•ผ ํ•œ๋‹ค๋Š” ์‹ ํ˜ธ๋‹ค. ์‘์ง‘๋„๊ฐ€ ๋†’์•„์ง€๋„๋ก ๋ณ€์ˆ˜์™€ ๋ฉ”์„œ๋“œ๋ฅผ ์ ์ ˆํžˆ ๋ถ„๋ฆฌํ•ด ์ƒˆ๋กœ์šด ํด๋ž˜์Šค ๋‘์„ธ ๊ฐœ๋กœ ์ชผ๊ฐœ์ค€๋‹ค.
  • ๋ณ€๊ฒฝํ•˜๊ธฐ ์‰ฌ์šด ํด๋ž˜์Šค
      ๋‹ค์Œ์€ ์ฃผ์–ด์ง„ ๋ฉ”ํƒ€ ์ž๋ฃŒ๋กœ ์ ์ ˆํ•œ SQL ๋ฌธ์ž์—ด์„ ๋งŒ๋“œ๋Š” Sql ํด๋ž˜์Šค๋‹ค. ์ถ”ํ›„์— update ๋ฌธ๊ณผ ๊ฐ™์€ ์ผ๋ถ€ SQL ๊ธฐ๋Šฅ์„ ์ง€์›ํ•  ์‹œ์ ์ด ์˜ค๋ฉด ํด๋ž˜์Šค๋ฅผ ์ˆ˜์ •ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค. 
public class Sql {
    public Sql(String table, Column[] columns)
    public String create()
    public String insert(Object[] fields)
    public String selectAll()
    public String findByKey(String keyColumn, String keyValue)
    public String select(Column column, String pattern)
    public String select(Criteria criteria)
    public String preparedInsert()
    private String columnList(Column[] columns)
    private String valuesList(Object[] fields, final Column[] columns)
    private String selectWithCriteria(String criteria)
    private String placeholderList(Column[] columns)
}

  ์œ„์˜ ์ฝ”๋“œ๋Š” ๋ณ€๊ฒฝํ•  ์ด์œ ๊ฐ€ 2๊ฐ€์ง€๋‹ค. ์•ž์„œ ๋งํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์ƒˆ๋กœ์šด SQL ๋ฌธ์„ ์ง€์›ํ•˜๋ ค๋ฉด Sql ํด๋ž˜์Šค์— ์†์„ ๋Œ€์•ผ ํ•˜๊ณ , ๋˜ํ•œ ๊ธฐ์กด SQL ๋ฌธ ํ•˜๋‚˜๋ฅผ ์ˆ˜์ •ํ•  ๋•Œ๋„ ๋ฐ˜๋“œ์‹œ Sql ํด๋ž˜์Šค์— ์†๋Œ€์•ผ ํ•œ๋‹ค. 

  ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Sql ํด๋ž˜์Šค์—์„œ ํŒŒ์ƒํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์ž. valueList์™€ ๊ฐ™์€ ๋น„๊ณต๊ฐœ ๋ฉ”์„œ๋“œ๋Š” ํ•ด๋‹นํ•˜๋Š” ํŒŒ์ƒ ํด๋ž˜์Šค๋กœ ์˜ฎ๊ธฐ๊ณ  ๋ชจ๋“  ํŒŒ์ƒ ํด๋ž˜์Šค๊ฐ€ ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋น„๊ณต๊ฐœ ๋ฉ”์„œ๋“œ๋Š” Where๊ณผ ColumnList๋ผ๋Š” ๋‘ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค์— ๋„ฃ์ž.

abstract public class Sql {
    public Sql(String table, Column[] columns)
    abstract public String generate();
}

public class CreateSql extends Sql {
    public CreateSql(String table, Column[] columns)
    @Override public String generate()
}

public class SelectSql extends Sql {
    public SelectSql(String table, Column[] columns)
    @Override public String generate()
}
public class InsertSql extends Sql {
    public InsertSql(String table, Column[] columns, Object[] fields)
    @Override public String generate()
    private String valuesList(Object[] fields, final Column[] columns)
}

public class SelectWithCriteriaSql extends Sql {
    public SelectWithCriteriaSql(
            String table, Column[] columns, Criteria criteria)
    @Override public String generate()
}

public class SelectWithMatchSql extends Sql {
    public SelectWithMatchSql(
            String table, Column[] columns, Criteria criteria)
    @Override public String generate()
}

public class FindByKeySql extends Sql {
    public FindByKeySql(
            String table, Column[] columns, String keyColumn, String keyValue)
    @Override public String generate()
}

public class PreparedInsertSql extends Sql {
    public PreparedInsertSql(String table, Column[] columns)
    @Override public String generate()
    private String placeholderList(Column[] columns)
}

public class Where {
    public Where(String criteria)
    public String generate()
}

public class ColumnList {
    public ColumnList(Column[] columns)
    public String generate()
}

  update ๋ฌธ์„ ์ถ”๊ฐ€ํ•  ๋•Œ ๊ธฐ์กด ํด๋ž˜์Šค๋ฅผ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์ „ํ˜€ ์—†๋‹ค. ํ•จ์ˆ˜ ํ•˜๋‚˜๋ฅผ ์ˆ˜์ •ํ–ˆ๋‹ค๊ณ  ๋‹ค๋ฅธ ํ•จ์ˆ˜๊ฐ€ ๋ง๊ฐ€์งˆ ์œ„ํ—˜๋„ ์—†๋‹ค. ์ด๋Š” SRP๋ฅผ ์ง€์›ํ•˜๊ณ  OCP ๋˜ํ•œ ์ง€์›ํ•œ๋‹ค. 

'๐Ÿ“‚ ๊ฐœ๋ฐœ ์„œ์  > ํด๋ฆฐ ์ฝ”๋“œ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

ํด๋ฆฐ ์ฝ”๋“œ(Clean Code) - 13์žฅ  (2) 2023.01.12
ํด๋ฆฐ ์ฝ”๋“œ(Clean Code) - 11์žฅ, 12์žฅ  (0) 2023.01.11
ํด๋ฆฐ ์ฝ”๋“œ(Clean Code) - 8์žฅ, 9์žฅ  (0) 2023.01.10
ํด๋ฆฐ ์ฝ”๋“œ(Clean Code) - 7์žฅ  (0) 2023.01.10
ํด๋ฆฐ ์ฝ”๋“œ(Clean Code) - 4์žฅ, 5์žฅ, 6์žฅ  (0) 2023.01.09
  • 10์žฅ. ํด๋ž˜์Šค ๐Ÿ 
'๐Ÿ“‚ ๊ฐœ๋ฐœ ์„œ์ /ํด๋ฆฐ ์ฝ”๋“œ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • ํด๋ฆฐ ์ฝ”๋“œ(Clean Code) - 13์žฅ
  • ํด๋ฆฐ ์ฝ”๋“œ(Clean Code) - 11์žฅ, 12์žฅ
  • ํด๋ฆฐ ์ฝ”๋“œ(Clean Code) - 8์žฅ, 9์žฅ
  • ํด๋ฆฐ ์ฝ”๋“œ(Clean Code) - 7์žฅ
Amenable
Amenable
CS, ์ž๋ฐ”, ์ž๋ฃŒ๊ตฌ์กฐ, ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์Šคํ”„๋ง, ์Šคํ”„๋ง ๋ถ€ํŠธ์— ํ•ด๋‹นํ•˜๋Š” ๊ฐœ๋ฐœ์— ๊ด€ํ•œ ๋‚ด์šฉ์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.