Java
abstract
Sun-Koo
2023. 3. 8. 17:03
abstract
- 메소드의 시그니처만이 정의된 비어있는 메소드를 의미
- abstract 클래스나 메소드를 사용하기 위해서는 반드시 상속해서 사용하도록 강제하는 것
ex ) 에러
abstract class A{
public abstract int b();
//본체가 있는 메소드는 abstract 키워드를 가질 수 없다.
//public abstract int c(){System.out.println("Hello")}
//추상 클래스 내에는 추상 메소드가 아닌 메소드가 존재 할 수 있다.
public void d(){
System.out.println("world");
}
}
public class AbstractDemo {
public static void main(String[] args) {
A obj = new A();
}
}
추상 클래스이므로 에러 발생 상속해서 사용해야한다.
메소드 b의 선언 부분에는 abstract라는 키워드가 등장하고 있다. 이 키워드는 메소드 b는 메소드의 시그니처만 정의 되어 있고 이 메소드의 구체적인 구현은 하위 클래스에서 오버라이딩 해야 한다는 의미다.
해결 방법
abstract class A{
public abstract int b();
public void d(){
System.out.println("world");
}
}
class B extends A{
public int b(){return 1;}
}
public class AbstractDemo {
public static void main(String[] args) {
B obj = new B();
System.out.println(obj.b());
}
}
결론 :
- 추상메소드는 바로 사용 불가
- 상속받아 사용해야 한다,
- 상속받은 클래스에서 오버라이딩을 해줘야한다.
- abstract 메소드를 가진 클래스도 abstract 클래스가 된다
- 구체적인 로직을 가진 메소드도 가질 수 있다.
추상 클래스를 사용하는 이유
- 상속을 강제하기 위한 규제
- 메소드를 상속 받은 하위 클래스의 책임으로 위임하기 위해 사용
abstract class Calculator{
int left, right;
public void setOprands(int left, int right){
this.left = left;
this.right = right;
}
public abstract void sum();
public abstract void avg();
public void run(){
sum();
avg();
}
}
class CalculatorDecoPlus extends Calculator {
public void sum(){
System.out.println("+ sum :"+(this.left+this.right));
}
public void avg(){
System.out.println("+ avg :"+(this.left+this.right)/2);
}
}
class CalculatorDecoMinus extends Calculator {
public void sum(){
System.out.println("- sum :"+(this.left+this.right));
}
public void avg(){
System.out.println("- avg :"+(this.left+this.right)/2);
}
}
public class CalculatorDemo {
public static void main(String[] args) {
CalculatorDecoPlus c1 = new CalculatorDecoPlus();
c1.setOprands(10, 20);
c1.run();
//결과 : + sum : 30 , + avg : 15
CalculatorDecoMinus c2 = new CalculatorDecoMinus();
c2.setOprands(10, 20);
c2.run();
// 결과 : - sum : 30 , - avg : 15
}
}
디자인 패턴
프로그래밍이라는 것은 반복되는 패턴이 있다.
이런 패턴들을 모아서 정리한 것이 디자인 패턴(design pattern)이다
디자인 패턴의 장점
- 좋은 설계를 단기간에 학습할 수 있다
- 소통에 도움이 된다는 점이다. 설계 방법을 토의하거나 전달할 때 설계 방법에 따라 적절한 이름이 있다면 상호간에 생각을 일치시키는 데 큰 도움이 될 것이다