✔ 추상클래스 (abstract) 아래 Document 참고
https://www.w3schools.com/java/java_abstract.asp
Java Abstraction
W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.
www.w3schools.com
🟥용어정리🟥
추상클래스(Abstract class)
: Abstract 이라는 키워드는 클래스와 메소드에서 사용되는 non-access modifier 이다.
추상 클래스는 객체를 생성할 수 없는 제한된 클래스이다. (추상 클래스에 접근하기 위해서는 다른 클래스에서 상속되어져야한다.)Abstract 메소드는 abstract class 안에서만 사용될 수 있다. 그리고 abstract 메소드는 body를 가질 수 없다.
The abstract keyword is a non-access modifier, used for classes and methods: Abstract class: is a restricted class that cannot be used to create objects (to access it, it must be inherited from another class). Abstract method: can only be used in an abstract class, and it does not have a body.
즉, Abstract 로 지정되어 있는 method 나 class 는 직접적으로 사용할 수 없고,
반드시 상속하는 클래스를 만들어서 사용하도록 강제되어 있음!
보통 추상클래스(Abstract class) 과 인터페이스(interface)를 많이 헷갈려 하시더라구요.
↓ 아래서 차이점을 살펴보겠습니다.
🟪 abstract VS interface 차이점
🟠 interface(인터페이스)
1) 클래스가 아닌 인터페이스라는 고유한 형태를 가지고 있음. (그래서 정의할때 class 키워드를 붙이지 않음)
2) 구체적인 로직이나 상태를 절대!! 못 가짐. (interface는 반드시 body(본체)가 없는 메소드들만을 가지고 있어야함!)
🟡 abstract(추상클래스)
1) 일반적인 클래스이다! (그래서 정의할때 class 라는 키워드가 있음)
2) 구체적인 로직이나 상태를 가질 수 있음.
(추상클래스 안에 추상메소드가 아닌 일반메소드가 존재할 수 있다는 말!)
(추상클래스 안의 추상메소드일 경우에는 절대 body를 가질 수 없음!..
..말그대로 추상적인 것이라 그 추상클래스를 상속하는 자식클래스에서 body를 만들어서 구체화를 해주어야함!)
// 🟥 Abstract class (추상 클래스)
// : Abstract 로 지정되어 있는 method 나 class 는 직접적으로 사용할 수 없고,
// 반드시 상속하는 클래스를 만들어서 사용하도록 강제되어 있음!
// 🟩 Why use Abstract?
// : 다양한 맥락에서 사용될 수 있는 기능이 있을때,
// 그 기능의 공통적인 부분이 있고,
// 맥락에 따라서 혹은 사용하는 용도에 따라서, 달라질 수 있는 기능이 있을 수 있다.
// 이러한 기능을 구현하기 위해서,
// 추상클래스(abstract class)를 만들어서
// 상위 클래스(추상 클래스)에서는 공통적으로 사용되는 로직을 구현하고,
// 그것을 상속 받은 하위클래스에서는 용도에 따라서 달라지는 구현을 사용자가 직접하도록 유도하기 위해서 abstract 을 사용한다!
// 클래스 A_abstract를 상속 받은 class B가 반드시 부모 클래스(A_abstract)의 method b()의 구체적인 내용인 본체,
// 즉, {}안에 내용을 정의해서 overriding 을 해주어야 한다!
// -> Ex) public int b() { return 1; }
// 여기서 우리가 알수 있는 것은 abstract는 상속을 강제하고 있다는 것을 알 수 있음!
// 동시에, abstract method/class는 구체적인 logic 을 갖고 있지 않고,
// 그 logic을 사용하기 위한 형식이라고 할 수 있는 signature (뼈대) 만을 갖고 있다.
// -> 여기서 말하는 signature 는 ↓
// abstract method 일 경우에는, public abstract int b();
// abstract class 일 경우에는, abstract class A_abstract{};
// 즉, 그 signature에 해당되는 method에 대한 구체적인 logic 구현의 책임은 그것을 사용하는 쪽에게 넘기는 것을 abstract 라고 함!
abstract class A_abstract {
// ↓ 아래와 같이 member 중에 하나라도 abstract를 갖고 있는 것이 있으면 그것을 담고 있는 class 는 무조건 abstract를 달아야함!
public abstract int b();
// ↓ 본체, 즉 {}가 있는 메소드는 abstract 키워드를 가질 수 없다. ↓
// public abstract int c(){System.out.println("Hello")}
// ↓ 추상 클래스 내에는 추상 메소드가 아닌 메소드가 존재할 수 있다. ↓
public void d(){
System.out.println("world");
}
}
class B extends A_abstract {
public int b(){
return 1;
}
}
public class AbstractDemo {
public static void main(String[] args) {
// ↓ abstract 키워드가 있는 class는 다이렉트로 사용불가, 상속받은 class에서만 사용가능!
// A_abstract obj = new A_abstract();
B obj2 = new B();
}
}
↓↓↓↓ 코드 다운로드 ↓↓↓↓
'🖥️프로그래밍 언어 > Java' 카테고리의 다른 글
[JAVA] 자바 추상클래스(Abstract) Part2 (1) | 2022.10.08 |
---|---|
[JAVA] 자바 인터페이스(Interface) + 총정리 (인터페이스&추상클래스 차이점) Part3 (4) | 2022.10.04 |
[JAVA] 자바 인터페이스(Interface) + 실제사용 Part2 (2) | 2022.10.02 |
[JAVA] 자바 인터페이스(Interface) 정의 + 예시 (4) | 2022.09.30 |
[JAVA] 자바 파이널 final + 예제 (2) | 2022.09.29 |