โ˜• ์ž๋ฐ” : JAVA

[Java] ์ƒ์†์˜ ์žฅ๋‹จ์ , ์ƒ์†์€ ์–ธ์ œ ์จ์•ผ ํ•˜๋Š”๊ฐ€?

๊ฐœ๋ฐœ์ž HOON 2022. 12. 7. 21:19

๐Ÿง 1. ์ƒ์†์ด ๋ญ์ฃ ?

 

 

[Java] ์ƒ์†(Inheritance) ์‚ฌ์šฉ๋ฒ•๊ณผ ์ƒ์†์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

๐Ÿง 1. ์ƒ์†์ด ๋ญ์ฃ ? ํ˜„์‹ค์„ธ๊ณ„์—์„œ์˜ ์ƒ์†์€, ๋ถ€๋ชจ๊ฐ€ ์ž์‹์—๊ฒŒ ์žฌ์‚ฐ์„ ๋ฌผ๋ ค์ฃผ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ž์‹์€ ์ƒ์†์„ ๋ฐ›์œผ๋ฉด ๋ถ€๋ชจ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋˜ ์ž์›์„ ๊ทธ๋Œ€๋กœ ์–ป๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ƒ์†์„ ํ•ด์ฃผ๋ฉด ํ˜„์‹ค์„ธ๊ณ„

hoons-dev.tistory.com

 

์ด์ „ ๊ธ€์„ ์ฐธ๊ณ ํ•˜์‹œ๋ฉด, ์ƒ์†์˜ ์‚ฌ์šฉ๋ฒ•๊ณผ ์ž๋ฐ”์˜ ์ƒ์†์ด ๋ฌด์—‡์ธ์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๐Ÿ˜ฎ 2. ์ƒ์†์˜ ์žฅ๋‹จ์ 

 

์šฐ๋ฆฌ๊ฐ€ ์•Œ๊ณ  ์žˆ๋Š” ์ƒ์†์˜ ์žฅ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

- ์ฝ”๋“œ์˜ ํ™•์žฅ์„ฑ, ์žฌ์‚ฌ์šฉ์„ฑ ์ƒ์Šน
- ์ค‘๋ณต๋œ ์ฝ”๋“œ ์ œ๊ฑฐ๊ฐ€๋Šฅ
- ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ์˜ ๋‹คํ˜•์„ฑ

 

๋‹ค๋งŒ, ์ƒ์†์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ๋ถ€์กฑํ•œ ์ƒํƒœ์—์„œ ์ƒ์†์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด, ์ƒ์†์—๋„ ๋งŽ์€ ๋‹จ์ ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

์ƒ์†์€ ์ฝ”๋“œ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ์ˆ˜๋‹จ์ด์ง€๋งŒ, ํ•ญ์ƒ ์ตœ์„ ์€ ์•„๋‹ˆ๋‹ค. ์ž˜๋ชป ์‚ฌ์šฉํ•˜๋ฉด ์˜ค๋ฅ˜๋ฅผ ๋‚ด๊ธฐ ์‰ฌ์šด ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“ค๊ฒŒ ๋œ๋‹ค.
- ์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” 3ํŒ

โ€ป ์ด์ œ๋ถ€ํ„ฐ ๋‚˜์˜ค๋Š” ์ƒ์†์˜ ๋‹จ์ ์€, ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์†(implements)๊ฐ€ ์•„๋‹Œ, ๊ตฌํ˜„ ์ƒ์†์—์„œ ๋‚˜์˜ค๋Š” ๋ฌธ์ œ์ ์ž…๋‹ˆ๋‹ค.

 

1) ์บก์Аํ™”๋ฅผ ๊นจํŠธ๋ฆฐ๋‹ค

์บก์Аํ™” : ๊ฐ์ฒด์˜ ์†์„ฑ(๋ฐ์ดํ„ฐ ํ•„๋“œ)์™€ ํ–‰์œ„(๋ฉ”์„œ๋“œ)๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ๊ณ , ๊ตฌํ˜„ ๋‚ด์šฉ์„ ์ ‘๊ทผ ์ œ์–ด์ž๋ฅผ ํ†ตํ•ด ์ •๋ณด ์€๋‹‰ํ•ฉ๋‹ˆ๋‹ค.

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

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๊ตฌํ˜„ ๋‚ด์šฉ์„ ์•Œ์•„์•ผ ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๊ณ , ์ด๋Ÿฌํ•œ ๋ถˆํ•„์š”ํ•œ ๊ตฌํ˜„ ๋‚ด์šฉ ๋…ธ์ถœ์€ ์บก์Аํ™”๋ฅผ ๊นจํŠธ๋ฆฌ๋Š” ํ–‰์œ„์ž…๋‹ˆ๋‹ค.

 

