ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] extends์™€ implements์˜ ์ฐจ์ด
    ๐Ÿ’ปProgramming/Java 2023. 10. 4. 21:14

    ์šฐ์„  extends์™€ implements ๋ชจ๋‘ "์ƒ์†"์— ๋Œ€ํ•œ ๊ฐœ๋…์ด๋‹ค. 

    Java๋Š” OOP(Object-Oriented Programming) ์ฆ‰ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ด๋‹ค. 


    ๐Ÿ”— OOP(Object-Oriented Programming)

    OOP๋ž€ ๊ฐ์ฒด์˜ ๊ด€์ ์—์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. OOP๋Š” ๊ฐ์ฒด๋“ค์˜ "์œ ๊ธฐ์ ์ธ ๊ด€๊ณ„"๋ฅผ ํ†ตํ•ด์„œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ง„ํ–‰๋œ๋‹ค. 

    OOP์˜ ํŠน์ง•

    1. ์ƒ์†๊ณผ ์ธํ„ฐํŽ˜์ด์Šค

    2. ๋‹คํ˜•์„ฑ(ํ•˜๋‚˜์˜ ๊ฐ์ฒด๊ฐ€ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํ˜•ํƒœ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธ), ์‚ฌ์šฉ ํŽธ์˜์„ฑ

    3. ์บก์Аํ™”, ์ •๋ณด ์€๋‹‰

    4. ์ž๋ฃŒ ์ถ”์ƒํ™”(๋ชจ๋ธ๋ง)

    5. ๋™์  ๋ฐ”์ธ๋”ฉ

    ๐Ÿ”— ์ƒ์†

    https://wooono.tistory.com/261

    • ์ƒ์ž ํ•˜๋‚˜ํ•˜๋‚˜๋Š” ๋ชจ๋‘ ๊ฐ์ฒด์ด๊ณ , ํด๋ž˜์Šค์ด๋‹ค.
    • ์ด๋Ÿฌํ•œ ๊ณ„์ธต์„ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ์ด ๋ฐ”๋กœ ์ƒ์†.
    • ์ƒ์† ์‹œ, ํ•˜์œ„ ๊ฐ์ฒด(์ž์‹)์€ ์ƒ์œ„ ๊ฐ์ฒด(๋ถ€๋ชจ)์˜ ํŠน์ง•(๋ฉ”์†Œ๋“œ๋‚˜ ๋ณ€์ˆ˜)์„ ๋ฌผ๋ ค๋ฐ›๊ฒŒ ๋œ๋‹ค. 
    • ์ด๋•Œ, ๋ถ€๋ชจ ๊ฐ์ฒด์˜ ํŠน์ง•์„ "์ƒˆ๋กญ๊ฒŒ ๊ตฌํ˜„"ํ•˜๋Š”๊ฐ€, ์•„๋‹ˆ๋ฉด "๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ"ํ•˜๋Š”๊ฐ€์— ๋”ฐ๋ผ์„œ ์ƒ์†์˜ ํ˜•ํƒœ๊ฐ€ ๋‹ฌ๋ฆฌ๊ฒŒ ๋œ๋‹ค. → ์ด๊ฒŒ ๋ฐ”๋กœ "extends์™€ implements์˜ ์ฐจ์ด"์ด๊ธฐ๋„ ํ•˜๋‹ค! 
    • Java๋Š” ๋‹ค์ค‘ ์ƒ์†์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค. → ๋ถ€๋ชจ ํด๋ž˜์Šค๊ฐ€ ๋‘ ๊ฐœ ์ด์ƒ ์กด์žฌํ•  ์ˆ˜ ์—†๋‹ค. → implements(interface)์˜ ๋“ฑ์žฅ

     

    ๐Ÿ”— ์ƒ์†์˜ ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•๋“ค

    extends

    : ์ƒ์†์˜ ๋Œ€ํ‘œ์ ์ธ ํ˜•ํƒœ๋กœ ๋ถ€๋ชจ์—์„œ ์„ ์–ธ๊ณผ ์ •์˜๋ฅผ ๋ณด๋‘ ํ•˜๋ฉฐ, ์ž์‹์€ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•  ํ•„์š” ์—†์ด ๋ถ€๋ชจ์˜ ๋ณ€์ˆ˜์™€ ๋ฉ”์„œ๋“œ๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค. (but, ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•ด๋„ ๋ฌธ์ œ ์—†์Œ) 

    class Vehicle {
      protected int speed = 3;
      
      public int getSpeed(){
        return speed;
      }
      
      public void setSpeed(int speed){
        this.speed = speed;
      }
    }
    
    class Car extends Vehicle{
      public void printspd(){
        System.out.println(speed);
      }
    }
    
    public class ExtendsSample {
      public static main (String[] args){
        Car A = new Car();
        System.out.println(A.getSpeed());
        A.printspd();
      }
    }

    implements(interface ๊ตฌํ˜„)

    : ๋ถ€๋ชจ ๊ฐ์ฒด๋Š” ์„ ์–ธ๋งŒ ํ•˜๋ฉฐ, ์ •์˜๋Š” "๋ฐ˜๋“œ์‹œ" ์ž์‹์ด ์˜ค๋ฒ„๋ผ์ด๋”ฉ(์žฌ์ •์˜)ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค. implements๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†๋ฐ›๋Š” ๊ฒƒ์ด๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†๋ฐ›์„ ๊ฒฝ์šฐ ๋ฌด์กฐ๊ฑด ์ธํ„ฐํŽ˜์ด์Šค์— ์ •์˜๋˜์–ด ์žˆ๋Š” ๋ชจ๋“  ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

    interface TestInterface{
      public static int num = 8;
      
      public void fun1();
      public void fun2();
    }
    
    class InterfaceExam implements TestInterface{
      @Override
      public void fun1(){
        System.out.println(num);
      }
      
      @Override
      public void fun2() {
        
      }
    }
    
    public class InterfaceSample{
      public static void main(String args[]){
        InterfaceExam exam = new InterfaceExam();
        exam.fun1();
      }
    }

    ์ด๋ ‡๊ฒŒ ๋ถ€๋ชจ ํด๋ž˜์Šค ๋ณ€์ˆ˜๋ž‘ ๋ฉ”์„œ๋“œ ์ด๋ฆ„๋งŒ ๊ฐ€์ ธ์™€์„œ ๋‹ค์‹œ ๋‹ค ์žฌ์ •์˜ ํ•ด์•ผํ•˜๋ฉด ์™œ ์ƒ์†์„ ํ•ด์•ผํ•˜๋Š”๊ฐ€? → Java์™€ C#์˜ ์ƒ์†์€ ๊ณ„์•ฝ ๋ฐ ๋ถ„๋ฅ˜์˜ ์˜๋ฏธ๊ฐ€ ๊ฐ•ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋ผ๊ณ  ํ•œ๋‹ค. 

    abstract

    : extends์™€ interface์˜ ํ˜ผํ•ฉ์œผ๋กœ extendsํ•˜๋˜ ๋ช‡ ๊ฐœ๋Š” ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค.

     

    ๐Ÿ”— ์ƒ์†์ด ํ•„์š”ํ•œ ์ด์œ 

    "์ฝ”๋“œ์˜ ์ค‘๋ณต"์„ ์—†์• ๊ธฐ ์œ„ํ•จ์ด๋‹ค. ์ฝ”๋“œ์˜ ์ค‘๋ณต์ด ๋งŽ์•„์ง„๋‹ค๋ฉด, ์œ ์ง€ ๋ณด์ˆ˜์— ๋งŽ์€ ๋น„์šฉ์„ ์Ÿ์•„์•ผํ•œ๋‹ค. ๋”ฐ๋ผ์„œ OOP์—์„œ๋Š” ์ƒ์†์„ ํ†ตํ•ด์„œ ์ฝ”๋“œ์˜ ์ค‘๋ณต ๋ฌธ์ œ๋ฅผ ์ผ๋ถ€ ํ•ด๊ฒฐ ๊ฐ€๋Šฅํ•˜๋‹ค.

     

    ๋งŒ์•ฝ์— ์ƒ์†์ด ์—†์—ˆ๋‹ค๋ฉด ์ž์‹ ํด๋ž˜์Šค์—์„œ ์“ฐ๋Š” ๋ณ€์ˆ˜์™€ ๋ฉ”์„œ๋“œ, ๋ถ€๋ชจ ํด๋ž˜์Šค์—์„œ ์“ฐ๋Š” ๋ณ€์ˆ˜์™€ ๋ฉ”์„œ๋“œ๊ฐ€ ๊ฐ™์„ ๋•Œ ์ž์‹ ํด๋ž˜์Šค์— ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋‚ด์šฉ์„ ๊ทธ๋Œ€๋กœ ๋‹ค์‹œ ์จ์ฃผ์–ด์•ผํ•œ๋‹ค. → "์ฝ”๋“œ์˜ ์ค‘๋ณต"

    ์ด์–ด์„œ ๊ทธ๋Œ€๋กœ ๋‹ค์‹œ ์จ์ฃผ์—ˆ๋Š”๋ฐ ์ € ๋ณ€์ˆ˜์™€ ๋ฉ”์„œ๋“œ์— ๋ฌธ์ œ๋‚˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ƒ๊ฒผ์„ ๊ฒฝ์šฐ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ฝ”๋“œ์™€ ์ž์‹ ํด๋ž˜์Šค์˜ ์ฝ”๋“œ๋ฅผ ๋ชจ๋‘ ๊ณ ์ณ์ฃผ์–ด์•ผ ํ•œ๋‹ค. ๋งŒ์•ฝ ์ƒ์†์„ ์ด์šฉํ•œ๋‹ค๋ฉด ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ฝ”๋“œ๋งŒ ๊ณ ์ณ์ฃผ๋ฉด ๋œ๋‹ค. → "์œ ์ง€๋ณด์ˆ˜์— ์šฉ์ด"


    ๐Ÿ”— ์ •๋ฆฌ

    1. class๊ฐ€ class๋ฅผ ์ƒ์†๋ฐ›์„๋•Œ๋Š” extends๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , interface๊ฐ€ interface๋ฅผ ์ƒ์†๋ฐ›์„ ๋•Œ๋„ extends๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

    - ์ด๊ฒŒ ๋ญ”๋ง์ธ๊ฐ€ ์‹ถ์—ˆ๋Š”๋ฐ ๊ฐ™์€ ๊ฒƒ๋ผ๋ฆฌ ์ƒ์†๋ฐ›์„ ๋•Œ๋Š” extends๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ์ •๋ฆฌํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.

    2. class๊ฐ€ interface๋ฅผ ์ƒ์†๋ฐ›๋Š” ๊ฒฝ์šฐ์—๋Š” implements๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

    3. Interface๊ฐ€ Class๋ฅผ ์ƒ์†๋ฐ›๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. (์• ์ดˆ์— ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ตฌํ˜„์„ ๋ชฉ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์—)

    4. ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†๋ฐ›์•˜์„ ๊ฒฝ์šฐ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ชจ๋“  ๋ฉ”์„œ๋“œ๋ฅผ ๋ฐ˜๋“œ์‹œ ์˜ค๋ฒ„๋ผ์ด๋“œ ํ•ด์•ผํ•œ๋‹ค๊ณ  ๊ฐ•์ œํ•œ๋‹ค. ๋งŒ์•ฝ ๋‹ค ์˜ค๋ฒ„๋ผ์ด๋“œ ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. 

    5. ์ข€ ํ—ท๊ฐˆ๋ ธ๋˜ ์ ์ธ๋ฐ, extends๊ฐ€ ๋ฌด์กฐ๊ฑด ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋งŒ ์ƒ์†ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์•ˆ๋˜๊ณ , ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†๋ฐ›์„ ๋•Œ extends๋ฅผ ์ด์šฉํ•˜์—ฌ ๋‹ค์ค‘ ์ƒ์†์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

     

    ๐Ÿ”— References

    https://velog.io/@hkoo9329/%EC%9E%90%EB%B0%94-extends-implements-%EC%B0%A8%EC%9D%B4

    https://wooono.tistory.com/261

    https://velog.io/@hkoo9329/OOPObject-Oriented-Programming-%EA%B0%9D%EC%B2%B4-%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EC%9D%B4%EB%9E%80

    '๐Ÿ’ปProgramming > Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

    [Java] HashMap ์‚ฌ์šฉ๋ฒ•  (0) 2024.03.10
    [Java] ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค์™€ ๋žŒ๋‹ค  (0) 2024.02.23
Designed by Tistory.