Amenable
Amenable's Blog
Amenable
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (189)
    • ๐Ÿ“‚ JAVA (87)
      • ์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” (65)
      • ์ฃผ์š” ๊ฐœ๋… (22)
    • ๐Ÿ“‚ ๊ฐœ๋ฐœ ์„œ์  (22)
      • ์‹ค์šฉ์ฃผ์˜ ํ”„๋กœ๊ทธ๋ž˜๋จธ (1)
      • ๊ฐ์ฒด์ง€ํ–ฅ์˜ ์‚ฌ์‹ค๊ณผ ์˜คํ•ด (2)
      • ํด๋ฆฐ ์ฝ”๋“œ (8)
      • ํ•จ๊ป˜ ์ž๋ผ๊ธฐ (1)
      • ๊ทธ๋ฆผ์œผ๋กœ ๋ฐฐ์šฐ๋Š” HTTP&Network Basic (10)
    • ๐Ÿ“‚ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (8)
      • ๊ฐœ๋… (8)
      • ๋ฌธ์ œํ’€์ด (0)
    • ๐Ÿ“‚ ๋„คํŠธ์›Œํฌ (14)
      • ๊ฐœ๋… (6)
      • ์„ฑ๊ณต๊ณผ ์‹คํŒจ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” 1%์˜ ๋„คํŠธ์›Œํฌ ์›๋ฆฌ (8)
    • ๐Ÿ“‚ ์Šคํ”„๋ง (13)
      • ๊ธฐ๋ณธ ๊ฐœ๋… (13)
    • ๐Ÿ“‚ WEB (5)
    • ๐Ÿ“‚ ์ž๋ฃŒ๊ตฌ์กฐ (12)
      • ๊ฐœ๋… (2)
      • ์ •๋ ฌ (8)
      • ํŠธ๋ฆฌ (2)
    • ๐Ÿ“‚ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (10)
      • ์ตœ์†Œ์‹ ์žฅํŠธ๋ฆฌ (2)
      • ์ตœ๋‹จ ๊ฒฝ๋กœ (2)
      • ๋ฌธ์ž์—ด (2)
      • ETC (4)
    • ๐Ÿ“‚ ์•Œ๊ณ ๋ฆฌ์ฆ˜_๋ฌธ์ œํ’€์ด (4)
      • BOJ_๋ฐฑ์ค€ (4)
    • ๐Ÿ“‚ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (3)
    • ๐Ÿ“‚ DevOps (2)
      • ๋ฐฐํฌ (2)
    • ๐Ÿ“‚ ํ›„๊ธฐ (8)
      • ์šฐ์•„ํ•œ ํ…Œํฌ์ฝ”์Šค(ํ”„๋ฆฌ์ฝ”์Šค) (4)
      • 2023๋…„ (3)
      • 2024๋…„ (1)
    • ๐Ÿ“‚ ํšŒ๊ณ  (1)
      • 2023๋…„ (1)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ๐Ÿš€ GitHub

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
Amenable

Amenable's Blog

์ถ”์ƒ ํด๋ž˜์Šค๋ณด๋‹ค๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์šฐ์„ ํ•˜๋ผ(์ถ”์ƒ ๊ณจ๊ฒฉ ๊ตฌํ˜„(Skeletal Implementation) ํด๋ž˜์Šค)(2) - [4์žฅ. ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค(์•„์ดํ…œ20)]
๐Ÿ“‚ JAVA/์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”

์ถ”์ƒ ํด๋ž˜์Šค๋ณด๋‹ค๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์šฐ์„ ํ•˜๋ผ(์ถ”์ƒ ๊ณจ๊ฒฉ ๊ตฌํ˜„(Skeletal Implementation) ํด๋ž˜์Šค)(2) - [4์žฅ. ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค(์•„์ดํ…œ20)]

