[JAVA] abstract 와 Interface

래림·2023년 4월 21일
0

Java

목록 보기
4/4

abstract

abstract 문법

추상메소드를 가지고있으면 class A는 abstract class가 되는것이다.
멤버중에 하나라도 abstract 키워드가 있으면 abstract class가 되는것이다.

import java.util.*;
abstract class A{ //얘는 인스턴스화 해서 사용 못함.
  public abstract int b(); //추상메소드
  public void d(){//그냥 메소드 갖고있기 ㄱㄴ
    System.out.println("world");
  }
}

class B extends A{//A를 상속받는다. 이렇게하면 인스턴스화 해서 사용 ㄱㄴ
  public int b(){
    return 1;
  }
}

class Main {
  public static void main(String[] args) {
    B b=new B();
  System.out.println(b.b());
  }
}

abstract 클래스 쓰는 이유

부모 클래스에는 메소드가 뭐가있는지만 정의해놓고, 그 메소드의 실제 동작방법은 부모를 extends해서 abstract 메소드를 실제로 구현한 하위클래스의 책임으로 위임한다.

커피집이 있는데 이 커피집은 b라는 시그니처 행동을 하는것으로 유명.. 이 커피집의 프렌차이즈를 차리려면 무조건 b를 해야한다. 그런데 b라는걸 어떻게 할지는 사장들한테 위임하는 느낌.

interface

어떤 객체가 있고 그 객체가 특정한 인터페이스를 사용한다면 그 객체는 반드시 인터페이스의 메소드를 구현해야한다. 만약 인터페이스에서 강제하고 있는 메소드를 구현하지 않으면 컴파일도 안된다.

interface 쓰는 이유

코드 A가 코드 B를 이용해야 하는데, 그걸 두 사람이 나눠서 동시에 작업하는 상황이 있다고 해보자. 그때 A를 만드는 사람은 B 함수의 인자를 2개라고 생각하고 작업을 하고있다. 그런데 실제로 B의 함수는 인자가 3개였다. 이렇게 커뮤니케이션을 잘못하는 상황을 방지하기 위해 JAVA언어 수준에서 interface라는 것을 제공한다고 한다.
그러니까 이건 개발자간의 약속이군여.











tmi

내가 지금까지 abstract키워드를 사용해서 코드를 짜본적이 없다. 그래서 먼가 객체지향을 100%쓰지 못하고있는 느낌적인 느낌.. 그런데 생각해보면 그렇게 abstract 쓸만큼 규모있는 프로젝트를 해본적이 없어서 그런거같기도 하다.
사실 예전에도
abstract랑 interface의 차이점을 이해하려고 시도한적이 있긴 하다. ㅎㅎ..
링크는 여기
그때보단 훨씬 더 이해가 된거같다. interface를 2년 전에 처음 공부할 때, 책에 있었던 그림이 이제야 이해가 된다. ㅋㅋㅋㅋ내가 멍청한게 아니고 이해되는데에 경험이랑 시간이 더 필요했던 거군요. 음 다들 포기만 하지맙시다~!

이거 보고 공부했슴다

0개의 댓글