Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 상속과 참조
- Bean LifecCycle
- this와 this() 차이
- map()
- json
- pseudo-code
- 슈더코드
- jquery
- 백준 11660번
- @NoArgsConstructor
- InterruptException
- interrupted()
- select
- ajax
- SQL
- 백준 1235번
- function test
- this
- 2차원배열 구간합
- Java
- MariaDB Query Log
- 자바 람다식
- 구간합
- 백준
- 마리아DB 쿼리 로그
- 합배열
- 구간합구하기
- 생성자
- 백준 11659번
- @AllArgsConstructor
Archives
- Today
- Total
평범한 연구소
[JAVA] 추상화 abstract 본문
추상클래스
- 추상클래스(abstract 클래스)는 선언만 있고 정의가 없는 하나 이상의 추상 메소드를 갖는 클래스.
- 하위클래스에서 재정의(overriding) 할 것으로 예상되는 메소드에 대해 메모리 낭비 없이 미리 호출 계획을 세워 두기 위해 작성
- 적어도 하나의 추상메소드를 포함할 때, 해당 클래스명 앞에 abstract 키워드로 명시해야함
- final, static과 같이 사용 X
- 추상메소드를 포함 할 수 있으나 반드시 포함하는 것은 아님, 일반 메소드로 정의 가능.
- 추상메소드가 없는 추상클래스도 객체 생성 X
- 독립적으로 존재X, 하위클래스를 가지고 하위클래스를 통해서만 객체 생성 가능. 추상클래스 객체 생성 X.
- 추상클래스를 상속받은 하위클래스는 추상클래스가 아닌 경우, 반드시 모든 추상 메소드 재정의 해야함.
추상클래스 예제
- 추상클래스를 이용한 선택 정렬과 버블 정렬.
- - 데이터: int[] data
- - 기능(함수): 개수확인, 비교, swap, 정렬하는 알고리즘
- 추상클래스는 추상메소드가 있어야함
- 추상클래스 SortInt 는 하위클래스인 SelectionSort, bubbleSort 를 통해서만 객체 생성 가능.
- 반복적인 출력을 해야하므로 static print()를 생성하여 main()단에서 호출.
- 추상클래스의 하위클래스 SelectionSort, bubbleSort 클래스에서는 추상클래스의 추상메소드 Sorting() 선언해야함. -> 다형성 구현
public static void main(String[] args) {
int[] num = new int[] {36, 8, 54,19,62,52};
// SortInt ss = new SortInt(); // 컴파일오류. abstract 클래스는 객체생성불가
// 추상 클래스는 반드시 하위 클래스가 존재하고, 하위클래스를 통해서만 객체 생성 가능
// SortInt ss = new SelectionSort(); // up-casting
SortInt ss = new BubbleSort(); // up-casting
System.out.print("Source Date: ");
print(num);
ss.sort(num);
System.out.print("Sort Date: ");
print(num);
}
public static void print(int[] value) { // 출력 계속 해야하므로 static메소드로 만들면 static 메소드에서 계속 부를 수 있음
for(int i=0; i<value.length; i++) {
System.out.print(value[i] + " ");
}
System.out.println();
}
}
abstract class SortInt { // 추상화는 객체 만들 수 없음.
private int[] value;
// 추상메소드
protected abstract void sorting();
public void sort(int[] value) {
this.value = value;
sorting();
}
// 배열의 길이
// final 메소드: 하위클래스에서 재정의 불가.
protected final int length() {
int n = -1;
if(value != null)
n = value.length;
return n;
}
// 배열의 두 요소 값 비교
protected final int compare(int i, int j) {
return value[i] - value[j];
}
// 배열의 두 요소 값 서로 바꾸기
protected final void swap(int i, int j) {
int t = value[i];
value[i] = value[j];
value[j] = t;
}
}
class SelectionSort extends SortInt {
@Override
protected void sorting() {
for(int i=0; i<length(); i++) {
for(int j=i+1; j<length(); j++) {
if(compare(i,j) > 0) {
swap(i, j);
}
}
}
}
}
class BubbleSort extends SortInt {
@Override
protected void sorting() {
boolean flag = true;
for(int i=1; flag; i++) {
flag = false;
for(int j=0; j<length()-i; j++) {
if(compare(j, j+1) > 0) {
swap(j,j+1);
flag = true;
}
}
}
}
}
'JAVA > 기본 개념' 카테고리의 다른 글
[JAVA] 제네릭 generic (0) | 2022.08.03 |
---|---|
[JAVA] 인터페이스 (0) | 2022.07.27 |
[JAVA] 상속 | 오버라이딩 | 캐스팅 (0) | 2022.07.25 |
[JAVA] StringBuilder, StringBuffer (0) | 2022.07.23 |
[JAVA] 기본 API | String 클래스 관련 함수 (0) | 2022.07.23 |