추상 클래스 활용하기
추상 클래스와 템플릿 메서드 활용
추상 클래스 활용하기
추상 클래스(abstract class)란?
추상 메서드를 포함한 클래스
추상 메서드는 구현 코드 없이 메서드의 선언만 있음
abstract int add(int x, inx y); // 선언만 있는 추상 메서드
int add(int x, int y) {} // {} 부분이 구현 내용임, 추상 메서드 아님
abstract 예약어 사용
추상 클래스는 new(인스턴스화)를 사용할 수 없음
추상 클래스의 사용
추상 클래스는 상속을 위한 클래스
추상 메서드
하위 클래스가 구현해야 할 메서드
각 하위 클래스마다 다르게 구현되어야 하는 기능
구현된 메서드
하위 클래스가 공통으로 사용할 수 있는 기능 구현
경우에 따라서는 하위 클래스가 재정의(overriding) 할 수 있음
추상 클래스 구현 하기
public abstract class Computer {
public abstract void display();
public abstract void typing();
public void turnOn()
{
System.out.println("전원을 켭니다.");
}
public void turnOff()
{
System.out.println("전원을 끕니다.");
}
}
메서드에 구현코드가 없으면 abstract로 선언해야 함
abstract로 선언된 메서드를 가진 클래스는 abstract로 선언함
만약 모든 메서드가 구현 코드가 있지만, 클래스가 abstract로 선언된 경우 추상 클래스가 됨 -> new 할 수 없음
추상 클래스와 템플릿 메서드 활용
템플릿 메서드
추상 메서드나 구현된 메서드를 활용하여 전체 기능의 흐름(시나리오)을 정의하는 메서드
final로 선언하면 하위 클래스에서 재정의 할 수 없음
프레임 워크에서 많이 사용되는 설계 패턴
추상 클래스로 선언된 상위 클래스에 템플릿 메서드를 활용하여 전체적인 흐름을 정의하고 하위 클래스에 다르게 구현되어야 하는 부분은 추상 메서드로 선언해서 하위 클래스가 구현되도록 함
여러 자바 파일에서 공유하는 상수 값 정의 하기
프로젝트에서 구현 시 여러 파일에서 공유해야 하는 상수 값은 하나의 파일에 선언하여 사용하면 편리함
public class Define {
public static final int MIN = 1;
public static final int MAX = 99999;
public static final int ENG = 1001;
public static final int MATH = 2001;
public static final double PI = 3.14;
public static final String GOOD_MORNING = "Good Morning!";
}
// 상수 사용하기
public class UsingDefine {
public static void main(String[] args) {
System.out.println(Define.GOOD_MORNING); //static 으로 선언되었으므로 클래스 이름으로 참조 합니다.
System.out.println("최솟값은 " + Define.MIN + "입니다.");
System.out.println("최댓값은 " + Define.MAX + "입니다.");
System.out.println("수학 과목 코드 값은 " + Define.MATH + "입니다.");
System.out.println("영어 과목 코드 값은 " + Define.ENG + "입니다.");
}
}
final 예약어
final 변수는 값이 변경될 수 없는 상수임
public static final double PI = 3.14;
final 변수는 오직 한 번만 값을 할당할 수 있음
final 메서드는 하위 클래스에서 재정의(overriding) 할 수 없음
final 클래스는 더 이상 상속되지 않음
'IT' 카테고리의 다른 글
[Do it! 자바 프로그래밍 입문] 11 기본클래스 (0) | 2022.06.05 |
---|---|
[Do it! 자바 프로그래밍 입문] 10 인터페이스 (0) | 2022.06.01 |
[Do it! 자바 프로그래밍 입문] 08 상속과 다형성 (0) | 2022.05.31 |
[Java 개발자가 되기 위한 첫걸음 2] 04 캡슐화와 정보 은닉 (0) | 2022.05.28 |
[Java 개발자가 되기 위한 첫걸음 2] 03 객체를 만드는 생성자 (0) | 2022.05.28 |