๋งŒ์•ฝ, HashSet ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ƒ์†๋ฐ›์•„ ์ƒˆ๋กœ์šด ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ์‹œ๋‹ค.

์ด ์ƒˆ๋กœ์šด ์ž๋ฃŒ๊ตฌ์กฐ(AwesomeHashSet)๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•œ ์ดํ›„์— ๋“ค์–ด์˜จ ์›์†Œ์˜ ์ˆซ์ž๋ฅผ ์นด์šดํŒ…ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

class AwesomeHashSet<E> extends HashSet<E>{
	// ์ƒˆ๋กœ ์ถ”๊ฐ€๋œ ํ•„๋“œ (์ƒˆ๋กœ์šด ์›์†Œ ์ˆ˜ ์นด์šดํŠธ)
	private int addCount = 0;
    
    public AwesomeHashSet(){}
    
    public AwesomeHashSet(int initCap, float loadFactor){
    	super(initCap, loadFactor);
    }
    
    // HashSet์˜ add์™€ addAll์„ ์˜ค๋ฒ„๋ผ์ด๋”ฉ
    @Override
    public boolean add(E e){
    	addCount++;
        return super.add(e);
    }
    
    @Override
    public boolean addAll(Collection<? extends E> c){
    	addCount += c.size();
        return super.addAll(c);
    }
    
    // ์ƒˆ๋กœ ์ƒ์„ฑ๋œ getter
    public int getAddCount(){
    	return addCount;
    }
}

 

์–ผํ• ๋ณด๋ฉด, ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ์ฝ”๋“œ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ ๊ฐœ์˜ ์›์†Œ๋ฅผ addAllํ•˜๊ฒŒ ๋˜๋ฉด, ํ•ด๋‹น ์›์†Œ์˜ ๊ธธ์ด๋งŒํผ ์นด์šดํŒ… ํ•œ ๋‹ค์Œ ๋ถ€๋ชจ์˜ addAll์„ ํ˜ธ์ถœํ•˜๊ณ 

ํ•œ ๊ฐœ์˜ ์›์†Œ๋ฅผ add ํ•˜๊ฒŒ ๋˜๋ฉด, ์นด์šดํŒ…์„ ํ•˜๋‚˜ ๋Š˜๋ฆฌ๊ณ  ๋ถ€๋ชจ์˜ add ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ๊ฐ€ ์—†์–ด๋ณด์ž…๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿฌ๋‚˜, ์ด ์ฝ”๋“œ๋Š” ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

// ๋ฌธ์ œ์˜ ์›์ธ

	/* AbstractCollection.java */
    public boolean addAll(Collection<? extends E> c) {
        boolean modified = false;
        for (E e : c)
            if (add(e)) // add๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค!!
                modified = true;
        return modified;
    }
    
    /* HashSet.java */
    public boolean add(E e) {
        return map.put(e, PRESENT)==null;
    }
// ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ฝ”๋“œ

AwesomeHashSet<String> s = new AwesomeHashSet<>();
s.addAll(List.of("์™€", "์™€์™€", "์™€์™€๋Œ€๋ฐ•"));

 

HashSet์˜ ๋‚ด๋ถ€๋ฅผ ๋“ค์—ฌ๋‹ค๋ณด๋ฉด, addAll ๋ฉ”์†Œ๋“œ ๋‚ด๋ถ€์—๋Š” add ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— "๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ฝ”๋“œ"์ฒ˜๋Ÿผ addAll ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด, AwesomeHashSet.addAll์—์„œ ์›์†Œ 3๊ฐœ๊ฐ€ ์นด์šดํŒ… ๋˜๊ณ , ๋ถ€๋ชจ์˜ addAll์„ ํ˜ธ์ถœํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

