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 | 31 |
Tags
- 게임엔진
- oracle
- 상수변수
- c++
- Interface
- c#
- Exception
- C/C++
- 입출력
- Stack
- interface상속
- db
- singleton
- 데이터타입
- 예외던지기
- cocos2d
- 스레드
- 반복문
- unity
- c++게임엔진
- java
- 예외처리
- cocos2dx
- cocos2d-x
- Thread
- Class함수
- 문자열
- 데이터베이스
- 동기화블럭
- 프로그래밍
Archives
- Today
- Total
초보 프로그램 개발자
[ 4주차 ] Java - 추상클래스(abstract) 본문
추상클래스 ( abstract )
- 추상클래스는 반드시 한개이상의 추상메소드를 가지고 있어야 한다.
- 일반 메소드도 정의가 가능하다.
추상클래스를 만들땐 class 앞에 abstract를 붙여주면 된다.
abstract class ShapeClass{
abstract void draw();
}
ShapeClass 라는 추상클래스를 만든뒤, draw라는 추상메소드를 만들어 주었다.
- 추상메소드 정의
abstract class ShapeClass{
abstract void draw();
}
class Rect extends ShapeClass{
@Override
public void draw() {
System.out.println("┌───────────┐");
System.out.println("│네모네모네모│");
System.out.println("│네모네모네모│");
System.out.println("│네모네모네모│");
System.out.println("│네모네모네모│");
System.out.println("│네모네모네모│");
System.out.println("└───────────┘");
}
}
추상메소드를 정의할 때는 자식클래스에서 Override를 해주면 된다.
또한, 자식은 부모클래스의 모든것을 사용할 수 있는데, (private제외)
예시를 먼저 보자면
abstract class SortInt {
private int[] value;
protected abstract void sorting(); // 추상메소드
public void sort(int[] value) {
this.value = value;
sorting(); // 위의 추상메소드를 호출
}
public int length() {
if (value == null) {
return 0;
}
return value.length;
}
protected final int compare(int i, int j) {
if (value[i] == value[j])
return 0;
else if (value[i] > value[j])
return 1;
else
return -1;
}
protected final void swap(int i, int j) {
int temp;
temp = value[i];
value[i] = value[j];
value[j] = temp;
}
public void print() {
if (value == null) {
return;
}
for (int su : value) {
System.out.printf("%4d", su);
}
System.out.println();
}
}
class SortTest extends SortInt {
@Override
protected void sorting() {
// Selection Sort
for (int i = 0; i < length() - 1; i++) {
for (int j = i + 1; j < length(); j++) {
if (compare(i, j) > 0) {
swap(i, j);
}
}
}
}
}
public class Test4 {
public static void main(String[] args) {
int[] value = {3,2,65,67,1,6,33,72,132,562,346,134,12};
SortTest ob = new SortTest();
ob.sort(value);
ob.print();
}
}
위의 코드는 선택정렬을 만들어준 코드이다.
부모 클래스인 SortInt에서 추상메소드로 sorting을 만들어주고, 그 아래 sort에서 호출을 했다.
이때, sorting은 추상메소드로 안에 내용이 없지만 자식클래스 안에서 Override 해주었기 때문에,
자식 클래스의 sorting 메소드를 사용하게 된다. main절의 ob가 자식의객체이기 때문이다.
(부모 자식 관계에서 자식이 메소드를 호출할 경우 무조건 자식메소드를 실행,
자식이 메소드를 가지고 있지 않는경우에만 부모 메소드 실행)
- 사용하는 이유
추상클래스를 사용하는 이유는 객체간의 메소드 이름을 통일해 가독성을 높이기 위함이다.
부모클래스에서 메소드의 이름만을 선언한 뒤, 실제 동작은 자식들에게 모두 떠넘기기 때문이다.
Java에서는 추상클래스보다는 interface 를 더 많이 사용한다.
'교육 일지 > java' 카테고리의 다른 글
[ 4주차 ] Java - interface상속 (0) | 2023.05.22 |
---|---|
[ 4주차 ] Java - interface (0) | 2023.05.22 |
[ 4주차 ] Java - singleton (0) | 2023.05.22 |
[ 3주차 ] Java - Calendar (1) | 2023.05.19 |
[ 3주차 ] Java - Wrapper클래스 / 박싱과 언박싱 (0) | 2023.05.18 |