6์ฅ. ๊ฐ์ฒด์ ์๋ฃ ๊ตฌ์กฐ
๐งฉ ์๋ฃ๋ฅผ ๊ฐ์ถฐ์ผ ํ๋ ์ด์
๋ณ์๋ฅผ private์ผ๋ก ๊ฐ์ถ๋ ์ด์ ๋ ๋จ์ํ๋ค.
๋ค๋ฅธ ์ฝ๋๊ฐ ๋ณ์์ ์ง์ ์์กดํ์ง ์๊ฒ ํ๋ ค๋ ๊ฒ.
๊ทธ๋์ผ ๋์ค์ ๋ด๋ถ ๊ตฌํ์ ๋ง์๋๋ก ๋ฐ๊พธ๋๋ผ๋ ๋ฌธ์ ๊ฐ ์๊ธฐ์ง ์๋๋ค.
๊ทธ๋ฐ๋ฐ ๋ง์ ํ๋ก๊ทธ๋๋จธ๋ค์ด get, set ํจ์๋ง ๋์ปฅ ๋ง๋ค์ด์ ๊ฒฐ๊ตญ ๋ณ์์ ์ง์ ์ ๊ทผํ๊ฒ ๋ง๋ ๋ค.
์ด๊ฑด ์ฌ์ค์ ์บก์ํ๋ฅผ ๊นจ๋ ๊ฒ๊ณผ ๋ค๋ฆ์๋ค.
๋จ์ํ ์กฐํ/์ค์ ํจ์๋ฅผ ๋ถ์ธ๋ค๊ณ ํด๋์ค๊ฐ ๋๋ ๊ฒ ์๋๋ค.
์ง์ง ์บก์ํ๋ “๊ตฌํ์ด ์ด๋ป๊ฒ ๋์ด ์๋์ง ์ธ๋ถ์์ ์ ์ ์๊ฒ ๋ง๋๋ ๊ฒ”์ด๋ค.
๐งญ ์๋ฃ ์ถ์ํ๋?
์์ 1: ๋์ ์ถ์ํ
public class Point {
public double x;
public double y;
}
→ ๋ด๋ถ ๊ตฌํ์ด ๊ทธ๋๋ก ๋๋ฌ๋ ๋จ์ํ ์๋ฃ ๊ตฌ์กฐ์ผ ๋ฟ์ด๋ค.
์์ 2: ์ข์ ์ถ์ํ
public interface Point {
double getX();
double getY();
void setCartesian(double x, double y);
double getR();
double getTheta();
void setPolar(double r, double theta);
}
→ ์ด ์ฝ๋๋ง ๋ด์ ์ง๊ต์ขํ๊ณ๋ฅผ ์ฐ๋์ง, ๊ทน์ขํ๊ณ๋ฅผ ์ฐ๋์ง ์ ํ ์ ์ ์๋ค.
๊ตฌํ ๋ฐฉ์์ด ์์ ํ ๊ฐ์ถฐ์ ธ ์๊ณ , ์ธํฐํ์ด์ค๋ง์ผ๋ก๋ ์๋๋ฅผ ์ถฉ๋ถํ ํํํ๊ณ ์๋ค.
์ด๋ฐ ๋ฐฉ์์ด ์ง์ง ์๋ฃ ์ถ์ํ์ ๊ฐ๊น์ด ์ค๊ณ๋ค.
๐ ๊ฐ์ฒด vs ์๋ฃ ๊ตฌ์กฐ: ์๋ก ๋ฐ๋๋๋ ํน์ฑ
| ๊ฐ์ฒด(Object) | ์๋ฃ ๊ตฌ์กฐ(Data Structure) |
| ์๋ฃ๋ฅผ ๊ฐ์ถ๊ณ ํจ์๋ง ๊ณต๊ฐํจ | ์๋ฃ๋ฅผ ๊ณต๊ฐํ๊ณ ํจ์๋ ๊ฑฐ์ ์์ |
| ์ ์๋ฃ ํ์ ์ถ๊ฐ๋ ์ฌ์ | ์ ๋์(ํจ์) ์ถ๊ฐ๋ ์ฌ์ |
| ์ ๋์ ์ถ๊ฐ๋ ์ด๋ ค์ | ์ ์๋ฃ ํ์ ์ถ๊ฐ๋ ์ด๋ ค์ |
→ ๋ ์ค ํ๋๊ฐ ๋ ์ข๋ค๊ณ ๋งํ ์ ์๋ค. ๋ฌธ์ ์ ๋ฐ๋ผ ๋ง๋ ๊ตฌ์กฐ๋ฅผ ๊ณ ๋ฅด๋ ๊ฒ ์ค์ํ๋ค.
๐ฅ ๊ธฐ์ฐจ ์ถฉ๋๊ณผ ๋๋ฏธํฐ ๋ฒ์น
์๋ ์ฝ๋๋ ๋ณด๊ธฐ์ ๊ฐ๋จํ์ง๋ง ๋๋ฏธํฐ ๋ฒ์น์ ์๋ฐํ๊ณ ์๋ค.
final String outputDir = ctxt.getOptions().getScratchDir().getAbsolutePath();
์ด๋ ๊ฒ ๋๋ฉด ctxt๊ฐ ๋ด๋ถ์ ์ผ๋ก ๋ฌด์์ ๊ฐ๊ณ ์๋์ง ์ธ๋ถ ์ฝ๋๊ฐ ๋๋ฌด ๋ง์ด ์์์ผ ํ๋ค.
→ ๊ฐ์ ๋ ๋ฐฉ๋ฒ:
BufferedOutputStream bos = ctxt.createScratchFileStream(classFileName);
๋ฌด์์ ํ๋ผ๊ณ ์์ผ์ผ์ง, ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ๊บผ๋ด์ ์กฐ์ํ์ง ๋ง์.
๐งฑ ์ก์ข
๊ตฌ์กฐ๋ ํผํ์
๊ฐ์ฒด์ ์๋ฃ ๊ตฌ์กฐ์ ํน์ฑ์ ์ด์คํ๊ฒ ์์ ํด๋์ค๋ ์ฃผ์ํด์ผ ํ๋ค.
์๋ฅผ ๋ค์ด get/set ํจ์๋ ์๊ณ , ์ผ๋ถ ๋น์ฆ๋์ค ๋ก์ง๊น์ง ๋ค์ด ์๋ ํด๋์ค๋
๊ฐ์ฒด๋ ์๋ฃ ๊ตฌ์กฐ๋ ์๋, ์์ชฝ์ ๋จ์ ๋ง ๊ฐ์ ธ์จ ์ก์ข
๊ตฌ์กฐ๊ฐ ๋๋ค.
๊ทธ๋์ ์ ๋งคํ๊ฒ ์๊ธฐ๋ณด๋จ ํ์คํ๊ฒ ๋๋๋ ๊ฒ ๋ซ๋ค.
์๋ฃ ๊ตฌ์กฐ๋ ์๋ฃ ๊ตฌ์กฐ๋ต๊ฒ, ๊ฐ์ฒด๋ ๊ฐ์ฒด๋ต๊ฒ!
๐ฆ DTO์ ํ์ฑ ๋ ์ฝ๋
- DTO (Data Transfer Object)
๋จ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ด๋ ๊ตฌ์กฐ์ฒด.
ํจ์๋ ์๊ฑฐ๋, ์ต์ํ์ get/set๋ง ์กด์ฌํ๋ค. - ํ์ฑ ๋ ์ฝ๋ (Active Record)
๋ฐ์ดํฐ๋ฅผ ๋ด์ผ๋ฉด์ save(), find() ๊ฐ์ DB ๊ด๋ จ ๋์๋ ํฌํจํ๋ ๊ตฌ์กฐ.
→ ๊ทธ๋ฐ๋ฐ ์ฌ๊ธฐ์ ๋น์ฆ๋์ค ๋ก์ง๊น์ง ์น๊ธฐ ์์ํ๋ฉด, ๊ธ์ธ ์ก์ข ๊ตฌ์กฐ๊ฐ ๋์ด๋ฒ๋ฆฌ๋ ์ฃผ์ํด์ผ ํ๋ค.
๊ทธ๋ฌ๋ ํต์ฌ์ ์ญํ ๋ถ๋ฆฌ! ๋ฐ์ดํฐ๋ฅผ ๋ด๋ ๊ตฌ์กฐ๋ ์ ๋ง ๊ทธ ์ญํ ์๋ง ์ง์คํ๋๋ก ์ค๊ณํ๋ ๊ฒ ์ข๋ค.
โ๏ธ ๋ง๋ฌด๋ฆฌํ๋ฉฐ
๊ฐ์ฒด๋ ๋์์ ์ค์ฌ์ผ๋ก, ์๋ฃ ๊ตฌ์กฐ๋ ๋ฐ์ดํฐ๋ฅผ ์ค์ฌ์ผ๋ก ์ค๊ณํ๋ค.
- ์๋ก์ด ํ์ ์ ์์ฃผ ์ถ๊ฐํด์ผ ํ๋ ์ํฉ์ด๋ผ๋ฉด → ๊ฐ์ฒด ์งํฅ ์ค๊ณ๊ฐ ๋ ์ ๋ฆฌํ๊ณ
- ์๋ก์ด ๊ธฐ๋ฅ์ด๋ ๋์์ ๊ณ์ํด์ ์ถ๊ฐํด์ผ ํ๋ค๋ฉด → ์๋ฃ ๊ตฌ์กฐ + ์ ์ฐจํ ์ค๊ณ๊ฐ ์ ํฉํ๋ค
์ค์ํ ๊ฑด ๋ฌด์กฐ๊ฑด “๊ฐ์ฒด ์งํฅ!” ํน์ “์บก์ํ!”๋ฅผ ์ธ์น๋ ๊ฒ ์๋๋ผ,
์ง๊ธ ๋ด๊ฐ ์ด๋ค ๋ฌธ์ ๋ฅผ ํ๊ณ ์๋์ง์ ๋ฐ๋ผ ๊ฐ์ฅ ์ ์ ํ ์ค๊ณ๋ฅผ ์ ํํ ์ค ์๋ ํ๋๋ค.
'๐ > Clean Code(ํด๋ฆฐ ์ฝ๋)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [ํด๋ฆฐ์ฝ๋ ์คํฐ๋] 5์ฅ. ํ์ ๋ง์ถ๊ธฐ (0) | 2025.05.01 |
|---|---|
| [ํด๋ฆฐ์ฝ๋ ์คํฐ๋] 4์ฅ. ์ฃผ์ (0) | 2025.05.01 |
| [ํด๋ฆฐ์ฝ๋ ์คํฐ๋] 3์ฅ. ํจ์ (0) | 2025.04.30 |
| [ํด๋ฆฐ์ฝ๋ ์คํฐ๋] 1&2์ฅ. ํด๋ฆฐ ์ฝ๋์ ์๋ฏธ ์๋ ์ด๋ฆ (0) | 2025.04.30 |