2주 차 마무리

피오·2021년 11월 14일
0
post-thumbnail

추상클래스(abstract class)

  • 추상 클래스란 하나 이상의 추상 메서드가 선언되어 있는 클래스이다.
    • 추상 메서드란 메서드 선언부만 존재하고 메서드 바디가 없는 메서드이다. 추상 클래스를 상속한 자식 클래스에서 해당 메서드를 오버라이딩하여 구현해야만 한다.
  • 추상 메서드로는 인스턴스를 생성할 수 없다.
  • 추상 클래스는 다른 추상 클래스를 상속할 수 있다.
    • 자식 추상 클래스는 부모 추상 클래스의 추상 메서드를 구현 해도 되고 안해도 된다. 자식 추상 클래스보다 아래 단계에 있을 자식 클래스가 조상 추상 클래스들이 갖고 있는 추상 메서드를을 모두 구현 하기만 하면 된다. 다만 올바른 설계인지를 고려해야 할 듯.

작성법

  • 클래스와 메서드의 선언부에 abstract키워드를 붙인다.
abstract class AbsClass1 { //추상클래스
  abstract void absMethod1(); //추상메서드
  abstract void absMethod2(); //추상 메서드
}

abstract class AbsClass2 extedns AbsClass1 {
  void absMethod1() {
    ...추상 메서드 구현부...
  }
  abstract void absMethod3(); //AbsClass2의 추상메서드
  
  //AbsClass1의 absMethod2추상 메서드를 AbsClass2에서 구현하지 않았는데,
  //이는 Abs2Class2를 상속받을 클래스에서 구현해도 된다.
}

class NormalClass extedns AbsClass2 {
  void absMethod2() { //미구현된 추상클래스 구현
    ...구현부...
  }
  void absMethod3() { //미구현된 추상클래스 구현
    ...구현부...
  }
  //absMethod1은 AbsClass2에서 구현했다.
}

사용 목적

  • 추상 메서드를 자식 클래스가 반드시 구현하도록 하기 위함. 일반 클래스를 상속할 땐 꼭 부모 클래스의 메서드를 오버라이딩 해야 한다는 규칙이 없으니까.
    => 규격화된 개발. 코드 중구난방 방지.
  • 개발시간 단축
    공통개발자가 공통부를 개발해놓으면 다른 개발자들이 그걸 갖다 씀으로써 개발기간을 단축시킬 수 있듯이 추상 클래스도 비슷한 식으로 개발시간을 단축시킬 수 있다고 함.


Interface

  • 일종의 추상 클래스.
  • 추상메서드와 상수만 멤버로 가질 수 있다.
  • 모든 멤버변수는 public static final이어야 하며, 생략 가능(컴파일러가 추가).
  • 모든 메서드는 public abstract이어야 하며, 생략 가능(static, default메서드는 예외).
  • 인터페이스는 인터페이스만 상속받을 수 있다.
  • 인터페이스는 다중상속을 허용한다.
  • 만약 어떤 클래스가 인터페이스를 구현할 때 추상 메서드를 모두 구현하지 않았다면 그 클래스는 추상클래스로 선언해야 한다.
  • 부모 클래스를 상속받으면서(extends) 동시에 인터페이스를 구현할 수 있다(implements).

작성법

  • 인터페이스명 앞에 interface 키워드를 사용한다.
interface Swimmable { //선언부에 class대신 interface
  void swim(); // 메서드 선언부에 public abstract를 붙여야하나 생략 가능.
}
interface Walkable {
  void walk();
}


// extends키워드가 아닌 implements(구현)를 사용.
// 그리고 두 개 이상의 인터페이스를 다중 상속하는 게 가능.
class NormalClass implements Swimmable, Walkable { 

  public void swim() { //인터페이스에 정의된 추상메서드를 구현해야 함.
    ...구현부...
  }
  public void walk() {
    ...구현부...
  }
}

클래스 상속과 인터페이스 구현을 통해 다형성(한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있는 것)을 활용할 수 있다. 다음에 이 부분을 공부해보고 글을 작성해 봐야겠다.



참고

profile
블로그 이전했습니다. https://pzbg.tistory.com/

0개의 댓글