๐Ÿ“• [Object] 10์žฅ. ์ƒ์†๊ณผ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ

๋ฐ•์ƒ๋ฏผยท2024๋…„ 3์›” 19์ผ

Book

๋ชฉ๋ก ๋ณด๊ธฐ
16/22
post-thumbnail

โญ๏ธ ์ƒ์†๊ณผ ์ค‘๋ณต ์ฝ”๋“œ

๐Ÿ“Œ DRY ์›์น™

์ค‘๋ณต ์ฝ”๋“œ๋Š” ๋ณ€๊ฒฝ์„ ๋ฐฉํ•ดํ•œ๋‹ค.
์ด๊ฒƒ์ด ์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•ด์•ผ ํ•˜๋Š” ๊ฐ€์žฅ ํฐ ์ด์œ ๋‹ค. ์ค‘๋ณต ์ฝ”๋“œ๊ฐ€ ๊ฐ€์ง€๋Š” ๊ฐ€์žฅ ํฐ ๋ฌธ์ œ๋Š” ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋…ธ๋ ฅ์„ ๋ช‡ ๋ฐฐ๋กœ ์ฆ๊ฐ€ ์‹œํ‚จ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ค‘๋ณต ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•˜๋Š” ๊ธฐ์ค€์€ ๋ณ€๊ฒฝ์ด๋‹ค. ์š”๊ตฌ์‚ฌํ•ญ์ด ๋ณ€๊ฒฝ ๋์„ ๋•Œ ๋‘ ์ฝ”๋“œ๋ฅผ ํ•จ๊ป˜ ์ˆ˜์ •ํ•ด์•ผ ํ•œ๋‹ค๋ฉด ์ด ์ฝ”๋“œ๋Š” ์ค‘๋ณต์ด๋‹ค.

DRY ์›์น™
DRY๋Š” '๋ฐ˜๋ณตํ•˜์ง€ ๋งˆ๋ผ'๋ผ๋Š” ๋œป์˜ Don't Repeat Yourself์˜ ์ฒซ ๊ธ€์ž๋ฅผ ๋ชจ์•„ ๋งŒ๋“  ์šฉ์–ด๋กœ ๊ฐ„๋‹จํžˆ ๋งํ•ด ๋™์ผํ•œ ์ง€์‹์„ ์ค‘๋ณตํ•˜์ง€ ๋ง๋ผ๋Š” ๊ฒƒ์ด๋‹ค.
DRY ์›์น™์€ ํ•œ๋ฒˆ, ๋‹จ ํ•œ๋ฒˆ(Once and Only One) ์›์น™ ๋˜๋Š” ๋‹จ์ผ ์ง€์  ์ œ์–ด(Single-Point Control) ์›์น™์ด๋ผ๊ณ ๋„ ๋ถ€๋ฅธ๋‹ค.

๐Ÿ“Œ ์ค‘๋ณต๊ณผ ๋ณ€๊ฒฝ

์ƒ์†์„ ์ด์šฉํ•ด ์ฝ”๋“œ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ์„ธ์› ๋˜ ๊ฐ€์ •์ด๋‚˜ ์ถ”๋ก  ๊ณผ์ •์„ ์ •ํ™•ํ•˜๊ฒŒ ์ดํ•ดํ•ด์•ผ ํ•œ๋‹ค. ์ด๊ฒƒ์€ ์ž์‹ ํด๋ž˜์Šค์˜ ์ž‘์„ฑ์ž๊ฐ€ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ •ํ™•ํ•œ ์ง€์‹์„ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
๋”ฐ๋ผ์„œ ์ƒ์†์€ ๊ฒฐํ•ฉ๋„๋ฅผ ๋†’์ธ๋‹ค๊ณ  ์ด์•ผ๊ธฐํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“Œ ๊ฐ•ํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋œ Phone๊ณผ NightlyDiscountPhone

