상세 컨텐츠

본문 제목

프로그래밍에서 추상화(Abstraction)란?

Information Technology/Computer Science

by Developer, Jiyong Kim 2024. 7. 18. 14:25

본문

이런식으로 하면 안되시구요

 

프로그래밍에서 추상화는 복잡한 데이터, 구조, 시스템 등에서 불필요한 세부 사항을 감추고 주요 개념과 기능만을 가려내 복잡도를 낮추는 방법을 말한다. 이를 통해 사용자는 중요한 요소에 집중할 수 있고, 유지보수확장성을 향상시킬 수 있다. 추상화는 크게 데이터 추상화프로세스 추상화로 나뉜다.

 

데이터 추상화는 데이터들의 공통점을 모아 그것을 중심으로 인터페이스를 제공하는 것을 말한다. 예를 들어 차, 트럭, 기차 등 객체들의 공통적인 특징을 통해 탈 것이라는 클래스로 묶을 수 있다.

// JavaScript에서의 데이터 추상화 예시
// Vehicle이라는 추상 클래스 생성
class Vehicle {
    constructor(make, model, year, color) {
    	// 추상 클래스가 인스턴스화되지 않도록 설정하는 코드
        if (new.target === Vehicle) {
            throw new TypeError("Vehicle은 추상클래스로 직접 인스턴스화 할 수 없습니다.");
        }
        this.make = make;
        this.model = model;
        this.year = year;
        this.color = color;
    }

	// 하위(자식) 클래스에서 상속받아 오버라이딩 하여 사용할 메서드 정의
    startEngine() {
        throw new Error("'startEngine()' 메서드를 구현하세요.");
    }

    stopEngine() {
        throw new Error("'stopEngine()' 메서드를 구현하세요.");
    }

    drive() {
        throw new Error("'drive()' 메서드를 구현하세요.");
    }

    displayInfo() {
        throw new Error("'displayInfo()' 메서드를 구현하세요.");
    }
}

// Vehicle 클래스 확장, Car 클래스 정의 및 메서드 오버라이딩 시행
class Car extends Vehicle {
    startEngine() {
        console.log(`${this.color} ${this.make} ${this.model}의 시동이 걸립니다.`);
    }

    stopEngine() {
        console.log(`${this.color} ${this.make} ${this.model}의 시동이 꺼집니다.`);
    }

    drive() {
        console.log(`${this.color} ${this.make} ${this.model}은/는 주행 중 입니다.`);
    }

    displayInfo() {
        return `${this.year} ${this.color} ${this.make} ${this.model}`;
    }
}

// Vehicle 클래스 확장, Truck 클래스 정의 및 메서드 오버라이딩 시행
class Truck extends Vehicle {
    startEngine() {
        console.log(`${this.color} ${this.make} ${this.model}의 시동이 걸립니다.`);
    }

    stopEngine() {
        console.log(`${this.color} ${this.make} ${this.model}의 시동이 꺼집니다.`);
    }

    drive() {
        console.log(`${this.color} ${this.make} ${this.model}은/는 주행 중 입니다.`);
    }

    displayInfo() {
        return `${this.year} ${this.color} ${this.make} ${this.model}`;
    }
    
    // 별개로 loadCargo() 메서드를 추가하여, 트럭 고유의 기능 구현
    loadCargo(cargoWeight) {
        console.log(`${this.color} ${this.make} ${this.model}는 ${cargoWeight} kg의 짐을 싣고 있습니다.`);
    }
}

// Car 객체 생성 및 메서드 호출
let myCar = new Car("Hyundai", "Sonata", 2020, "black");
myCar.startEngine();
myCar.drive();
myCar.stopEngine();
console.log(myCar.displayInfo());

// Truck 객체 생성 및 메서드 호출
let myTruck = new Truck("Kia", "Bongo2", 2015, "white");
myTruck.startEngine();
myTruck.drive();
myTruck.stopEngine();
myTruck.loadCargo(1200);
console.log(myTruck.displayInfo());

 

프로세스 추상화는 어떠한 내부 프로세스를 숨기는 것을  말한다. 예를 들어, 함수나 메서드를 사용해 특정 작업을 수행할 때, 사용자가 실제로 어떻게 작업이 수행되는지에 대해 깊이 이해하지 않고도 단순 호출이나 명령어 입력만으로 원하는 작업을 수행할 수 있도록 한다.

// 프로세스 추상화 예시(함수 활용)
function calculateArea(radius) {
    return Math.PI * radius * radius;
}

console.log(calculateArea(5));

// 추상화 하지 않는다면(원의 면적 구하기)
let radius1 = 5;
let area1 = Math.PI * radius1 * radius1;

console.log(area1);

관련글 더보기