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 |