๋ถ€๋ชจ ํด๋ž˜์Šค์™€ ์ž์‹ ํด๋ž˜์Šค ์‚ฌ์ด์˜ ๊ฒฐํ•ฉ์ด ๋ฌธ์ œ์ธ ์ด์œ ๋ฅผ ์‚ดํŽด๋ณด์ž.

NightlyDiscountPhone์€ ๋ถ€๋ชจ ํด๋ž˜์Šค์ธ Phone์˜ calculateFee ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•œ๋‹ค. ๋˜ํ•œ ๋ฉ”์„œ๋“œ ์•ˆ์—์„œ super ์ฐธ์กฐ๋ฅผ ์ด์šฉํ•ด ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. NightlyDiscountPhone์˜ calculateFee ๋ฉ”์„œ๋“œ๋Š” ์ž์‹ ์ด ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•œ Phone์˜ calculateFee ๋ฉ”์„œ๋“œ๊ฐ€ ๋ชจ๋“  ํ†ตํ™”์— ๋Œ€ํ•œ ์š”๊ธˆ์˜ ์ดํ•ฉ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์— ๊ธฐ๋ฐ˜ํ•˜๊ณ  ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ์„ธ๊ธˆ์„ ๋ถ€๊ณผํ•˜๋Š” ์š”๊ตฌ์‚ฌํ•ญ์ด ์ถ”๊ฐ€๋œ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ? calculateFee ๋ฉ”์„œ๋“œ์—์„œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•  ๋•Œ taxRate๋ฅผ ์ด์šฉํ•ด ์„ธ๊ธˆ์„ ๋ถ€๊ณผํ•ด์•ผ ํ•œ๋‹ค.

public class Phone {
    private double taxRate; // ์„ธ๊ธˆ ๋ถ€๊ณผ ์š”๊ตฌ์‚ฌํ•ญ์œผ๋กœ ์ธํ•œ ๋ณ€์ˆ˜ ์ถ”๊ฐ€
    public Phone(Money amount, Duration seconds, double taxRate) {
        ...
        this.taxTate = taxRate;
    }

    public calculateFee() {
        ...
        return result.plus(result.times(taxRate));
    }

    public double getTaxRate() {
        return this.taxRate;
    }
}

NigthlyDiscountPhone์€ ์ƒ์„ฑ์ž์—์„œ ์ „๋‹ฌ๋ฐ›์€ taxRate๋ฅผ ๋ถ€๋ชจ ํด๋ž˜์Šค์ธ Phone์˜ ์ƒ์„ฑ์ž๋กœ ์ „๋‹ฌํ•ด์•ผ ํ•œ๋‹ค. ๋˜ํ•œ Phone๊ณผ ๋™์ผํ•˜๊ฒŒ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•  ๋•Œ taxRate๋ฅผ ์ด์šฉํ•ด ์„ธ๊ธˆ์„ ๋ถ€๊ณผํ•ด์•ผ ํ•œ๋‹ค.

public class NightlyDiscountPhone extends PHone {
    public NightlyDiscountPhone(Money nightlyAmount, Money regularAmount, Duration seconds, double taxRate) {
        super(regularAmount, seconds, taxRate);
        ...
    }

