Java_추상화

song·2023년 10월 18일

Java

목록 보기
23/36

추상화(abstract)

  • abstract가 클래스에 붙으면 추상 클래스
    abstract가 메서드에 붙으면 추상 메서드
  • abstract class : '구체적이지 않은 클래스'라고 함.
  • 쉽게 말하면 선언부만 있는 메서드(미완성 메서드, 추상 메서드)를 가지고 있는 클래스는 추상클래스라고 한다.
  • 기본 클래스는 구체화되어있는 클래스 (concrete class)라서 선언부와 구현부로 구성되어 있지만 추상클래스는 선언부만 존재한다. (구현부가 없다. )
    ★★ 그래서 new를 이용해서 인스턴스화 할 수 없다. 실행할 내용이 없기 때문.
    • 만약 꼭 new를 해야할 경우 인스턴스 생성한 곳에서 선언한 메서드를 오버라이딩하면 된다. 하지만 추천하지 않는다.
  • 클래스 자체로는 역할을 다 못하거나 하위(자손)클래스를 작성할 때 바탕이 되는 중요한 역할을 해준다.
  • 추상메서드는 무조건 추상클래스에서만 생성이 가능하다.
  • ★클래스 안에 일반 메서드들이 몇개가 있던 상관없이 추상 메서드가 단 하나라도 있으면 해당 클래스는 추상클래스로 만들어야 한다.
    abstract class 클래스명{
    	void ttt(){}
      abstract void tmp(); <- 이 추상메서드 때문에 해당 클래스는 추상 클래스가 된다. 
      void ccc(){}
    }
  • 그래서 언제나 추상클래스는 상속을 목적으로 만듬(자손이 오버라이드해서 구현부 명시)

추상클래스 쓰는 이유

  • 메서드 템플릿화 (메서드 이름 통일화)
    추상클래스를 상속받는 자식클래스들에게 '앞으로 이 기능을 만들거면 무조건 이 이름으로 통일해' 같은 강제성 아닌 강제성을 부여하기 위함.
    오버라이딩을 안하고 해당 기능을 사용하는 이유는 공통적인 부분이 아예 전무하여 부모의 구현부부분을 작성할 필요가 없을 때 이다.
  • 메서드 이름이 같아야 다형성 때 사용하기 편하다.

추상클래스 만드는 방법

  • 여러 클래스에서 공통으로 사용될 부분들을 따로 빼낸다(상속 때처럼)
  • 기능(메서드)의 구현부를 명시할지 말지 결정(어떤건 추상메서드, 어떤건 일반메서드로 할건지 결정)
profile
계속 나아가기

0개의 댓글