26강. 추상클래스 활용하기(1)

철새·2022년 3월 2일
0
  • Do it! 자바 프로그래밍 입문 온라인 강의를 수강하며 작성하였습니다.
  • Section 1. 자바의 핵심 - 객체지향 프로그래밍
  • 26강 "추상클래스 활용하기(1)"
  • 추상 클래스란? (abstract class) > 추상 클래스와 템플릿 메서드 > 추상 클래스의 사용 > 추상 클래스 구현하기

추상 클래스란? (abstract class)

  • 추상 메서드를 포함한 클래스
  • 추상 메서드는 구현코드 없이 메서드의 선언만 있음
  • abstract 예약어 사용
  • 추상 클래스는 new (인스턴스화) 할 수 없음

추상 클래스와 템플릿 메서드

  • 템플릿 메서드 : 추상 메서드나 구현된 메서드를 활용하여 전체 기능의 흐름(시나리오)을 정의하는 메서드. (final로 선언하면 하위 클래스에서 재정의할 수 없음)
  • 프레임워크에서 많이 사용되는 설계 패턴
  • 추상 클래스로 선언된 상위 클래스에 템플릿 메서드를 활용하여 전체적인 흐름을 정의하고, 하위 클래스에서 다르게 구현되어야 하는 부분은 추상 메서드로 선언해서 하위 클래스가 구현하도록 함.

추상 클래스의 사용

  • 추상 클래스는 상속을 위한 클래스
  • 추상 메서드 : 하위 클래스가 구현해야 할 메서드로, 각 하위 클래스마다 다르게 구현되어야 하는 기능
  • 구현된 메서드 : 하위 클래스가 공통으로 사용할 수 있는 기능 구현. 경우에 따라서는 하위 클래스가 재정의(overriding) 할 수 있음

추상 클래스 구현하기

  • 메서드에 구현 코드가 없으면 abstract로 선언해야 함
  • abstract로 선언된 메서드를 가진 클래스는 abstract로 선언함
  • 모든 메서드가 구현코드가 있지만 클래스가 abstract로 선언된 경우에도 추상 클래스가 된다.
    (new 할 수 없음)
  • 추상 클래스의 추상 메서드는 하위 클래스에서 반드시 구현되어야 함.
//추상 메서드를 포함하므로 추상 클래스임. (abstract 예약어 사용)
public abstract class Computer {
	//추상 메서드 (상속받는 class에서 구현해야 함)
	public abstract void display();
	public abstract void typing();
    
	// 구현 내용이 있으므로 추상 메서드가 아님
	public void turnOn() {
		System.out.println("전원을 켭니다.");
	}
	public void turnOff() {
		System.out.println("전원을 끕니다.");
	}
}
//Computer(abstract 클래스)를 상속받으므로 추상 메서드를 모두 구현해야 함
public class DeskTop extends Computer{
	@Override
	public void display() {
		System.out.println("DeskTop display()");
	}
	@Override
	public void typing() {
		System.out.println("DeskTop typing()");
	}
}
//추상 메서드를 모두 구현하지 않으면 자기 자신이 추상 클래스가 되어야 함
public abstract class NoteBook extends Computer {
	@Override
	public void display() {
		System.out.println("NoteBook display()");
	}
}
//NoteBook 클래스에서 구현한 추상 메서드는 다시 구현할 필요 없음
public class MyNoteBook extends NoteBook{
	@Override
	public void typing() {
		System.out.println("MyNoteBook typing()");
	}
}

예시로 작성하지는 않았지만 추상 클래스의 추상 메서드를 하위 클래스가 overriding 하여 재정의 할 수 있다.

Computer c1 = new Computer();	//error! 추상 클래스는 new(인스턴스화) 불가
Computer c2 = new DeskTop();	//DeskTop 클래스는 인스턴스화 가능하며, 업캐스팅 가능
Computer c3 = new MyNoteBook();	//MyNoteBook 클래스는 인스턴스화 가능
NoteBook c4 = new MyNoteBook();	//MyNoteBook 클래스는 Computer와 NoteBook으로 업캐스팅 가능
profile
효율성을 추구하며 세상을 떠도는 철새입니다.

0개의 댓글

관련 채용 정보