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
- selinux port 등록
- grafana dashboard
- 정규식 활용
- gcc regex
- 정규식 문자열 출력
- c3 축 가리기
- telegraf
- python popen
- python subprocess
- python os
- semanage
- c3 step graph
- InfluxDB
- regex_search
- c3 초
- g++ 업데이트
- influxdb 설치
- snmp test
- c++ 정규식
- linux시간으로 변경
- snmp
- centos pyhon 설치
- c3 second
- CentOS7
- c3 축 없애기
- 1697
- gcc 업데이트
- 정규식 컴파일
- subporcess path
- 백준
Archives
- Today
- Total
리셋 되지 말자
abstract 키워드 - 추상 메서드와 추상 클래스 본문
추상 메서드(Abstract Method)
추상 메서드를 간단하게 설명하면 선언부는 있는데 구현부가 없는 메서드를 말한다. 추상 메서드를 하나라도 갖고 있는 클래스는 반드시 추상 클래스(Abstarct Class)로 선언해야 한다. 추상 메서드 없이도 추상 클래스를 선언할 수 있다.
추상 클래스(Abstract Class)
추상 클래스는 인스턴스, 즉 객체를 만들 수 없는 클래스가 된다.
몸체가 없이 선언만 있는 메서드는 어떤 것이고 왜 필요한가? - 코드 예제
동물 클래스가 있고, 이 동물 클래스를 상속(확장)하여 여러 동물 클래스를 만든다고 가정한다. 이 동물들의 울음소리를 동물 클래스에서 '울다()'라는 함수를 사용하여 출력할 때, 동물 클래스의 '울다()'라는 메서드는 사용하면 안된다. 고양이나 소가 우는건 이해가 가지만 만약 '동물 그냥동물 = new 동물()'로 생성했을 때, '그냥동물'이 무슨 동물인지 모르니 뭐라고 우는지를 알 수가 없기 때문이다.
이처럼 실수로 동물 클래스의 인스턴스를 만들고 그렇게 만들어진 동물 객체의 '울다()'메서드를 호출하면 안된다. 이를 방지하기 위해서 추상 메서드를 사용하게 된다.
package abstractionMethod02;
public abstract class 동물 {
// void 울어보세요() {
//
// }
abstract void 울어보세요();
}
- 위와같이 추상 클래스를 정의하면 '동물'클래스의 인스턴스화를 방지할 수 있다.
- '울어보세요()'메서드를 추상 메서드로 선언하여 구현부 없이 선언. 상속 받은 클래스에서 추상 함수를 구현한다.
package abstractionMethod02;
public class 강아지 extends 동물 {
void 울어보세요() {
System.out.println("나는 강아지! 멍! 멍!");
}
}
- 아래의 코드처럼 '동물' 클래스를 인스턴스화 하려고 하면 'Cannot instantiate the type 동물'이라는 에러 메시지가 출력된다.
package abstractionMethod02;
public class Driver {
public static void main(String[] args) {
동물[] 동물들 = new 동물[5];
동물들[0] = new 쥐();
동물들[1] = new 고양이();
동물들[2] = new 강아지();
동물들[3] = new 송아지();
동물들[4] = new 병아리();
for (int i = 0; i < 동물들.length; i++) {
동물들[i].울어보세요();
}
동물 그냥동물 = new 동물();
}
}
- 이외에도, 추상 클래스를 상속 받았는데, 상속받은 클래스가 추상 클래스의 추상 메서드를 구현하지 않아도 에러가 출력된다. 'The type 강아지 must implement the inherited abstract method 동물.울어보세요()'
package abstractionMethod02;
public class 강아지 extends 동물 {
// void 울어보세요() {
// System.out.println("나는 강아지! 멍! 멍!");
// }
}
추상에 대한 정리
- 추상 클래스는 인스턴스, 즉 객체를 만들 수 없다. 즉, new를 사용할 수 없다.
- 추상 메서드는 하위 클래스에게 메서드의 구현을 강제한다. (오버라이딩이 강제된다.)
- 추상 메서드를 포함하는 클래스는 반드시 추상 클래스여야 한다.
'Java(폐지) > Java 공부' 카테고리의 다른 글
클래스의 static 블록 (0) | 2020.07.20 |
---|---|
생성자(constructor) (0) | 2020.07.20 |
참조 변수의 복사 (0) | 2020.07.20 |
다형성: 사용편의성 (0) | 2020.07.17 |
상속과 T 메모리 (0) | 2020.07.16 |
Comments