๋ถ€๋ชจ์˜ addAll์„ ํ˜ธ์ถœํ•˜๋ฉด, AbstractCollection.java์— ๊ตฌํ˜„๋˜์–ด ์žˆ๋Š” addAll์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ด ๋‚ด๋ถ€์—์„œ add ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์…€ํ”„ ์ฐธ์กฐ์— ์˜ํ•ด AwesomeHashSet๋ถ€ํ„ฐ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ๋œ add ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋Š”์ง€ ํƒ์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์นจ AwesomeHashSet.add์—์„œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์ด ๋˜์—ˆ๊ตฐ์š”!

๊ทธ๋ž˜์„œ AwesomeHashSet.add๊ฐ€ ์ด 3๋ฒˆ ํ˜ธ์ถœ๋˜์–ด ์นด์šดํŒ…์ด 3๋ฒˆ ๋” ์˜ฌ๋ผ๊ฐ‘๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ–ˆ์„ ๋•Œ, ์›๋ž˜ ๊ธฐ๋Œ€ํ•œ ๊ฐ’์€ 3์ด ์นด์šดํŒ…๋˜์–ด์•ผ ํ•˜์ง€๋งŒ, ์ด 6์ด ์นด์šดํŒ…๋˜๋Š” ๋ชจ์Šต์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์˜ค๋ฒ„๋ผ์ด๋”ฉ๊ณผ ์˜ค๋ฒ„๋กœ๋”ฉ ๋ฐ ์…€ํ”„ ์ฐธ์กฐ์— ๋Œ€ํ•œ ๋‚ด์šฉ (์™œ ์ด๋ ‡๊ฒŒ ํ˜ธ์ถœ๋˜๋Š”์ง€ ์ดํ•ด๊ฐ€ ์•ˆ ๋œ๋‹ค๋ฉด)์„ ๋ชจ๋ฅธ๋‹ค๋ฉด '๋ง๋‚˜๋‹ˆ ๊ฐœ๋ฐœ์ž'๋‹˜์˜ ์ด ๊ธ€์„ ๋ณด๋ฉด ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

 

[Java] ๋ฉ”์†Œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ/ ๋ฉ”์†Œ๋“œ ์˜ค๋ฒ„๋กœ๋”ฉ์„ ํ†ตํ•œ ์ƒ์† ๋‹คํ˜•์„ฑ์— ๋Œ€ํ•œ ์ดํ•ด์™€ Self ์ฐธ์กฐ

์•„๋ž˜์˜ ๋‚ด์šฉ์€ ์˜ค๋ธŒ์ ํŠธ(Object)๋ฅผ ์ฝ์œผ๋ฉด์„œ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. Java์— ํ•œ์ •๋˜๋Š” ์ด์•ผ๊ธฐ์ด๋ฏ€๋กœ ๋‹ค๋ฅธ ์–ธ์–ด์—๋Š” ์ ์šฉ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 1. ์ƒ์†์„ ์ด์šฉํ•œ ๋‹คํ˜•์„ฑ๊ณผ ๋ฉ”์†Œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ/ ๋ฉ”์†Œ๋“œ

mangkyu.tistory.com

 

์ด์ฒ˜๋Ÿผ ์ƒ์†์„ ์‚ฌ์šฉํ•œ ํ›„, ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ ํ•œ ๊ฒฝ์šฐ์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด, ๋ถ€๋ชจ ํด๋ž˜์Šค๊ฐ€ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š”์ง€ ์•Œ์•„์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด ๊ธฐ์ €์— ๊น”๋ ค์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ฆ‰ ๋‚ด๋ถ€ ๊ตฌํ˜„์„ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋…ธ์ถœํ•˜๋Š” ๊ผด์ด ๋˜๋Š” ๊ฒƒ์ด์ฃ .

 

๋งŒ์•ฝ addAll ๋ฉ”์„œ๋“œ๊ฐ€ add๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์„ ์•Œ๊ณ , AwesomeHashSet์—์„œ addAll ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•˜์ง€ ์•Š์•˜๋‹ค๊ณ  ํ•ฉ์‹œ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์ง€๊ธˆ ๋‹น์žฅ ํ”„๋กœ๊ทธ๋žจ์€ ์ •์ƒ์ ์œผ๋กœ ๋Œ์•„๊ฐ€์ง€๋งŒ, ๋‹ค์Œ ๋ฆด๋ฆฌ์ฆˆ์—์„œ๋„ ์ด๋Ÿด ๊ฒƒ์ด๋ผ๋Š” ๋ณด์žฅ์ด ์—†์Šต๋‹ˆ๋‹ค.

 

 

2) ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ํ•„๋“œ์™€ ๋ฉ”์„œ๋“œ๋ฅผ ์ฐพ๋Š”๋ฐ ๋ถˆํŽธํ•จ์ด ์žˆ๋‹ค.

 

์ž์‹ ํด๋ž˜์Šค์—์„œ๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ํ•„๋“œ์™€ ๋ฉ”์†Œ๋“œ๋Š” ๋ณด์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ฒซ ๋ฒˆ์งธ ๋‹จ์ ์—์„œ ์„ค๋ช…ํ–ˆ๋“ฏ์ด ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋‚ด๋ถ€ ๊ตฌํ˜„์„ ์•Œ์•„์•ผ ํ•  ์ผ์ด ์ƒ๊ธด๋‹ค๋ฉด, ๋ถ€๋ชจ ํด๋ž˜์Šค์— ๊ฐ€์„œ ํ™•์ธ์„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ๋ถ€๋ชจ์˜ ํ•„๋“œ๋ฅผ ์ด์šฉํ•  ๋•Œ์—๋„, ์ž์‹ ํด๋ž˜์Šค์—๋Š” ํ•ด๋‹น ํ•„๋“œ๊ฐ€ ์„ ์–ธ๋˜์–ด ์žˆ์ง€ ์•Š์€ ํ˜•ํƒœ์ด๋‹ค๋ณด๋‹ˆ ํ™•์ธ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋ถˆํŽธํ•จ์„ ๊ฒช์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

3) ์ƒ์†์€ ๊ฒฐํ•จ ์—ญ์‹œ๋„ ์ƒ์†ํ•œ๋‹ค.

 

๋งŒ์•ฝ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ API์— ๊ฒฐํ•จ์ด ์žˆ๋‹ค๋ฉด, ์ž์‹ ํด๋ž˜์Šค๋„ ์—ญ์‹œ ์ด ๊ฒฐํ•จ์ด ์ „ํŒŒ๋ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ƒ์†์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์ด๋Ÿฌํ•œ ๊ฒฐํ•จ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•˜๋Š” ๊ฒ€์ฆ์ด ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ฒ€์ฆ์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ง์ ‘ ํ•˜์œ„ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด๋ณด๋Š” ๋ฐฉ๋ฒ•์ด ์œ ์ผํ•ฉ๋‹ˆ๋‹ค. 

 

 

4) ์ƒ์†์€ API ๋ฌธ์„œ์—๋„ ์˜ํ–ฅ์„ ๋ผ์นœ๋‹ค.

 

์ฒซ ๋ฒˆ์งธ ๋‹จ์ ์„ ๋ง‰์œผ๋ ค๋ฉด, ์žฌ์ •์˜๋ฅผ ํ–ˆ์„ ๋•Œ ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚˜๋Š” ์ง€ ์ •ํ™•ํ•˜๊ฒŒ ๋ช…์‹œํ•ด ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์•Œ๋ ค์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ƒ์†์šฉ ํด๋ž˜์Šค๋Š” ์žฌ์ •์˜ํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋“ค์„ ๋‚ด๋ถ€์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ ์ด์šฉํ•˜๋Š”์ง€(์ž๊ธฐ ์‚ฌ์šฉ) ๋ฌธ์„œ๋กœ ๋‚จ๊ฒจ์•ผ๋งŒ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ "์ข‹์€ API ๋ฌธ์„œ๋ž€ '์–ด๋–ป๊ฒŒ'๊ฐ€ ์•„๋‹ˆ๋ผ '๋ฌด์—‡'์„ ํ•˜๋Š”์ง€๋ฅผ ์„ค๋ช…ํ•ด์•ผ ํ•œ๋‹ค"๋ผ๋Š” ๊ฒฉ์–ธ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๋ถ€์ ์ธ ๊ตฌํ˜„์˜ ๋…ธ์ถœ์€ ๊ฒฉ์–ธ๊ณผ ๋ฐ˜๋Œ€๊ณผ ๋ฐ˜๋Œ€๋˜๋Š” ์ƒํ™ฉ์œผ๋กœ ์ƒ์†์ด ์บก์Аํ™”๋ฅผ ํ•ด์น˜๊ธฐ ๋•Œ๋ฌธ์— ์–ด์ฉ” ์ˆ˜ ์—†์ด ๋‚˜ํƒ€๋‚˜๋Š” ๋‹จ์ ์ž…๋‹ˆ๋‹ค.

 

 

