goal
abstract class와 method에 대해서 이해한다.
[수정전 내용 : 2022.03.13 작성]
1] abstract method
- child class에서 반드시 Overriding해야만 사용할 수 있는 메소드를 의미한다.
- abstract class에 선언된 abstract method를 반드시 선언하게하는 강제성 부여
- 추상 메소드는 선언부만 존재하며 구현부는 작성되지 않는다. (동작을 정의하지 않는다.)
abstract 반환타입 메소드이름();
1. 사용이점
- 모듈처럼 중복되는 부분, 공통적인 부분은 미리 다 만들어진 것을 사용하고
- 이를 받아 사용하는 쪽(child class)은 자신에게 필요한 부분만을 재정의하여 사용함으로써 생상선 향상, 배포 등이 쉬워진다는 이점을 갖는다.
2. abstract class
- java에서는 하나 이상의 추상 모소드를 포함하는 클래스를 가리켜 abstract class라고 한다.
- abstract class에 선언된 abstract method는 child class에서 반드시 Overriding을 해줘야한다.
- abstract class는 단독적으로 instance를 생성할 수 없다.
- abstract class는 구현부가 존재하는 method도 생성할 수 있으니 헷갈리지 말자.
- abstract class는 static이 붙는 클래스 변수, 클래스 메소드를 절대 만들 수 없으니 상기한다.
- 생각해보면 당연하다... abstract class 자체가 객체화 될 수 없으므로 필요하지 않다.
abstract class 클래스이름{
abstract 반환타입 메소드이름();
}
[수정후 내용 : 2022.05.13 작성]
goal
java의 abstract를 이해한다.
- abstract
- abstract 클래스
1. java의 abstract
java맥락에서 abstact가 내포하는 의미는 "미완성"이라고 할 수 있다.
즉, abstract 제어자는 기본적으로 "미완성"을 의미하며, 주로 클래스
와 메소드
앞에 사용하게 된다.
abstract class Animail
: Animal추상 클래스
를 의미하며 추상 메소드가 있는 클래스임을 나타낸다.abstract void cry();
: cry추상 메소드
를 의미하며 반환타입은 void다. 구현체는 없는 상태로 존재한다.
추상 클래스 자체만으로 인스턴스 생성은 불가능하다.
[1] 추상클래스 (abstract class), 어떻게 사용해야 하는가? (+ 추상메소드)
다시 짚고 넘어간다면 추상 클래스
는 미완성 설계도와 같다. 따라서 미완성 설계도로 집을 지으려고 한다는 것은 있을 수 없는 일이다. 추상 클래스
내부의 코드는 추상 메소드
를 포함한다. 여기서 주의할 것이 추상 메소드
를 포함한다는 것이지 일반 메소드나 일반 변수도 올 수 있다.
abstract class MakeAbstractClass {
int num1 = 10;
int num2 = 20;
abstract void name();
public int sum(int num1, int num2){
return num1 + num2;
};
}
abstract class 사용하기
abstract class Animal {
String kind;
public abstract void cry();
}
class Dog extends Animal {
public Dog() {
this.kind = "포유류";
}
@Override
public void cry(){
System.out.println("멍멍");
}
}
public class TestCode {
public static void main(String[] args) {
Animal dog = new Dog();
dog.cry();
}
}
/*
output
-------------
멍멍
-------------
*/
만약, Dog클래스
의 cry메소드
와 구현부를 주석처리한다면 오류가 날 것이다.
- 이유 :
abstract class
의 미완성 설계도(들)를 상속받은 상태이기 때문에Dog클래스
에서 완성시켜줘야할 의무가 있다. -> 자바의 룰과 같은 것..!
하지만, Dog클래스
의 생성자 부분을 주석처리하더라도 오류가 발생하지 않고 실행된다.
- 이유 : String kind는 인스턴스 변수로써 꼭 정의해줄 의무가 없다.
'Java > java' 카테고리의 다른 글
java :) collection framework의 순환 Iterator와 ListIterator (0) | 2022.05.16 |
---|---|
java :) final 키워드, final class/final method/final variable [+ final 변수 초기화 방법의 2가지 (반드시 기억)] (0) | 2022.05.13 |
java :) 자바의 메모리 구조 (static, stack, heap) (0) | 2022.05.10 |
java :) java에서 정규표현식 사용하기, Pattern 클래스 (0) | 2022.05.10 |
java :) 문자열의 문자 변경, replace() & replaceAll() 메소드 설명 ( + 정규표현식 [외부자료]) (0) | 2022.05.09 |