TIL (Today I Learned)
22.03.01
์ค๋ ์ฝ์ ๋ฒ์
6์ฅ. ๊ฐ์ฒด์ ์๋ฃ๊ตฌ์กฐ
์ฑ ์์ ๊ธฐ์ตํ๊ณ ์ถ์ ๋ด์ฉ
์๋ฃ ์ถ์ํ
๊ตฌํ์ ๊ฐ์ถ๋ ค๋ฉด ์ถ์ํ๊ฐ ํ์ํ๋ค. ์กฐํ ํจ์์ ์ค์ ํจ์๋ก ๋ณ์๋ฅผ ๋ค๋ฃฌ๋ค๊ณ ํด๋์ค๊ฐ ๋์ง๋ ์๋๋ค. ๊ทธ๋ณด๋ค๋ ์ถ์ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํด ์ฌ์ฉ์๊ฐ ๊ตฌํใ ๋ฅด ๋ชจ๋ฅธ ์ฑ ์๋ฃ์ ํต์ฌ์ ์กฐ์ํ ์ ์์ด์ผ ์ง์ ํ ์๋ฏธ์ ํด๋์ค๋ค.
์๋ฃ/๊ฐ์ฒด ๋น๋์นญ
๊ฐ์ฒด ์งํฅ ์ฝ๋์์ ์ด๋ ค์ด ๋ณ๊ฒฝ์ ์ ์ฐจ์ ์ธ ์ฝ๋์์ ์ฌ์ฐ๋ฉฐ,
์ ์ฐจ์ ์ธ ์ฝ๋์์ ์ด๋ ค์ด ๋ณ๊ฒฝ์ ๊ฐ์ฒด ์งํฅ ์ฝ๋์์ ์ฝ๋ค!
1) ๊ฐ์ฒด : ๋์์ ๊ณต๊ฐํ๊ณ ์๋ฃ๋ฅผ ์จ๊ธด๋ค.
- ์ฅ์ : ๊ธฐ์กด ํจ์๋ฅผ ๋ณ๊ฒฝํ์ง ์์ผ๋ฉด์ ์ ํด๋์ค๋ฅผ ์ถ๊ฐํ๊ธฐ ์ฝ๋ค.
- ๋จ์ : ๊ธฐ์กด ๊ฐ์ฒด์ ์๋ก์ด ํจ์๋ฅผ ์ถ๊ฐํ๊ธฐ๋ ์ด๋ ต๋ค.
2) ์๋ฃ ๊ตฌ์กฐ(์ ์ฐจ์งํฅ) : ๋ณ๋ค๋ฅธ ๋์ ์์ด ์๋ฃ/๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ๋ ธ์ถํ๋ค.
- ์ฅ์ : ๊ธฐ์กด ์๋ฃ ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝํ์ง ์์ผ๋ฉด์ ์๋ก์ด ํจ์๋ฅผ ์ถ๊ฐํ๊ธฐ ์ฝ๋ค.
- ๋จ์ : ๊ธฐ์กด ํจ์์ ์ ์๋ฃ ๊ตฌ์กฐ๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด ๊ธฐ์กด ์ฝ๋๋ฅผ ๋ณ๊ฒฝํด์ผ ํ๋ค.
๐ ๋ ๊ฐ์ง ๋ฐฉ์ ์ค ํ ๊ฐ์ง๋ง์ ์ฌ์ฉํ๊ธฐ๋ณด๋ค๋ ์ํฉ์ ๋ฐ๋ผ ์ ํฉํ ๋ฐฉ์์ ์ ์ ํ๊ฒ ์ฌ์ฉํด์ผ ํ๋ค.
๋๋ฏธํฐ ๋ฒ์น
๋ชจ๋์ ์์ ์ด ์กฐ์ํ๋ ๊ฐ์ฒด์ ์์ฌ์ ์ ๋ชฐ๋ผ์ผ ํ๋ค.
ํด๋์ค C์ ๋ฉ์๋ f๋ ๋ค์๊ณผ ๊ฐ์ ๊ฐ์ฒด์ ๋ฉ์๋๋ง ํธ์ถํด์ผ ํ๋ค.
1) ํด๋์ค C
2) f๊ฐ ์์ฑํ ๊ฐ์ฒด
3) f ์ธ์๋ก ๋์ด์จ ๊ฐ์ฒด
4) C ์ธ์คํด์ค ๋ณ์์ ์ ์ฅ๋ ๊ฐ์ฒด
๐ ํ์ฉ๋ ๋ฉ์๋๊ฐ ๋ฐํํ๋ ๊ฐ์ฒด์ ๋ฉ์๋๋ ํธ์ถํ๋ฉด ์ ๋๋ค.
// ๊ธฐ์ฐจ ์ถฉ๋
final String outputDir = ctxt.getOptions().getScratchDir().getAbsolutePath();
๊ตฌ์กฐ์ฒด ๊ฐ์ถ๊ธฐ
๊ฐ์ฒด๋ผ๋ฉด ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ถฐ์ผ ํ๋ค. ๋ฐ๋ผ์ ๋ฌด์ธ๊ฐ๋ฅผ ํ๋ผ๊ณ ๋งํด์ผ์ง ์์ ๋๋ฌ๋ด๋ผ๊ณ ํ๋ฉด ์ ๋๋ค.
์๋ฃ ์ ๋ฌ ๊ฐ์ฒด(Data Transfer Object, DTO)
๊ณต๊ฐ๋ ๋ณ์๊ฐ ์๊ณ ํจ์๋ง ์๋ ํํ์ ํด๋์ค. ์ผ๋ฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํต์ ํ๊ฑฐ๋ ์์ผ์์ ๋ฐ์ ๋ฉ์์ง์ ๊ตฌ๋ฌธ์ ๋ถ์ํ ๋ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋๋ค.
DTO์ ์ผ๋ฐ์ ์ธ ํํ๋ bean ๊ตฌ์กฐ์ด๋ฉฐ, private ๋ณ์๋ฅผ getter/setter ํจ์๋ก ์กฐ์ํ๋ค. ์ด๊ฒ๋ค์ ๋ณ์๋ฅผ ์บก์ํํ๊ธฐ ์ํ ์กฐ์น์ด์ง๋ง, ์ฌ์ค์ ๋ณ๋ค๋ฅธ ์ด์ต์ ์ ๊ณตํ์ง๋ ์๋๋ค.
ํ์ฑ ๋ ์ฝ๋
DTO์ ํน์ํ ํํ. DTO์ ๋ง์ฐฌ๊ฐ์ง๋ก public ๋ณ์๊ฐ ์๊ฑฐ๋ private ๋ณ์์ getter/setter๊ฐ ์๋ ์๋ฃ๊ตฌ์กฐ์ง๋ง, save๋ find๊ฐ์ ํ์ ํจ์๋ ์ ๊ณตํ๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ด๋ ๋ค๋ฅธ ์์ค์์ ์๋ฃ๋ฅผ ์ง์ ๋ณํํ ๊ฒฐ๊ณผ๋ค.
-> ํ์ฑ ๋ ์ฝ๋๋ ์๋ฃ ๊ตฌ์กฐ๋ก ์ทจ๊ธํ๋ค.
์ค๋ ์ฝ์ ์๊ฐ
์ ์ฐจ ์งํฅ vs ๊ฐ์ฒด ์งํฅ์ ์ฐจ์ด๋ฅผ ์ฝ๋๋ก ํ์คํ๊ฒ ์๊ฒ ๋๋ค. ์ฌ์ค ์๋ฐ๋ฅผ ์ฌ์ฉํ๋ ์ฌ๋์ ๋ฌด์กฐ๊ฑด ๊ฐ์ฒด ์งํฅ ์ฝ๋๋ง์ ๊ณ ์ํ๋ ๊ฒ ๋ง๋ค๋ ์๊ฐ์ ๊ฐ์ง๊ณ ์์๋๋ฐ, ๋์ด ์ ์ ํ๊ฒ ๋ฒ๊ฐ์์ ์ฌ์ฉํ๋ ๊ฒ ์ค์ํ๋ค๋ ๊ฒ์ ๋๊ผ๋ค. ๊ทธ๋ฆฌ๊ณ ์ง๊ธ๊น์ง ๋ด๊ฐ ์ง๋ ์ฝ๋๋ ์ก์ข ๊ตฌ์กฐ์๋ค๋ ๊ฒ๋ ์๊ฒ ๋์๋ค
๊ถ๊ธํ๊ฑฐ๋ ์ ์ดํด๋์ง ์๋ ๋ด์ฉ
Dual-Patch(Double Dispatch)
์ด๊ฑธ๋ก ๊ฒ์ํ๋ ์๋ฌด๊ฒ๋ ์ ๋์์ double dispatch๋ก ๊ฒ์ํ๋ค
- ๋ฉ์๋ ๋์คํจ์น๋ฅผ ๋ ๋ฒ ์ฌ์ฉํ์ฌ ์ ์ฐ์ฑ์ ๋์ด๋ ์์ .
interface Post {
void PostOn(SNS sns); // ํ ๋ฒ
}
class Text implements Post {
public void postOn(SNS sns) {
sns.post(this); // ๋ ๋ฒ
}
}
https://wisdom-and-record.tistory.com/89
VISITOR ํจํด
๋ฐฉ๋ฌธ์์ ๋ฐฉ๋ฌธ ๊ณต๊ฐ์ ๋ถ๋ฆฌํ์ฌ ๋ฐฉ๋ฌธ ๊ณต๊ฐ์ด ๋ฐฉ๋ฌธ์๋ฅผ ๋ง์ดํ ๋, ์ดํ์ ๋ํ ํ๋์ ๋ฐฉ๋ฌธ์์๊ฒ ์์ํ๋ ํจํด
- Visitor : Eliment๋ฅผ ๋ฐฉ๋ฌธํ๊ณ ๋์์ ๊ตฌํํ๊ธฐ ์ํ ์ธํฐํ์ด์ค
- ConcreteVisitor1, 2 : Visitor๋ฅผ ์์๋ฐ์ ์ค์ ๋์์ ๊ตฌํํ ํด๋์ค
- Element : visitor๊ฐ ๋ฐฉ๋ฌธํ์ฌ ์ํํด์ผ ํ๋ ๋์. ๊ตฌ์กฐ๋ฅผ ๊ตฌ์ฑํ๋ ์ธํฐํ์ด์ค
- ConcreteElementA, B : Element๋ฅผ ์์๋ฐ์ ์ค์ ๋์์ ๊ตฌํํ ํด๋์ค
- ObjectStructure : Element๋ฅผ ๊ฐ๊ณ ์๋ ํด๋์ค
๐ ๋ฐ์ดํฐ์ ์๊ณ ๋ฆฌ์ฆ์ ๋ถ๋ฆฌํ์ฌ ๋ฐ์ดํฐ์ ๋ ๋ฆฝ์ฑ์ ๋์ฌ์ค๋ค.
https://dailyheumsi.tistory.com/216
ํด๋ฆฌ์คํฑ(heuristic)
์๊ฐ์ด๋ ์ ๋ณด๊ฐ ์ถฉ๋ถํ์ง ์์ ํฉ๋ฆฌ์ ์ธ ํ๋จ์ ํ ์ ์์ ๋, ํน์ ๊ตณ์ด ํฉ๋ฆฌ์ ํ๋จ์ ํ ํ์๊ฐ ์์ ๋ ์ฌ๋๋ค์ด ์ ์ํ๊ฒ ์ฌ์ฉํ๋ ์ด๋ฆผ ์ง์
ํ์ฑ ๋ ์ฝ๋
๊ฒ์ํด๋ ์ ๋์์ ๋ญ๊ฐ ํ๋๋ Rails์์ ์ฌ์ฉํ๋ ํด๋์ค ์ด๋ฆ์ด์๋ค. ์์ธํ ์ค๋ช ์ ์๋ ์ฐธ๊ณ
http://guruble.com/activerecord%EB%8A%94-%EC%99%9C-active-record%EC%9D%B8%EA%B0%80/
'๐ ๊ฐ๋ฐ ์์ > Clean Code' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Clean Code] 7์ฅ ์ค๋ฅ ์ฒ๋ฆฌ (0) | 2022.03.05 |
---|---|
[Clean Code] 4์ฅ ์ฃผ์ (0) | 2022.02.26 |
[ํด๋ฆฐ ์ฝ๋] 3์ฅ ํจ์ (0) | 2022.02.23 |
[ํด๋ฆฐ ์ฝ๋] 2์ฅ ์๋ฏธ ์๋ ์ด๋ฆ (0) | 2022.02.21 |
[ํด๋ฆฐ ์ฝ๋] 1์ฅ ๊นจ๋ํ ์ฝ๋ (0) | 2022.02.19 |
๋๊ธ