Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP 추상화와 캡슐화의 차이점 완벽 가이드

PHP 5부터 객체 지향 프로그래밍(OOP) 패러다임이 도입되면서, 실시간 PHP 애플리케이션에서 코드를 재사용하고 체계적으로 관리할 수 있게 되었습니다.

객체 지향 모델의 핵심 개념에는 클래스(class), 객체(object), 캡슐화(encapsulation), 다형성(polymorphism), 추상 클래스와 final 클래스 및 메서드, 인터페이스, 상속 등이 있습니다.

이 글에서는 그중에서도 많은 초보 개발자들이 혼동하기 쉬운 추상화(Abstraction)캡슐화(Encapsulation)의 핵심 차이점을 자세히 살펴보겠습니다.

캡슐화(Encapsulation)란?

  • 캡슐화는 데이터 멤버(변수)와 구현 세부 사항을 '클래스'라는 하나의 단위로 묶는 기법입니다. 즉, 클래스는 내부에 포함된 변수와 메서드로 구성됩니다.
  • 캡슐화는 클래스 내부의 데이터 멤버를 외부로부터 보호하는 메커니즘입니다. 최종 사용자가 데이터에 직접 접근할 수 없습니다.
  • 한 클래스의 데이터 멤버(변수)는 다른 클래스에서 직접 접근할 수 없으며, 오직 해당 클래스 자신의 메서드를 통해서만 접근이 가능합니다.
  • 캡슐화는 private, protected 같은 접근 제어자(access modifier)를 사용하여 구현됩니다.
  • 캡슐화는 웹 애플리케이션의 복잡도를 줄이고, 데이터 무결성과 보안을 유지하는 데 활용됩니다.

캡슐화 예제 코드

<?php
class BankAccount {
    private $balance = 0;

    public function deposit($amount) {
        if ($amount > 0) {
            $this->balance += $amount;
        }
    }

    public function getBalance() {
        return $this->balance;
    }
}
?>

위 예제처럼 변수를 private으로 선언하면 외부에서 직접 수정할 수 없고, 반드시 공개된(public) 메서드를 통해서만 접근하게 됩니다. 이것이 바로 캡슐화입니다.

추상화(Abstraction)란?

  • 추상화는 배경에 있는 복잡한 세부 사항은 감추고, 꼭 필요한 핵심 기능만 표현하는 구조를 의미합니다.
  • 추상화는 구현 세부 사항을 최종 사용자에게 숨기고, 어떻게(how)가 아닌 무엇(what)만 보여주는 기술입니다.
  • 추상화는 클래스와 함께 다형성 개념을 구현하는 데 활용됩니다. 추상 클래스 안에서는 메서드를 선언만 할 수 있으며, 일반적으로 이를 상속받은 파생 클래스가 실제 동작을 구현합니다.
  • 추상 클래스는 인스턴스화(instantiation)할 수 없으므로, 최종 사용자가 직접 접근하는 것이 불가능합니다.
  • 추상화는 애플리케이션의 복잡도를 낮추고, 코드의 재사용성과 확장성을 높이는 데 사용됩니다.

추상화 예제 코드

<?php
abstract class Animal {
    // 선언만 존재하는 추상 메서드
    abstract public function makeSound();
}

class Dog extends Animal {
    public function makeSound() {
        echo "멍멍!";
    }
}

class Cat extends Animal {
    public function makeSound() {
        echo "야옹!";
    }
}
?>

추상 클래스 Animal은 직접 객체를 만들 수 없지만, 각 파생 클래스가 makeSound()를 서로 다르게 구현함으로써 유연하고 확장 가능한 구조를 만들 수 있습니다.

추상화 vs 캡슐화 핵심 차이점 비교

구분캡슐화(Encapsulation)추상화(Abstraction)
목적데이터와 메서드를 하나의 단위로 묶어 외부로부터 보호불필요한 세부 사항을 숨기고 핵심 기능만 노출
구현 방식private, protected 접근 제어자 사용abstract 클래스, 인터페이스(interface) 사용
초점데이터 보안 및 무결성설계의 단순화 및 유연성
인스턴스 생성일반 클래스이므로 인스턴스 생성 가능추상 클래스는 인스턴스화 불가
효과내부 상태 보호, 부작용 방지복잡도 감소, 코드 재사용성 향상

정리

캡슐화는 '데이터를 어떻게 보호할 것인가'에 초점을 맞춘 개념이고, 추상화는 '사용자에게 무엇을 보여줄 것인가'에 초점을 맞춘 개념입니다. 두 개념은 서로 대립하는 것이 아니라 상호 보완적으로 사용되며, PHP에서 잘 설계된 객체 지향 애플리케이션을 만들기 위해 반드시 함께 이해해야 하는 핵심 요소입니다.