[CS] Java_ 객체지향 추상화

말하는 감자·2025년 1월 23일

CS

목록 보기
18/33
post-thumbnail

제어 추상화

제어 추상화는 어떤 클래스의 메소드를 사용하는 사용자에게 해당 메소드의 작동방식과 같은 내부 로직을 숨기고 이를 실행하기 위한 인터페이스를 제공하는 것을 말한다.

예를들어
운전자가 자동차를 운전할 때, 운전자는 자동차 엔진 작동 프로세스가 어떻게 작동하는지에 대해서 알 필요가 없고, 핸들,액셀,브레이크 등을 통한 인터페이스만으로도 운전이 가능하다.
운전자는 자동차의 동작 세부원리를 몰라도 운전하는데 지장이 없기 때문

기능

  1. 세부 사항의 은닉
  2. 코드의 재사용성
    • 여러 곳에서 동일한 로직이 필요할 때, 제어 추상화를 사용하여 같은 로직을 여러 번 작성할 필요 없이 메서드를 호출해 사용 가능
  3. 유지보수 용이
  4. 가독성 향상
class Database {
    public void insertData(String data) {
        // 데이터베이스 연결 및 삽입 로직
        System.out.println(data + "가 데이터베이스에 삽입되었습니다.");
    }
}

public class Main {
    public static void main(String[] args) {
        Database db = new Database();
        db.insertData("샘플 데이터");
    }
}

사용자는 Database의 삽입 로직의 세부 사항을 알 필요 없이 그냥 insertData를 호출하기만 하면 된다.

제어 추상화를 통해 어떤 기능을 수행하는 방법을 숨기고, 사용자가 이해하고 사용할 수 있는 고 수준의 인터페이스를 제공하여 설계의 복잡성을 줄이고 소프트웨어의 품질을 높이는데 기여

데이터 추상화

대상을 간단한 개념으로 일반화하는 과정

객체들을 하나로 묶을 때 객체들의 공통 특징으로 묶어 이름을 붙이는 것을 데이터 추상화라 한다
예를들어, 강아지,고양이 -> 애완동물 로 추상화가 가능한데, 이처럼 추상화를 진행할 수록 객체의 디테일함은 사라지고 공통된 특징만 남게 된다.


// 애완동물 
abstract class Pet {
    짖다();
}

// 강아지
class Dog extends Pet {
    @Override
    짖다() { 멍멍 };
}

// 고양이
class Cat extends Pet {
    @Override
    짖다() { 야옹 };
}

public class Main {
    public static void main(String[] args) {
        Dog myDog = new Dog();
        Cat myCat = new Cat();

        myDog.짖다();
        myCat.짖다();
    }
}

장점

  • 일관된 인터페이스 제공
    • 하위 클래스가 반드시 구현해야 하는 행동(짖다)를 명시하여 모든 애완동물이 동일한 인터페이스를 가질 수 있도록하여, 코드의 일관성을 유지하고 다양한 애완동물 객체를 동일한 방식으로 사용
  • 유지보수 및 확장 용이성
    • 새로운 애완동물이 추가되거나 강아지나 고양이의 행동을 변경해야 할 경우 하위 클래스만 수정하여 코드 변경의 영향을 최소화
  • 세부사항 은닉
    • 애완동물이라는 고 수준으 개념을 정의하고 개별 동물의 행동에 대한 세부 구현을 하위 클래스에서 하여 사용자는 애완동물의 사용자 인터페이스(짖다())만 알면 되고 해당 메서드의 내부 동작은 알 필요가 없다.

제어 추상화 vs 데이터 추상화

  • 제어 추상화
    • 무엇을 할지를 정의하고 사용자가 알고리즘의 세부 구현에 신경x
  • 데이터 추상화
    • 어떤 데이터가 있는지 정의하고, 사용자가 그 데이터를 쉽게 사용
profile
주니어개발자(?)

0개의 댓글