Skip to content

Latest commit

ย 

History

History
128 lines (92 loc) ยท 6.27 KB

File metadata and controls

128 lines (92 loc) ยท 6.27 KB

์ธํ„ฐํŽ˜์ด์Šค

์ž๋ฐ”์˜ ๋‹คํ˜•์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜์—ฌ ๊ฐœ๋ฐœ์ฝ”๋“œ ์ˆ˜์ •์„ ์ค„์ด๊ณ  ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•จ

๋‹คํ˜•์„ฑ? ๋™์ผํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์‹ ํ–ˆ์„ ๋•Œ ๊ฐ์ฒด์˜ ํƒ€์ž…์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ์‘๋‹ตํ•  ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ


์ถ”์ƒํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค

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

ํ•˜์ง€๋งŒ ์ถ”์ƒ ํด๋ž˜์Šค๋Š” is-a๊ด€๊ณ„๋กœ -๋Š” -์ด๋‹ค.์˜ ๊ฐœ๋…์ด๋ฉฐ ์ฑ…์ž„์˜ ์ผ๋ถ€๋ฅผ ๊ตฌํ˜„ํ•ด๋†“์€ ๊ฒƒ์ด๊ณ  ์ธํ„ฐํŽ˜์ด์Šค๋Š” has-a์˜ ๊ด€๊ณ„๋กœ -๋Š” -๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค์˜ ๊ฐœ๋…์œผ๋กœ ์ฑ…์ž„์˜ ์ง‘ํ•ฉ๋“ค์„ ๋‚˜์—ดํ•ด ๋†“์€ ๊ฒƒ.

์ด๋•Œ ์ด๋Ÿฌํ•œ ๊ด€๊ณ„๊ฐ€ ๊ฐ์ฒด์ง€ํ–ฅ์— ์žˆ์–ด ์ค‘์š”ํ•œ ๊ฒƒ์€ ๊ฐ์ฒด์˜ ์†์„ฑ์ด ์•„๋‹ˆ๋ผ ๊ฐ์ฒด์˜ ํ–‰๋™๊ฐ„์˜ ๊ด€๊ณ„๋ผ๋Š” ๊ฒƒ.

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


์ƒ์†์˜ ๊ฐ€์žฅํฐ ๋ฌธ์ œ์ ์€ ์บก์Аํ™”๋ฅผ ์œ„๋ฐ˜ํ•œ๋‹ค๋Š” ๊ฒƒ๊ณผ ์„ค๊ณ„๊ฐ€ ์œ ์—ฐํ•˜์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ.

์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ ์œ„ํ•ด์„œ๋Š” ์ƒ์†์ด ์•„๋‹ˆ๋ผ ํ•ฉ์„ฑ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•˜๊ณ  ์ƒ์†์€ ํƒ€์ž…๊ณ„์ธต์„ ๊ตฌ์กฐํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

์˜์กด์„ฑ์— ์˜ํ•œ ์˜ํ–ฅ์ด ์ ์€ ๊ฒฝ์šฐ์—๋„ ์ถ”์ƒํ™”์— ์˜์กดํ•˜๊ณ  ์˜์กด์„ฑ์„ ๋ช…์‹œ์ ์œผ๋กœ ๋“œ๋Ÿฌ๋‚ด๋Š” ๊ฒƒ์ด ์ข‹์€ ์„ค๊ณ„ ์Šต๊ด€์ด๋‹ค.


์„œ๋ธŒ ํด๋ž˜์‹ฑ๊ณผ ์„œ๋ธŒ ํƒ€์ดํ•‘

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



