Building value

Java[추상화(Abstraction)] 본문

Java

Java[추상화(Abstraction)]

developer_Michael 2023. 3. 23. 18:39
반응형

자바에서 추상화란,

 

프로그램에서 필요한 부분만 추려내어 불필요한 부분은 숨기고 필요한 부분만을 표현하는 것을 말합니다.

 

추상화는 프로그램을 단순화하고, 복잡도를 낮추는 등의 이점을 제공합니다.

 

추상화를 통해 프로그래머는 복잡한 시스템을 다룰 때, 필요한 기능에만 집중하여 코드를 작성할 수 있습니다.

추상화의 가장 대표적인 예로는 클래스(Class)와 인터페이스(Interface)가 있습니다. 

 

클래스는 추상화를 구체화한 구현체(Implementation)이며, 인터페이스는 추상화를 정의한 설계도입니다.

예를 들어, 동물(Animal)이라는 클래스가 있다고 가정해보겠습니다. 

 

이 클래스는 동물의 특성을 나타내는 변수와 메소드를 포함합니다. 

 

그런데 이 클래스는 실제로 구현될 동물의 종류에 따라 다양한 구현체가 필요합니다. 

 

예를 들어, 고양이(Cat)와 개(Dog)는 모두 동물이지만 각각의 특성이 다릅니다.

이때, Animal 클래스를 추상화하여 Animal 인터페이스를 정의할 수 있습니다. 

 

Animal 인터페이스는 동물이 가져야 하는 특성과 메소드를 정의합니다. 

 

인터페이스를 구현한 Cat 클래스와 Dog 클래스를 만들어서 실제 구현을 수행합니다.

다음은 추상화를 구현한 예시 코드입니다.

// 추상화된 동물 인터페이스
interface Animal {
    void speak();   // 동물의 울음소리를 출력하는 메소드
    void eat();     // 동물이 먹이를 먹는 메소드
}

// 구체적인 동물 구현체 (고양이 클래스)
class Cat implements Animal {
    @Override
    public void speak() {
        System.out.println("야옹");
    }
    @Override
    public void eat() {
        System.out.println("생선을 먹습니다.");
    }
}

// 구체적인 동물 구현체 (개 클래스)
class Dog implements Animal {
    @Override
    public void speak() {
        System.out.println("멍멍");
    }
    @Override
    public void eat() {
        System.out.println("사료를 먹습니다.");
    }
}

// 메인 메소드
public class Main {
    public static void main(String[] args) {
        Animal cat = new Cat();
        cat.speak();    // 출력 결과: 야옹
        cat.eat();      // 출력 결과: 생선을 먹습니다.

        Animal dog = new Dog();
        dog.speak();    // 출력 결과 : 멍멍

Animal 인터페이스는 speak 메소드와 eat 메소드를 선언하고 있습니다. 

 

각각 동물의 울음소리를 출력하고 먹이를 먹는 기능을 나타냅니다.

Cat 클래스와 Dog 클래스는 Animal 인터페이스를 구현한 구현 클래스입니다. 

 

speak 메소드와 eat 메소드를 오버라이딩하여, 고양이는 "야옹"이라는 울음소리를 출력하고 생선을 먹고, 

 

개는 "멍멍"이라는 울음소리를 출력하고 사료를 먹습니다.

Main 클래스에서는 Cat 클래스와 Dog 클래스를 각각 Animal 타입의 변수에 대입하여, 

 

speak 메소드와 eat 메소드를 호출합니다. 

 

이렇게 함으로써 Animal 인터페이스를 구현한 클래스들이 동일한 Animal 타입으로 사용될 수 있음을 보여줍니다.

 

메소드의 @Override 어노테이션은 부모 클래스나 인터페이스에서 

 

상속받은 메소드를 재정의하고 있다는 것을 나타내는 표시입니다. 

 

이 어노테이션을 붙이면, 재정의한 메소드가 부모 클래스나 인터페이스에서 정의된 메소드를 대체합니다.

 

인터페이스를 사용함으로써 추상화를 구현한 것이 잘 보여집니다. 

 

또한, 클래스간의 관계를 느슨하게 해주고, 유연성을 높여주는 장점이 있습니다.

반응형

'Java' 카테고리의 다른 글

Java[접근제어자]  (0) 2023.03.23
Java[인터페이스(Interface)]  (0) 2023.03.23
Java[캡슐화(Encapsulation)]  (0) 2023.03.23
Java[다형성(Polymorphism)]  (0) 2023.03.23
Java[상속(Inheritance)]  (0) 2023.03.23