안녕하세요! 오늘은 자바 프로그래밍에서 중요한 개념인 '추상화(Abstraction)'에 대해 알아보겠습니다. 

추상화는 복잡한 시스템을 간단한 개념으로 표현하는 프로그래밍 기법입니다. 

클래스와 인터페이스를 사용해 프로그램의 복잡성을 줄이고 유지 관리를 용이하게 하는 데 도움이 됩니다. 

예시를 통해 추상화를 자세하게 알아봅시다.

1. 추상 클래스(Abstract Class)
추상 클래스는 하나 이상의 추상 메소드를 포함하는 클래스입니다.

추상 메소드는 선언만 있고 구현이 없는 메소드이며, 하위 클래스에서 반드시 오버라이딩해야 합니다.

추상 클래스는 인스턴스를 생성할 수 없으며, 상속을 통해 사용할 수 있습니다.

예시: 도형 클래스와 상속을 사용한 삼각형, 사각형 클래스 구현하기

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
32
33
34
public abstract class Shape {
    abstract double getArea();
}
 
public class Triangle extends Shape {
    private double base;
    private double height;
 
    public Triangle(double base, double height) {
        this.base = base;
        this.height = height;
    }
 
    @Override
    double getArea() {
        return (base * height) / 2;
    }
}
 
public class Rectangle extends Shape {
    private double width;
    private double height;
 
    public Rectangle(double width, double height) {
        this.width = width;
        this.height = height;
    }
 
    @Override
    double getArea() {
        return width * height;
    }
}
 
cs

 

이 예제에서는 추상 클래스인 Shape를 선언하고, 추상 메소드 getArea()를 정의했습니다. Shape 클래스를 상속받는 Triangle과 Rectangle 클래스는 getArea() 메소드를 각각 오버라이딩하여 삼각형과 사각형의 넓이를 계산하는 구현을 제공합니다.

이렇게 추상 클래스를 사용하면 도형의 공통 특성을 Shape 클래스에 정의할 수 있고, 각 도형의 세부 구현은 하위 클래스에 나누어 관리할 수 있습니다. 이를 통해 코드의 구조를 간결하게 만들고 유지 관리가 용이해집니다.

 

2. 인터페이스(Interface)

인터페이스는 모든 메소드가 추상 메소드인 경우 사용할 수 있는 개념입니다.

인터페이스는 다중 상속을 지원하며, 다양한 구현을 강제하거나 규약을 정의하는 데 사용됩니다.

 

예시: 동물 클래스와 인터페이스를 사용한 포유류, 조류 클래스 구현하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public interface Animal {
    void makeSound();
}
 
public class Mammal implements Animal {
    @Override
    public void makeSound() {
        System.out.println("포유류가 소리를 낸다.");
    }
}
 
public class Bird implements Animal {
    @Override
    public void makeSound() {
        System.out.println("조류가 소리를 낸다.");
    }
}
 
cs

 

이 예제에서는 인터페이스인 Animal을 선언하고, 추상 메소드 makeSound()를 정의했습니다. Animal 인터페이스를 구현하는 Mammal과 Bird 클래스는 makeSound() 메소드를 오버라이딩하여 포유류와 조류의 소리를 출력하는 구현을 제공합니다.

이렇게 인터페이스를 사용하면 다양한 동물들의 공통 특성을 Animal 인터페이스에 정의할 수 있고, 각 동물의 세부 구현은 해당 클래스에 나누어 관리할 수 있습니다.

또한, 인터페이스를 사용하면 다중 상속을 지원하여 여러 인터페이스를 동시에 구현할 수 있습니다.

이를 통해 코드의 확장성과 유연성이 높아집니다.

 

추상화를 사용하면 코드의 복잡성을 줄이고 유지 관리가 쉬운 프로그램을 작성할 수 있습니다.

추상 클래스와 인터페이스를 활용하여 공통된 기능을 재사용하고, 확장성과 유연성을 높여보세요!

'[JAVA] > ┃ⓑ KEYWORDS' 카테고리의 다른 글

[JAVA] void  (0) 2023.03.20
[JAVA] 다형성 (Polymorphism)  (0) 2023.03.19
[JAVA] 오버로딩(Overloading) vs 오버라이딩(Overriding)  (0) 2023.03.19
[JAVA] 상속 (Inheritance)  (0) 2023.03.19
[JAVA] 캡슐화(Encapsulation)  (0) 2023.03.18