날아라쩡글이의 블로그입니다.

추상클래스 본문

중앙 HTA (2106기) story/java story

추상클래스

날아라쩡글이 2021. 9. 26. 21:13
반응형

인터페이스와 클래스의 관계

  • 클래스는 단일상속이 가능하다. 
  • 인터페이스는 다중상속이 가능하다. 
  • 클래스와 클래스의 관계는 상속관계이다. 
  • 인터페이스와  클래스의 관계는 구현관계이다. 
  • 인터페이스와 인터페이스의 관계는 상속관계이다. 
  • 클래스와 인터페이스는 구현관계이다. 
  • 클래스는 2개이상의 인터페이스를 구현할 수 있다. 
  • 클래는 인터페이스를 구현하고, 클래스를 상속받을 수 있다. 
  • 인터페이스는 다중상속이 가능하다. 
  • 같은 것끼리는 상속관계이고, 나머지는 구현관계이다. 
  • 클래스가 인터페이스의 부모가 될 수 없다. 

추상클래스 

클래스는 총 3가지의 클래스가 있다. 

클래스

구현클래스 

  • 구현부가 있는 메소드이다. 
  • 멤버변수, 정적변수, 생성자, 멤버메소드, 정적메소드가 있다. 
  • 인터페이스를 구현한 클래스이다.
  • 추상클래스가 없다. 
  • public class구현클래스 extends 부모클래스 implements부모인터페이스{
  • //부모인터페이스의 모든 추상메소드를 구현하고 있는 클래스 
  • // 모든 메소드가 구현부가 있고 메소드이다. 
  • 추상클래스에서 구현하지 않은 메소드만 구현하면 된다. 

추상클래스 

  • 추상클래스는 abstract키워드가 붙은 클래스이다. 
  • 추상클래스는 추상화된 추상메소드를 가지는 클래스이다. 
  • 추상클래스는 new키워드를 사용해서 객체를 생성할 수 없다. 멤버변수를 가지고 있고, 그멤버변수를 초기화하기 위한 생성자 메소드를 포함할 수 있다. 
  • public abstract class 추상클래스 extends 부모클래스 implements 부모인터페이스 {
  • //인터페이스의 구현부가 있는 메소드이다. 
  • // 구현부가 없는 메소드이다(추상메소드)
  • //멤버변수 , 정적변수, 멤버메소드, 정적메소드, 생성자가 존재한다. 
  • 추상클래스의 생성자 메소드는 이 클래스를 상속받은 구현클래스가 객체 생성될 때 구현클래스의 생성자 메소드에서 super()메소드로 실행된다. 
  • 인터페이스 기능중 최대한 구현하고, 구현클래스들이 똑같이 구현하는 것들을 미리 추상클래스에서 구현하고 구현클래스가 상속받도록 한다. 
  • 목적 : 구현클래스의 구현부담을 감소시킨다. 
  • 구현클래스를 빠르게 개발할 수 있다. 
  • 인터페이스  - 모든 구현클래스가 반드시 구현할 기능을 정의한다.
  • 추상클래스  - 인터페이스의 기능중에서 구현클래스들이 동일하게 구현하는 기능을 추상클래스에서 미리 구현한다.
  • 구현클래스  - 인터페이스를 직접 구현하는 대신 추상클래스를 상속받아서 구현되지 않는 메소드만 자신에게 맞게 구현한다. 
  • 추상클래스는 말 그대로 불완전한 클래스이다. implements를 적으면 error가 뜨지만 abstract를 클래스 앞에 적으면 오류가 사라진다. 
  • 추상클래스는 구현부가 없어도 아무런 상관이 없고, 구현클래스에서 마무리로 구현을 해줘야 완벽한 클래스로 프로그래밍을 진행할 수 있다. 

Abstract Collection  = 추상클래스는 앞에 abstract를 붙여서 구현한다. 

  • implements collection<E>를 abstract collection이 구현했다. 
  • 상속받은 클래스들은 구현부담이 작다. 
  • 자바로 구현한 자료구조이다. 
  • 자료구조란 데이터의 저장/ 조회/ 삭제 / 변경을 지원하는 것이다. 

콜렉션프레임워크의 인터페이스-추상클래스 -구현클래스의 관계도 

 

  • 컬렉션 프레임워크는 다양한 추상클래스를 제공한다. 
  • 추상클래스들을 구현클래스의 구현부담을 감소시키기 위해서 사용한다. 

  • AbstractPhone에서 상속받은 AbstractSmartPhone은 구현클래스이고 상속의 형태기 때문에 상속받은 메소드가 존재한다. 

  • 구현부담을 줄이기 위해서 일반적으로 추상클래스를 사용한다. 
  • 추상클래스는 불완전설계도, 미완성설계도라고 한다. 구현부가 완성된채로 상속되는게 아니기 때문이다. 
  • 인터페이스의 경우 표준안과 기획안이라고 할 수 있다. 
  • 구현클래스는 완전설계도로 구현클래스로만 객체를 만들 수 있다. 
  • 구현클래스는 추상클래스에서 빠진 부분만 구현하고 완성시킨다. 
  • 생성된 객체는 Iphone객체지만 해당객체를 Phone타입의 참조변수로 참조하는 경우 전화하기, 문자보내기, 켜기, 끄기를 사용할 수 있다. 
  • SmartPhone객체로 참조변수를 설정하는 경우 메일보내기, 인터넷하기, 게임하기를 사용할 수 있다. 
  • Iphone 타입의 참조변수로 참조하는 경우 모든기능을 사용할 수 있다. 
  • 객체의 어느부분을 바라보는 지는 중요하다. 참조변수의 선정이 중요하고, 기본적인 원리를 알고있어야한다. 
  • SmartPhone의 참조변수로 둘 경우 위의 p2가 바라보는 것처럼 메소드를 한정적으로 사용할 수 있다. 참조변수의 기능을 어떤걸 사용할지 참조변수의 타입으로 결정해야한다. 
  • 그릇에 어떤게 들어갈지는 나중에 자연스럽게 판단이 가능하다. 일부러 생각하지 ㅇ낳고 자연스럽게 사용할 수 있다. 

추상화

  • 구현부가 없는 메소드를 정의하는 것이다. 
  • 인터페이스, 추상클래스는 구현부가 없는 메소드를 가질 수 있다. 

인터페이스 

  • 구현클래스가 반드시 구현할 기능을 정의할 때 사용한다. 
  • 인터페이스로 구현클래스를 구현할 때 표준(기준, 스펙)이 된다. 
    • 인터페이스에 정의된 구현부가 없는 메소드는 구현클래스에서 기능을 구현할 때 (메소드재정의) 구현메소드의 접근제한자, 반환타입, 메소드명, 매개변숭의 타입을 어떻게 정의해야할 지 알려주는 것이다. 
    • 따라서 , 인터페이스에 정의된 구현부가 없는 메소드와 구현클래스의 구현메소드는 메소드 선언부가 같아진다. 
    • 같아진다는 것은 메소드의 선언부가 사용법이 같아진다는 뜻이다. 
    • 결국, 같은 인터페이스를 구현한 구현클래스들은 구체적인 구현내용은 다를 수 있지만, 사용방법은 완전히 동일하다. 
    • 목적은 사용법을 동일하게 만드는 것을 의미한다. 

추상클래스 

  • 목적 : 구현클래스의 구현부담을 감소시키기 위해서 사용한다. 
  • 여러구현클래스에게 상관없이 동일한 구현내용을 가지는 것은 추상클래스에서 구현한 후 상속으로 내려보내고, 구현클래스마다 구체적인 구현내용이 다른것은 구현부가 없는 메소드상태로 두면, 각각의 구현클래스마다 자신에게 맞게 구현부가 없는 메소드를 재정의하게 한다. 
  • 구현내용이 동일한 기능은 상속받아서 사용하고, 구현내용이 다른 것만 구현클래스는 재정의하면 된다. 
  • 추상클래스는 인터페이스와 구현클래스를 연결하는 다리 역활을 한다. 

추상화 

  • 인터페이스는 반드시 구현해야하고, 
  • 추상클래스는 구현의 부담이 감소되게 만들어 주는 것이다. 
  • 구현클래스가 1개밖에 없을 때에는 인터페이스를 만들 필요가 없다. 
  • 인터페이스는 동일한 사용법을 만들기 위해서 이다. 
  • 데이터를 읽어오는 구체적인 내용은 다르지만, Interface를 둬서 읽어오는 방법을 read로 사용법을 통일 할 수 있다. 
  • 만약 경우의 수가 1개면 인터페이스를 만들 필요가 없지만, 미래에는 추가적인 객체가 생길 수 있어 interface로 두고 작성하면 된다. 

추상화의 template 패턴

추상화는 template라는 용도로도 사용한다. 

프로그램의 개발의 경우 -전처리 작업, - 본작업, - 후처리 작업이 존재한다. 

  • void job의 경우 나중에 메소드만 재정의해주면 된다. 
  • 여러조각중에서 한조각 빠지고 나중에 재정의하면 실행이 가능하다. 이체방법에 따라서 변화를 줄 수 있다. 
  • templete패턴의 경우 만들어서 블록처리를 하는 패턴으로 변하지 않는 작업과 변하는 작업을 따로 구별하여 프로그래밍을 할 수 있는 방법이다. 어떤job이던지 전, 후처리방법은 동일하다. 
  • 변하지않는 것을 구현하고 변하는 것을 추상화하여, 작성하고 
  • templete패턴화 시켜 사용자의 class 는 process만 호출하도록 만들면 된다. 

BankJob클래스는 템플렛클래스다

  • 변하지 않는 작업을 구현한다. 
  • 매번변하는 작업을 추상화한다. 
  • 변하지않는 작업과 변하는 작업을 적절한 순서로 실행시키는 메소드가 있다. 

TrnasferJob은 구현클래스다. 

  • 템플릿클래스에서 작업마다 변하는 내용을 구현하는 클래스다. 
  • 개발자는 작업을 구현할 때 변하지 않는 부분을 개발할 필요가 없고, 변하는 부분과 변하지 않는 부분의 실행순서도 신경쓸 필요가 없다. 

제시간에 끝내야하는 프로젝트는 패턴화 되어 있다. 

반응형
Comments