본문 바로가기
  • 오늘도 한걸음. 수고많았어요.^^
  • 조금씩 꾸준히 오래 가자.ㅎ
IT기술/JAVA

[JAVA] 상속 (Inheritance), extends와 implements

by 미노드 2023. 5. 26.

개발에서 상속이라는 용어가 있다.
부는 되물림 되고, 이어지는걸 당연시하는듯 공교롭게도 상속이란 단어가 사용되는데,
부에서 사용하는 상속과는 다르다.
개발에서 상속이 무엇이고, 왜 쓰이고, 어떻게 쓰이는지 정리해보려 한다.

- 개발에서 상속이 무엇인가?

누군가(보통 부모) 죽기전 가족, 자식에게 재산을 나눠준다.
이걸 받는것을 상속이라고 하는데, 개발에선 부모클래스가 가진 변수나 메소드를 물려받아
알아서 구현시키고, 사용하거나 변형시켜 사용할 수 있다.
능력의 되물림이라고 보면 된다.

- 개발에서 상속을 왜 사용하는가?

개발하면서 상당히 많은 기능들이 만들어져 있는데, 이를 간단하게 불러오기 위함이다.
에러처리나, 입력, 그외 요구사항에 따라 만들어진 기능들을 직접 개발하지 않고 원하는 소스에서
상속받게 한 뒤 불러와 그대로 사용하게 하는 것이다.

상당히 유용한 기능으로 보인다만, 상속을 사용하는 목적은 이것 뿐만이 아니다.
개발자에게 강제성을 부여하기 위해서다.

강제성을 부여함으로써 개발자 마음데로 개발하게 두지 않는다는 것인데,
개인이 아닌 단체로 개발하는데 있어 표준을 정의하는 것은 중요하다.
표준을 강제로 따르게 하기 위함도 있다.

- 개발에서 상속은 어떻게 쓰이는가?

괜찮은 사진을 가져왔다.
사진처럼 상속은 2대, 3대째 이어지듯 사용할 수도 있으며, 2대째 형제들이 여럿인 채로 만들어 사용할 수도 있다.

다만 다중상속은 안된다.(엄마와 아빠를 동시에 가질 수 없다.)
하나의 부모클래스만 선택해서 상속해야 하는 것인데 이는 이유가 있다.
메소드를 불러올 때 어느 부모의 메소드를 가져올 지 확인하다 충돌이 날 수 있기 때문이다.

예외적으로 인터페이스는 다중상속이 가능한데 
메소드가 미리 정의되어 있지 않다보니, override를 해오더라도 충돌나서 생길 이슈가 없으며,
독립적으로 실행하지도 않다보니 문제를 피해갈 수 있기 때문이다.

이에 대해선 별도로 포스팅을 통해 정리해두겠다.

- 자바에서 상속 기능에 대한 정리

extends

    • 부모에서 선언/정의를 모두하며, 자식은 오버라이딩 할 필요 없이 부모의 메소드/변수를 그대로 사용할 수 있다.
    • 1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      public class Extend {
       
          public static void main(String[] args) {
              testpaper sc = new testpaper();
              System.out.println(sc.math);
              System.out.println(sc.eng);
              System.out.println(sc.kor);
              sc.test_result();
          }
       
      }
       
      class score{
          protected int math = 60;
          protected int kor = 21;
          protected int eng = 100;
          protected int result = math + kor + eng;
       
          public int test_result(){
              return result;
          }
       
      }
       
      class testpaper extends  score{
          public void print(){
              System.out.println(result);
          }
      }
       

implements (interface 구현)

    • 부모 객체는 선언만 하며, 정의는 반드시 자식이 오버라이딩해서 사용한다.
    • 1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      package com.example.interit;
       
      public class Implements {
       
          public static void main(String[] args) {
              ExampleInterface in = new ExampleInterface();
              in.num1();
              in.num2();
          }
      }
       
      interface testInterface{
          public static int num = 12;
          public void num1();
          public void num2();
       
      }
       
      class ExampleInterface implements testInterface{
          @Override
          public void num1() {
              System.out.println(num);
          }
       
          @Override
          public void num2() {
              System.out.println(num + 2);
          }
      }
      cs

오버라이딩 유무로 구분하면 편할 거 같다.
abstract도 있으나 거의 사용안해서 생략한다.

이후 인터페이스와 추상클래스의 차이에 대해서 정리해두면 될 거 같다.

https://teck10.tistory.com/345

 

[JAVA] 자바의 다중상속 (인터페이스와 추상클래스)

알고 시작해야 할 내용 1. 자바에서 클래스의 다중 상속은 불가능하다. 2. 하지만 인터페이스의 다중 상속은 가능하다. 인터페이스와 추상 클래스를 사용하는 이유 설계시 인터페이스와 추상클

onpups.pe.kr