    @Override
    public Money calculateFee() {
        ...
        return result.minus(nightlyFee.plus(nightlyFee.times(getTaxRate()));
    }
}

NightlyDiscountPhone์„ Phone์˜ ์ž์‹ ํด๋ž˜์Šค๋กœ ๋งŒ๋“  ์ด์œ ๋Š” Phone์˜ ์ฝ”๋“œ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๊ณ  ์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋‹ค. ํ•˜์ง€๋งŒ ์„ธ๊ธˆ์„ ๋ถ€๊ณผํ•˜๋Š” ๋กœ์ง์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด Phone์„ ์ˆ˜์ •ํ•  ๋•Œ ์œ ์‚ฌํ•œ ์ฝ”๋“œ๋ฅผ NightlyDiscountPhone์—๋„ ์ถ”๊ฐ€ํ•ด์•ผ ํ–ˆ๋‹ค.

๋‹ค์‹œ ๋งํ•ด์„œ ์ฝ”๋“œ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ์ƒ์†์„ ์‚ฌ์šฉํ–ˆ์Œ์—๋„ ์„ธ๊ธˆ์„ ๊ณ„์‚ฐํ•˜๋Š” ๋กœ์ง์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ๋กœ์šด ์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์ด๊ฒƒ์€ NightlyDiscountPhone์ด Phone์˜ ๊ตฌํ˜„์— ๋„ˆ๋ฌด ๊ฐ•ํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋ผ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋‹ค. ์ด์ฒ˜๋Ÿผ ์ƒ์† ๊ด€๊ณ„๋กœ ์—ฐ๊ฒฐ๋œ ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ณ€๊ฒฝ์— ์ทจ์•ฝํ•ด์ง€๋Š” ํ˜„์ƒ์„ ๊ฐ€๋ฆฌ์ผœ ์ทจ์•ฝํ•œ ๊ธฐ๋ฐ˜ ํด๋ž˜์Šค ๋ฌธ์ œ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

โญ๏ธ ์ทจ์•ฝํ•œ ๊ธฐ๋ฐ˜ ํด๋ž˜์Šค ๋ฌธ์ œ

๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ž‘์€ ๋ณ€๊ฒฝ์—๋„ ์ž์‹ ํด๋ž˜์Šค๋Š” ์ปดํŒŒ์ผ ์˜ค๋ฅ˜์™€ ์‹คํ–‰ ์—๋Ÿฌ๋ผ๋Š” ๊ณ ํ†ต์— ์‹œ๋‹ฌ๋ ค์•ผ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ๊ตฌํ˜„์„ ์ƒ์†ํ•œ ๊ฒฝ์šฐ(extends๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ) ํŒŒ์ƒ ํด๋ž˜์Šค๋Š” ๊ธฐ๋ฐ˜ ํด๋ž˜์Šค์— ๊ฐ•ํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋˜๋ฉฐ, ์ด ๋‘˜ ์‚ฌ์ด์˜ ๋ฐ€์ ‘ํ•œ ์—ฐ๊ฒฐ์€ ๋ฐ”๋žŒ์งํ•˜์ง€ ์•Š๋‹ค.

์ƒ์†์€ ์ž์‹ ํด๋ž˜์Šค๋ฅผ ์ ์ง„์ ์œผ๋กœ ์ถ”๊ฐ€ํ•ด์„œ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜๋Š” ๋ฐ๋Š” ์šฉ์ดํ•˜์ง€๋งŒ ๋†’์€ ๊ฒฐํ•ฉ๋„๋กœ ์ธํ•ด ๋ถ€๋ชจ ํด๋ž˜์Šค๋ฅผ ์ ์ง„์ ์œผ๋กœ ๊ฐœ์„ ํ•˜๋Š” ๊ฒƒ์€ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ ๋‹ค. ์ทจ์•ฝํ•œ ๊ธฐ๋ฐ˜ ํด๋ž˜์Šค ๋ฌธ์ œ๋Š” ์บก์Аํ™”๋ฅผ ์•ฝํ™”์‹œํ‚ค๊ณ  ๊ฒฐํ•ฉ๋„๋ฅผ ๋†’์ธ๋‹ค.

๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ๊ตฌํ˜„๊ณผ ๊ด€๋ จ๋œ ์„ธ๋ถ€์‚ฌํ•ญ์„ ํผ๋ธ”๋ฆญ ์ธํ„ฐํŽ˜์ด์Šค ๋’ค๋กœ ์บก์Аํ™”ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์บก์Аํ™”๋Š” ๋ณ€๊ฒฝ์— ์˜ํ•œ ํŒŒ๊ธ‰ํšจ๊ณผ๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค. ๊ฐ์ฒด๋Š” ๋ณ€๊ฒฝ ๋ ์ง€๋„ ๋ชจ๋ฅด๋Š” ๋ถˆ์•ˆ์ •ํ•œ ์š”์†Œ๋ฅผ ์บก์Аํ™”ํ•จ์œผ๋กœ์จ ํŒŒ๊ธ‰ํšจ๊ณผ๋ฅผ ๊ฑฑ์ •ํ•˜์ง€ ์•Š๊ณ ๋„ ์ž์œ ๋กญ๊ฒŒ ๋‚ด๋ถ€๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

์ƒ์†์€ ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ ์œ„ํ•ด ์บก์Аํ™”์˜ ์žฅ์ ์„ ํฌ์„์‹œํ‚ค๊ณ  ๊ตฌํ˜„์— ๋Œ€ํ•œ ๊ฒฐํ•ฉ๋„๋ฅผ ๋†’์ž„์œผ๋กœ์จ ๊ฐ์ฒด์ง€ํ–ฅ์ด ๊ฐ€์ง„ ๊ฐ•๋ ฅํ•จ์„ ๋ฐ˜๊ฐ์‹œํ‚จ๋‹ค.

๐Ÿ“Œ ๋ถˆํ•„์š”ํ•œ ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์† ๋ฌธ์ œ

java.util.Properties์™€ java.util.Stack์€ ๋Œ€ํ‘œ์ ์ธ ์ž˜๋ชป๋œ ์ƒ์†์˜ ์˜ˆ์ด๋‹ค.

์ž๋ฐ”์˜ ์ดˆ๊ธฐ ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ ๊ฐœ๋ฐœ์ž๋“ค์€ ์š”์†Œ์˜ ์ถ”๊ฐ€, ์‚ญ์ œ ์˜คํผ๋ ˆ์ด์…˜์„ ์ œ๊ณตํ•˜๋Š” Vector๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด Stack์„ Vector์˜ ์ž์‹ ํด๋ž˜์Šค๋กœ ๊ตฌํ˜„ํ–ˆ๋‹ค.

Vector๋Š” ์ž„์˜์˜ ์œ„์น˜(index)์—์„œ ์š”์†Œ๋ฅผ ์กฐํšŒํ•˜๊ณ , ์ถ”๊ฐ€ํ•˜๊ณ , ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋Š” get, add, remove ์˜คํผ๋ ˆ์ด์…˜์„ ์ œ๊ณตํ•œ๋‹ค. ์ด์— ๋น„ํ•ด Stack์€ ๋งจ ๋งˆ์ง€๋ง‰ ์œ„์น˜ ์—์„œ๋งŒ ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋Š” push, pop ์˜คํผ๋ ˆ์ด์…˜์„ ์ œ๊ณตํ•œ๋‹ค.

Stack<String> stack = new Stack<>();
stack.push("1st");
stack.push("2nd");
stack.push("3rd");

stack.add(0, "4th");
assertEquals("4th", stack.pop()); // ์—๋Ÿฌ!

์œ„ ์ฝ”๋“œ์—์„œ Stack์— ๋งˆ์ง€๋ง‰์œผ๋กœ ์ถ”๊ฐ€ํ•œ ๊ฐ’์€ "4th"์ง€๋งŒ pop ๋ฉ”์„œ๋“œ์˜ ๋ฐ˜ํ™˜๊ฐ’์€ "3rd"๋‹ค. ๊ทธ ์ด์œ ๋Š” Vector์˜ add ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ์Šคํƒ์˜ ๋งจ ์•ž์— "4th"๋ฅผ ์ถ”๊ฐ€ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๐Ÿ“Œ ๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์˜ ์˜ค์ž‘์šฉ ๋ฌธ์ œ

์กฐ์Šˆ์•„ ๋ธ”๋กœ์น˜๋Š” ํด๋ž˜์Šค๊ฐ€ ์ƒ์†๋˜๊ธฐ๋ฅผ ์›ํ•œ๋‹ค๋ฉด ์ƒ์†์„ ์œ„ํ•ด ํด๋ž˜์Šค๋ฅผ ์„ค๊ณ„ํ•˜๊ณ  ๋ฌธ์„œํ™”ํ•ด์•ผ ํ•˜๋ฉฐ, ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋Š” ์ƒ์†์„ ๊ธˆ์ง€์‹œ์ผœ์•ผ ํ•œ๋‹ค๊ณ  ์ฃผ์žฅํ•œ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ž˜๋œ API ๋ฌธ์„œ๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ๋ฌด์Šจ ์ผ(what)์„ ํ•˜๋Š”์ง€๋ฅผ ๊ธฐ์ˆ ํ•ด์•ผ ํ•˜๊ณ , ์–ด๋–ป๊ฒŒ ํ•˜๋Š”์ง€(how)๋ฅผ ์„ค๋ช…ํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค๋Š” ํ†ต๋…์„ ์–ด๊ธฐ๋Š” ๊ฒƒ์€ ์•„๋‹๊นŒ?
์–ด๊ธฐ๋Š” ๊ฒƒ์ด๋‹ค. ์ด ๋˜ํ•œ ์ƒ์†์ด ์บก์Аํ™”๋ฅผ ์œ„๋ฐ˜ํ•จ์œผ๋กœ์จ ์ดˆ๋ž˜๋œ ๋ถˆํ–‰์ธ ๊ฒƒ์ด๋‹ค.

์„ค๊ณ„๋Š” ํŠธ๋ ˆ์ด๋“œ์˜คํ”„ ํ™œ๋™์ด๋ผ๋Š” ์‚ฌ์‹ค์„ ๊ธฐ์–ตํ•ด์•ผ ํ•œ๋‹ค. ์ƒ์†์€ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ ์œ„ํ•ด ์บก์Аํ™”๋ฅผ ํฌ์ƒํ•œ๋‹ค. ์™„๋ฒฝํ•œ ์บก์Аํ™”๋ฅผ ์›ํ•œ๋‹ค๋ฉด ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ ํฌ๊ธฐํ•˜๊ฑฐ๋‚˜ ์ƒ์† ์ด์™ธ์˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

โญ๏ธ Phone ๋‹ค์‹œ ์‚ดํŽด๋ณด๊ธฐ

๐Ÿ“Œ ์ถ”์ƒํ™”์— ์˜์กดํ•˜์ž

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์€ ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๊ตฌํ˜„์ด ์•„๋‹Œ ์ถ”์ƒํ™”์— ์˜์กดํ•˜๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค. ์ •ํ™•ํ•˜๊ฒŒ ๋งํ•˜๋ฉด ๋ถ€๋ชจ ํด๋ž˜์Šค์™€ ์ž์‹ ํด๋ž˜์Šค ๋ชจ๋‘ ์ถ”์ƒํ™”์— ์˜์กดํ•˜๋„๋ก ์ˆ˜์ •ํ•ด์•ผ ํ•œ๋‹ค. ๊ฐœ์ธ์ ์œผ๋กœ ์ฝ”๋“œ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ์ƒ์†์„ ๋„์ž…ํ•  ๋•Œ ๋”ฐ๋ฅด๋Š” ๋‘ ๊ฐ€์ง€ ์›์น™์ด ์žˆ๋‹ค.