5) ์ƒ์†์„ ํ•˜๋Š” ๊ฒƒ์€ ๊ต‰์žฅํžˆ ๊นŒ๋‹ค๋กญ๋‹ค.

 

์ƒ์†์„ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ์˜ ์น˜๋ช…์ ์ธ ๋‹จ์ ์„ ๋ง‰๊ธฐ ์œ„ํ•ด์„œ๋Š”, 

- ์ƒ์†์šฉ ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•ด์„œ,
- ํ•ด๋‹น ๋‚ด๋ถ€ ๊ตฌํ˜„์„ ๋…ธ์ถœํ•œ API ๋ฌธ์„œ๋ฅผ ์ž‘์„ฑํ•œ ๋’ค,
- ํ•˜์œ„ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด์„œ ์ƒ์†์šฉ ํด๋ž˜์Šค์— ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์„ ๊ฒ€์ฆํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
- ์ƒ์†์šฉ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋Š” ์ง, ๊ฐ„์ ‘์ ์œผ๋กœ ์žฌ์ •์˜ ๊ฐ€๋Šฅ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค ๋“ฑ๋“ฑ..

 

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

 

 

 

๐Ÿ˜ญ 3. ๋ญ์•ผ, ์ƒ์†์€ ์–ธ์ œ ์จ์š”..?

 

์ƒ์†์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š”, ์ค‘๋ณต๋˜๋Š” ์ฝ”๋“œ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•œ '์žฌ์‚ฌ์šฉ์„ฑ'์— ์žˆ๋‹ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค.

์œ„์˜ ๋‹จ์ ์„ ๋ชจ๋‘ ๊ฐ€์ ธ๊ฐ”์„ ๋•Œ์˜ ํƒ€๊ฒฉ๊ณผ '์žฌ์‚ฌ์šฉ์„ฑ'์„ ํ†ตํ•ด ์–ป๋Š” ์ด์  ๋‘ ๊ฐ€์ง€๋ฅผ ์ €์šธ์งˆํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

 

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

 

์ƒ์†์ด ์ ์ ˆํ•œ ๊ฒฝ์šฐ๋Š” ํด๋ž˜์Šค์˜ ํ–‰๋™์„ ํ™•์žฅ(extend)ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ •์ œ(refine)ํ•  ๋•Œ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ํ™•์žฅ์ด๋ž€ ์ƒˆ๋กœ์šด ํ–‰๋™์„ ๋ง๋ถ™์—ฌ ๊ธฐ์กด์˜ ํ–‰๋™์„ ๋ถ€๋ถ„์ ์œผ๋กœ ๋ณด์™„ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๊ณ , ์ •์ œ๋ž€ ๋ถ€๋ถ„์ ์œผ๋กœ ๋ถˆ์™„์ „ํ•œ ํ–‰๋™์„ ์™„์ „ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿค” ์ •๋ง is-a ๊ด€๊ณ„์ธ๊ฐ€?
ํ•˜์œ„ ํด๋ž˜์Šค๊ฐ€ ์ •๋ง ์ƒ์œ„ ํด๋ž˜์Šค์˜ ํ•˜์œ„ ํƒ€์ž…์ธ์ง€ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์•„๋‹Œ ๊ฒฝ์šฐ๋ผ๋ฉด, ๋Œ€๋ถ€๋ถ„ ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿค” ์ƒ์† ๋Œ€์‹  ์ปดํฌ์ง€์…˜(๊ตฌ์„ฑ)์„ ์‚ฌ์šฉํ•  ์ˆ˜๋Š” ์—†๋‚˜?
๊ตฌ์„ฑ์€ ์ƒ์†์˜ ์—ฌ๋Ÿฌ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ์บก์Аํ™”๋ฅผ ๊นจํŠธ๋ฆฌ๋Š” ์ƒ์†๋ณด๋‹ค๋Š”, ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.