2023. 5. 7. 18:44

  ์ด์ „ ๊ธ€์„ ํ†ตํ•ด ์ธํ„ฐํŽ˜์ด์Šค์˜ ์žฅ์ ๋“ค์„ ์•Œ์•„๋ณด์•˜๋‹ค. 

  ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ณจ๊ฒฉ ๊ตฌํ˜„(skeletal implementation) ํด๋ž˜์Šค๋ฅผ ํ•จ๊ป˜ ์ œ๊ณตํ•˜์—ฌ ์ธํ„ฐํŽ˜์ด์Šค์™€ ์ถ”์ƒ ํด๋ž˜์Šค์˜ ์žฅ์ ์„ ๋ชจ๋‘ ์ทจํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์ž.

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

  ์ถ”์ƒ ๊ณจ๊ฒฉ ๊ตฌํ˜„ ํด๋ž˜์Šค๋ฅผ ํ™œ์šฉํ•˜์˜€์„ ๋•Œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” 2๊ฐ€์ง€์˜ ์žฅ์ ์— ๋Œ€ํ•ด์„œ ์ž์„ธํžˆ ์•Œ์•„๋ณด์ž.

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

 

์žฅ์  1. ๋‹จ์ˆœํžˆ ๋‹จ์ˆœ ๊ณจ๊ฒฉ ๊ตฌํ˜„์„ ํ™•์žฅํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋Œ€๋ถ€๋ถ„์ด ์™„๋ฃŒ๋œ๋‹ค. (=ํ…œํ”Œ๋ฆฟ ๋ฉ”์„œ๋“œ ํŒจํ„ด) ๐Ÿ–

  ๊ด€๋ก€์ƒ ์ธํ„ฐํŽ˜์ด์Šค ์ด๋ฆ„์ด Interfact๋ผ๋ฉด ๊ทธ ๊ณจ๊ฒฉ ๊ตฌํ˜„ ํด๋ž˜์Šค์˜ ์ด๋ฆ„์€ AbstractInterface๋กœ ์ง“๋Š”๋‹ค. ์ œ๋Œ€๋กœ ์„ค๊ณ„ํ–ˆ๋‹ค๋ฉด ๊ณจ๊ฒฉ ๊ตฌํ˜„์€ (๋…๋ฆฝ๋œ ํˆฌ์ƒ ํด๋ž˜์Šค๋“  ๋””ํดํŠธ ๋ฉ”์„œ๋“œ๋กœ ์ด๋ฃจ์–ด์ง„ ์ธํ„ฐํŽ˜์ด์Šค๋“ ) ๊ทธ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋‚˜๋ฆ„์˜ ๊ตฌํ˜„์„ ๋งŒ๋“ค๋ ค๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ์ผ์„ ์ƒ๋‹นํžˆ ๋œ์–ด์ค€๋‹ค.

  ์•„๋ž˜๋Š” ๊ณจ๊ฒฉ ๊ตฌํ˜„์„ ์‚ฌ์šฉํ•ด ์™„์„ฑํ•œ ๊ตฌ์ฒด ํด๋ž˜์Šค์ด๋‹ค.

static List<Integer> intArrayAsList(int[] a) {
    Objects.requireNonNull(a);

    return new AbstractList<>(){
        @Override
        public Integer get(int i){
            return a[i];
        }

        @Override public Integer set(int i , Integer val){
            int oldVal = a[i];
            a[i] = val; // ์˜คํ† ์–ธ๋ฐ•์‹ฑ
            return oldVal; // ์˜คํ† ๋ฐ•์‹ฑ
        }

        @Override
        public int size() {
            return a.length;
        }
    };
}

  ๋งŒ์•ฝ ๊ณจ๊ฒฉ ๊ตฌํ˜„์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ๋ฐ˜ํ™˜๊ฐ’์ธ List<Integer>๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ 'size(), isEmpty(), contains(Object o), iterator(),...' ๋“ฑ ์ˆ˜๋งŽ์€ ๋ฉ”์„œ๋“œ๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.

  ํ•˜์ง€๋งŒ AbstractList๋ผ๋Š” ๊ณจ๊ฒฉ ๊ตฌํ˜„์„ ์ด์šฉํ•˜์—ฌ 'get()'๊ณผ 'size()'๋งŒ ๊ตฌํ˜„ํ•˜๋ฉด ๋˜๊ณ , ์ถ”๊ฐ€์ ์œผ๋กœ 'set()'๊ณผ ๊ฐ™์€ ์žฌ์ •์˜ํ•˜๊ณ  ์‹ถ์€ ๊ฒƒ๋“ค์„ ์˜ค๋ฒ„๋ผ์ด๋“œํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์žฅ์  2. ์‹œ๋ฎฌ๋ ˆ์ดํŠธํ•œ ๋‹ค์ค‘ ์ƒ์†(simulated multiple inheritance)์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๐Ÿ—

  AbstractCat์„ ์ƒ์†๋ฐ›๊ณ  ์žˆ๋Š” MyCat ํด๋ž˜์Šค๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•˜์ž.