์ธํ„ฐํŽ˜์ด์Šค์˜ ์žฅ์ 

  1. ๊ฐœ๋ฐœ ๊ธฐ๊ฐ„ ๋‹จ์ถ• : ํŒ€๋‚ด์—์„œ ์„œ๋กœ ๋‹ค๋ฅธ ๋ถ€๋ถ„์„ ๊ฐœ๋ฐœํ• ๋•Œ ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ์ž˜ ์ •์˜ํ•ด๋‘์–ด๋„ ์„œ๋กœ์˜ ๊ฐœ๋ฐœ์ด ๋๋‚˜์ง€ ์•Š์•„๋„ ๋”ฐ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
  2. ํด๋ž˜์Šค๊ฐ„์˜ ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„ : ์ฝ”๋“œ์˜ ์ข…์†์„ ์ค„์ด๊ณ  ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.
  3. ํ‘œ์ค€ํ™” ๊ฐ€๋Šฅ : ํ˜‘์—…์‹œ์—๋„ ์ผ์ •ํ•œ ํ‹€์˜ ํ˜•ํƒœ๋กœ ๊ฐœ๋ฐœ์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.



์ธํ„ฐํŽ˜์ด์Šค ํŠน์ง•

  1. ํ•„๋“œ๋กœ๋Š” ์ƒ์ˆ˜๋งŒ ๊ฐ€๋Šฅ ( ๋ณ€์ˆ˜๋Š” ๋ถˆ๊ฐ€๋Šฅ ํ•˜๋‹ค. ) : ๋ฌด์กฐ๊ฑด public static final๋กœ ์„ ์–ธ ๋˜๋ฉฐ ์ƒ๋žต ๊ฐ€๋Šฅ
  2. ์ถ”์ƒ ๋ฉ”์„œ๋“œ ์กด์žฌ : ๋ฌด์กฐ๊ฑด public abstract์œผ๋กœ ์„ ์–ธ๋˜๋ฉฐ ์ƒ๋žต ๊ฐ€๋Šฅ



Java 8์˜ ์ธํ„ฐํŽ˜์ด์Šค ๋ณ€ํ™”

1. Static method ์ถ”๊ฐ€

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

public interface ExInterface {
    static String staticMethod(){
        return "์Šคํƒœํ‹ฑ ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค";
    }
}

// byte code
public static method()I
   L0
    LINENUMBER 5 L0
    ICONST_1
    IRETURN
    MAXSTACK = 1
    MAXLOCALS = 0
}

์ ‘๊ทผ์ง€์ •์ž๋ฅผ ์ƒ๋žตํ•˜๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ public์ด ๋ถ™๊ฒŒ๋˜๊ณ  java8์—์„œ๋Š” static method๊ฐ€ public๋งŒ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ java9 ์ด์ƒ๋ถ€ํ„ฐ๋Š” private๋„ ๊ฐ€๋Šฅํ•˜๋‹ค. ๋‹น์—ฐํžˆ private์ด๊ธฐ ๋•Œ๋ฌธ์— ์™ธ๋ถ€์—์„œ๋Š” ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

private ๋ฉ”์„œ๋“œ์˜ ์กฐ๊ฑด

  1. ๊ตฌํ˜„๋ถ€๊ฐ€ ์กด์žฌํ•ด์•ผ ํ•œ๋‹ค.
  2. ํ•ด๋‹น ์ธํ„ฐํŽ˜์ด์Šค ๋‚ด๋ถ€์—์„œ๋งŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

2. Default method ์ถ”๊ฐ€

์ถ”์ƒ ๋ฉ”์„œ๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ ๊ตฌํ˜„์ด ๋œ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์ฝ”๋“œ์˜ ์ค‘๋ณต์„ ํ”ผํ•˜๊ณ  ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•

ํŠน์ง•

  1. ํ•ด๋‹น ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๊ตฌํ˜„์ฒด๋„ ๋ชจ๋ฅด๊ฒŒ ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์€ ์œ„ํ—˜์˜ ์†Œ์ง€๊ฐ€ ์žˆ๋‹ค. ( ๋ฉ”์„œ๋“œ์˜ ์กฐ๊ฑด๋“ค์„ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ปดํŒŒ์ผํƒ€์ž„์—๋Š” ๊ดœ์ฐฎ๋”๋ผ๊ณ  ๋Ÿฐํƒ€์ž„์— ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. -> ๋ฌธ์„œํ™”๋ฅผ ์ฒ ์ €ํžˆ ํ•˜์—ฌ ์ด๋Ÿฐ ์œ„ํ—˜๋ฐœ์ƒ์˜ ๊ฐ€๋Šฅ์„ฑ์„ ์ตœ๋Œ€ํ•œ ์ค„์ด์ž.)