๐Ÿค” ์ƒ์†์œผ๋กœ ์ธํ•ด ๋‚ด๋ถ€ ๊ตฌํ˜„์„ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋…ธ์ถœํ•˜์ง€๋Š” ์•Š๋‚˜?
์ƒ์†์„ ํ•˜๊ฒŒ ๋˜๋ฉด, ๋ฉ”์†Œ๋“œ ์žฌ์ •์˜ ์ค‘ ๋‚ด๋ถ€ ๊ตฌํ˜„์„ ์•Œ์•„์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊น๋‹ˆ๋‹ค.


๐Ÿค” ํ™•์žฅํ•˜๋ ค๋Š” ํด๋ž˜์Šค์— ์ •๋ง ๊ฒฐํ•จ์ด ์—†๋Š”๊ฐ€? ํ˜น์€ ๊ฒฐํ•จ ์—ญ์‹œ ์ „ํŒŒ๋˜์–ด๋„ ๊ดœ์ฐฎ์€๊ฐ€?
ํ•˜์œ„ ํด๋ž˜์Šค๋Š” ์ƒ์œ„ ํด๋ž˜์Šค์˜ ๊ฒฐํ•จ ์—ญ์‹œ ์ƒ์†ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹ ์ค‘ํ•˜๊ฒŒ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

 

๊ธ€์„ ์ž‘์„ฑํ•˜๋ฉด์„œ ์ƒ์†์— ๋Œ€ํ•œ ๋ถ€์ •์  ์ด์•ผ๊ธฐ๋ฅผ ๊ต‰์žฅํžˆ ๋งŽ์ด ์ ‘ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์‹ฌ์ง€์–ด "์ƒ์†์€ ๊ทธ์ € ์žฌ์‚ฌ์šฉ์„ ์œ„ํ•œ ์ ˆ์ž์น˜ํ–ฅ ๊ธฐ์ˆ ์ผ ๋ฟ์ด๋ฉฐ, ์ด๋Š” ๊ฐ์ฒด์ง€ํ–ฅ์„ ๋ง๊ฐ€๋œจ๋ฆฐ๋‹ค"๋ผ๋ฉฐ, ์•„์˜ˆ ์ƒ์†์˜ ์‚ฌ์šฉ์„ ์ง€์–‘ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ธ€๋„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

๋ถ„๋ช… ์ƒ์†์€ ๊ฐ์ฒด์ง€ํ–ฅ์˜ ์ฃผ์š” ํŠน์ง•(์ถ”์ƒํ™”, ์บก์Аํ™”, ์ƒ์†, ๋‹คํ˜•์„ฑ)์— ๋“ค์–ด๊ฐˆ ๋งŒํผ ๊ฐ•๋ ฅํ•œ ํ‚ค์›Œ๋“œ์ธ๋ฐ ๋ง์ด์ฃ .

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

 

๋ฌผ๋ก  ์œ„์˜ ๋‹จ์ ๋“ค์„ ๊ณ ๋ คํ–ˆ์„ ๋•Œ ์ง€์–‘ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ทผ๊ฑฐ๋Š” ์ถฉ๋ถ„ํ•˜์ง€๋งŒ, ์–ด๋–ค ๊ฒƒ์ด ๋ฌธ์ œ์ธ์ง€ ์•Œ๊ณ  ์ง€์–‘ํ•˜๋Š” ๊ฒƒ๊ณผ ๋ฌด์กฐ๊ฑด์ ์ธ ์ง€์–‘์—๋Š” ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ƒํ™ฉ์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ๊ธฐ์ˆ ์˜ ์„ ํƒ์ด ๊ต‰์žฅํžˆ ์ค‘์š”ํ•จ์„ ๊นจ๋‹ซ๊ฒŒ ๋˜๋Š” ํ•™์Šต์ด์—ˆ์Šต๋‹ˆ๋‹ค.

 

 

 

๐ŸŒŽ ์ถœ์ฒ˜/์ธ์šฉ

[๋„์„œ] ์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” 3ํŒ
[๋งํฌ] https://programmer-ririhan.tistory.com/408