  • ๋‘ ๋ฉ”์„œ๋“œ๊ฐ€ ์œ ์‚ฌํ•˜๊ฒŒ ๋ณด์ธ๋‹ค๋ฉด ์ฐจ์ด์ ์„ ๋ฉ”์„œ๋“œ๋กœ ์ถ”์ถœํ•˜๋ผ.

    • ๋ฉ”์„œ๋“œ ์ถ”์ถœ์„ ํ†ตํ•ด ๋‘ ๋ฉ”์„œ๋“œ๋ฅผ ๋™์ผํ•œ ํ˜•ํƒœ๋กœ ๋ณด์ด๋„๋ก ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
  • ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ฝ”๋“œ๋ฅผ ํ•˜์œ„๋กœ ๋‚ด๋ฆฌ์ง€ ๋ง๊ณ  ์ž์‹ ํด๋ž˜์Šค์˜ ์ฝ”๋“œ๋ฅผ ์ƒ์œ„๋กœ ์˜ฌ๋ ค๋ผ.

    • ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๊ตฌ์ฒด์ ์ธ ๋ฉ”์„œ๋“œ๋ฅผ ์ž์‹ ํด๋ž˜์Šค๋กœ ๋‚ด๋ฆฌ๋Š” ๊ฒƒ๋ณด๋‹ค ์ž์‹ ํด๋ž˜์Šค์˜ ์ถ”์ƒ์ ์ธ ๋ฉ”์„œ๋“œ๋ฅผ ๋ถ€๋ชจ ํด๋ž˜์Šค๋กœ ์˜ฌ๋ฆฌ๋Š” ๊ฒƒ์ด ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ์‘์ง‘๋„ ์ธก๋ฉด์—์„œ ๋” ๋›ฐ์–ด๋‚œ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

โญ๏ธ ์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ๋ถ€๋ชจ ํด๋ž˜์Šค๋กœ ์˜ฌ๋ ค๋ผ

๋ถ€๋ชจ ํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜์ž. ๋ชฉํ‘œ๋Š” ๋ชจ๋“  ํด๋ž˜์Šค๋“ค์ด ์ถ”์ƒํ™”์— ์˜์กดํ•˜๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด ํด๋ž˜์Šค๋Š” ์ถ”์ƒ ํด๋ž˜์Šค๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์ ํ•ฉํ•  ๊ฒƒ์ด๋‹ค.

๋ชจ๋“  ํ•˜์œ„ ํด๋ž˜์Šค๊ฐ€ ์ด ํ–‰๋™์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค๋ ค๋ฉด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ์–‘์‚ฐํ•˜๊ฑฐ๋‚˜ ์ด ํ–‰๋™์„ ์ƒ์œ„ ํด๋ž˜์Šค๋กœ ์˜ฌ๋ฆฌ๋Š” ์ˆ˜๋ฐ–์— ์—†๋‹ค.

๐Ÿ“Œ ์ฐจ์ด์— ์˜ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

์‹œ๊ฐ„์ด ํ๋ฅด๊ณ  ๊ฐ์ฒด์ง€ํ–ฅ์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ๊นŠ์–ด์ง€๋ฉด์„œ ์‚ฌ๋žŒ๋“ค์€ ์ฝ”๋“œ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋งน๋ชฉ์ ์œผ๋กœ ์ƒ์†์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์œ„ํ—˜ํ•˜๋‹ค๋Š” ์‚ฌ์‹ค์„ ๊นจ๋‹ซ๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค. ์ƒ์†์ด ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์ด๋ผ๋Š” ์ธก๋ฉด์—์„œ ๋งค์šฐ ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ธ ๊ฒƒ์€ ์‚ฌ์‹ค์ด์ง€๋งŒ ๊ฐ•๋ ฅํ•œ ๋งŒํผ ์ž˜๋ชป ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ์— ๋Œ์•„์˜ค๋Š” ํ”ผํ•ด ์—ญ์‹œ ํฌ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋ผˆ์ €๋ฆฌ๊ฒŒ ๊ฒฝํ—˜ํ•œ ๊ฒƒ์ด๋‹ค.

์ƒ์†์˜ ์˜ค์šฉ๊ณผ ๋‚จ์šฉ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ดํ•ดํ•˜๊ณ  ํ™•์žฅํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ ๋‹ค.


์ถœ์ฒ˜
์˜ค๋ธŒ์ ํŠธ - ์ฝ”๋“œ๋กœ ์ดํ•ดํ•˜๋Š” ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„
https://github.com/eternity-oop/object

0๊ฐœ์˜ ๋Œ“๊ธ€