public interface Foo {
    void printName();

    /**
     * @implSpec ์ด ๊ตฌํ˜„์ฒด๋Š” getName()์œผ๋กœ ๊ฐ€์ ธ์˜จ ๋ฌธ์ž์—ด์„ ๋Œ€๋ฌธ์ž๋กœ ๋ฐ”๊ฟ”์ถœ๋ ฅํ•œ๋‹ค.
     */
    default void printNameUpperCase(){
        System.out.println(getName().toUpperCase());
    }

    String getName();       
}

์ด Foo๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฐ์ฒด๊ฐ€ getName()์ด๋ผ๋Š” ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜์„ null๋กœ ์ •์˜ํ•˜๊ณ  printNameUpperCase()๋ฅผ ์‚ฌ์šฉํ•˜๋ คํ•œ๋‹ค๋ฉด null์—์„œ toUpperCase()๋ฅผ ์ฐธ์กฐํ•˜๋ ค๊ณ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— runtime ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ์ ๋•Œ๋ฌธ์— ๋ฌธ์„œํ™”๋ฅผ ๊ผผ๊ผผํžˆ ํ•˜๊ฑฐ๋‚˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ๋ฅผ ๊ผผ๊ผผํžˆ ํ•˜์—ฌ ์ •์˜ ํ•ด์•ผํ•œ๋‹ค.

/**
* null ๋ฐฉ์ง€ ํ•˜์—ฌ ๊ตฌํ˜„
*/
default void printNameUpperCase(){
   if(getName() == null) System.out.println("");
   else System.out.println(getName().toUpperCase());
}
  1. Object ํƒ€์ž…์ด ์ œ๊ณตํ•˜๋Š” ๋ฉ”์„œ๋“œ๋Š” ๊ธฐ๋ณธ๋ฉ”์„œ๋“œ๋กœ ์ •์˜๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. error

  2. ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ตฌํ˜„์ฒด๋Š” ์ด default ๋ฉ”์„œ๋“œ๋ฅผ ovverride๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

  3. ๊ฐ™์€ ์ด๋ฆ„์˜ default method๋ฅผ ๊ฐ€์ง„ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ๊ตฌํ˜„ํ• ๋•Œ๋Š” overrideํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. erro2r

๊ตฌํ˜„ํ•˜๋ ค๋Š” ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๊ฐ™์€ ์ด๋ฆ„์˜ default ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด ์œ„ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์žฌ์ •์˜ ํ•ด์ฃผ๊ฑฐ๋‚˜ ์‚ฌ์šฉํ•˜๋ ค๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

@Override
    public int method() {
        return Ex1.super.method();      //Ex1์˜ default method๋ฅผ ์‚ฌ์šฉ
        //return Ex2.super.method();
    }

์‚ฌ์šฉ ๋ชฉ์ 

ํ•˜์œ„ ํ˜ธํ™˜์„ฑ ์ด ๊ฐ€์žฅ ํฐ ๋ชฉ์ ์œผ๋กœ ์–ด๋–ค ์ธํ„ฐํŽ˜์ด์Šค์— ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ–ˆ์„๋•Œ ์ด๋ฅผ ์ƒ์†,๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋“ค์ด ๊นจ์ง€์ง€ ์•Š๊ฒŒ ํ•˜๊ธฐ์œ„ํ•œ ๋ชฉ์ ์œผ๋กœ default ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ Collection์˜ of๋‚˜ forEach ๋“ฑ์ด ์žˆ๋‹ค.