public abstract class AbstractCat {

    protected abstract String sound();

    protected abstract String name();
}

----------

public class MyCat extends AbstractCat implements Flyable{

    @Override
    protected String sound() {
        return "์•ผ์˜น";
    }

    @Override
    protected String name() {
        return "amenable";
    }
}

----------

public static void main(String[] args) {

    MyCat myCat = new MyCat();
    System.out.println(myCat.sound()); // ์•ผ์˜น
    System.out.println(myCat.name()); // amenable
}

  ์—ฌ๊ธฐ์„œ AbstractFlyable์„ ์ถ”๊ฐ€์ ์œผ๋กœ ์ƒ์†๋ฐ›๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ์—๋Š” ์–ด๋–ป๊ฒŒ ํ• ๊นŒ? (๊ณจ๊ฒฉ ๊ตฌํ˜„์„ ํ™œ์šฉํ•˜์—ฌ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ด์ ์œผ๋กœ ์ธํ•ด์„œ ๊ณจ๊ฒฉ ๊ตฌํ˜„์„ ์ƒ์†๋ฐ›๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ์ด๋‹ค.)

  ๊ณจ๊ฒฉ ๊ตฌํ˜„ ํด๋ž˜์Šค๋ฅผ ์•„๋ž˜์™€ ๊ฐ™์ด ์šฐํšŒ์ ์œผ๋กœ ์ด์šฉํ•œ๋‹ค๋ฉด ๋‹ค์ค‘ ์ƒ์†๊ณผ ๊ฐ™์€ ํšจ๊ณผ๋ฅผ ๋ˆ„๋ฆด ์ˆ˜ ์žˆ๋‹ค. ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. 

  1. ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค์—์„œ ํ•ด๋‹น ๊ณจ๊ฒฉ ๊ตฌํ˜„์„ ํ™•์žฅํ•œ private ๋‚ด๋ถ€ ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•œ๋‹ค.
  2. ๊ฐ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์„ ๋‚ด๋ถ€ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์— ์ „๋‹ฌํ•œ๋‹ค.
public interface Flyable {

    void fly();
}

----------

public class AbstractFlyable implements Flyable {

    @Override
    public void fly() {
        System.out.println("๋‚ ์•„๊ฐ„๋‹ค~");
    }
}

----------

public class MyCat extends AbstractCat implements Flyable{

    // 1. ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค์—์„œ ํ•ด๋‹น ๊ณจ๊ฒฉ ๊ตฌํ˜„์„ ํ™•์žฅํ•œ private ๋‚ด๋ถ€ ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•œ๋‹ค.
    private MyFlyable myFlyable = new MyFlyable();

    @Override
    protected String sound() {
        return "์•ผ์˜น";
    }

    @Override
    protected String name() {
        return "amenable";
    }

    // 2. ๊ฐ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์„ ๋‚ด๋ถ€ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์— ์ „๋‹ฌํ•œ๋‹ค.
    @Override
    public void fly() {
        this.myFlyable.fly();
    }

    private class MyFlyable extends AbstractFlyable {
        @Override
        public void fly() {
            System.out.println("๋‚ ์•„๋ผ");
        }
    }
}

----------

public static void main(String[] args) {
    MyCat myCat = new MyCat();
    System.out.println(myCat.sound()); // ์•ผ์˜น
    System.out.println(myCat.name()); // amenable
    myCat.fly(); // ๋‚ ์•„๋ผ
}

 

ํ•ด๋‹น ๊ธ€์€ ๋ฐฑ๊ธฐ์„  ๋‹˜์˜ '์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” ์™„๋ฒฝ ๊ณต๋žต'์„ ์ฐธ๊ณ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

'๐Ÿ“‚ JAVA > ์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

์ธํ„ฐํŽ˜์ด์Šค๋Š” ํƒ€์ž…์„ ์ •์˜ํ•˜๋Š” ์šฉ๋„๋กœ๋งŒ ์‚ฌ์šฉํ•˜๋ผ - [4์žฅ. ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค(์•„์ดํ…œ22)]  (0) 2023.05.07
์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ตฌํ˜„ํ•˜๋Š” ์ชฝ์„ ์ƒ๊ฐํ•ด ์„ค๊ณ„ํ•˜๋ผ - [4์žฅ. ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค(์•„์ดํ…œ21)]  (1) 2023.05.07
์ถ”์ƒ ํด๋ž˜์Šค๋ณด๋‹ค๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์šฐ์„ ํ•˜๋ผ(์ธํ„ฐํŽ˜์ด์Šค์˜ ์žฅ์ )(1) - [4์žฅ. ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค(์•„์ดํ…œ20)]  (0) 2023.05.07
์ƒ์†์„ ๊ณ ๋ คํ•ด ์„ค๊ณ„ํ•˜๊ณ  ๋ฌธ์„œํ™”ํ•˜๋ผ. ๊ทธ๋Ÿฌ์ง€ ์•Š์•˜๋‹ค๋ฉด ์ƒ์†์„ ๊ธˆ์ง€ํ•˜๋ผ - [4์žฅ. ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค(์•„์ดํ…œ19)]  (0) 2023.04.29
์ƒ์†๋ณด๋‹ค๋Š” ์ปดํฌ์ง€์…˜์„ ์‚ฌ์šฉํ•˜๋ผ - [4์žฅ. ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค(์•„์ดํ…œ18)]  (0) 2023.04.28
    '๐Ÿ“‚ JAVA/์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • ์ธํ„ฐํŽ˜์ด์Šค๋Š” ํƒ€์ž…์„ ์ •์˜ํ•˜๋Š” ์šฉ๋„๋กœ๋งŒ ์‚ฌ์šฉํ•˜๋ผ - [4์žฅ. ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค(์•„์ดํ…œ22)]
    • ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ตฌํ˜„ํ•˜๋Š” ์ชฝ์„ ์ƒ๊ฐํ•ด ์„ค๊ณ„ํ•˜๋ผ - [4์žฅ. ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค(์•„์ดํ…œ21)]
    • ์ถ”์ƒ ํด๋ž˜์Šค๋ณด๋‹ค๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์šฐ์„ ํ•˜๋ผ(์ธํ„ฐํŽ˜์ด์Šค์˜ ์žฅ์ )(1) - [4์žฅ. ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค(์•„์ดํ…œ20)]
    • ์ƒ์†์„ ๊ณ ๋ คํ•ด ์„ค๊ณ„ํ•˜๊ณ  ๋ฌธ์„œํ™”ํ•˜๋ผ. ๊ทธ๋Ÿฌ์ง€ ์•Š์•˜๋‹ค๋ฉด ์ƒ์†์„ ๊ธˆ์ง€ํ•˜๋ผ - [4์žฅ. ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค(์•„์ดํ…œ19)]
    Amenable
    Amenable
    CS, ์ž๋ฐ”, ์ž๋ฃŒ๊ตฌ์กฐ, ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์Šคํ”„๋ง, ์Šคํ”„๋ง ๋ถ€ํŠธ์— ํ•ด๋‹นํ•˜๋Š” ๊ฐœ๋ฐœ์— ๊ด€ํ•œ ๋‚ด์šฉ์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”