PHP 기본 문법 – 클래스와 객체 – 3 – 접근 제어자 (public, private, protected)

PHP 기본 문법 - 클래스와 객체 - 3 - 접근 제어자 (public, private, protected)
PHP 기본 문법 – 클래스와 객체 – 3 – 접근 제어자 (public, private, protected)

PHP 기본 문법 – 클래스와 객체 – 3 – 접근 제어자 (public, private, protected)

안녕하세요, 친절한 PHP 안내자입니다 😊
오늘은 **클래스와 객체를 다룰 때 절대 빠질 수 없는 개념! 바로 ‘접근 제어자’**에 대해 알려드릴게요.

프로그래밍 세계에서 클래스는 마치 ‘설계도’라면, 접근 제어자는 **“누가, 어디까지 접근할 수 있을까?”**를 정하는 보안 울타리예요.
우리 집에도 안방, 거실, 창고가 있듯이, 각 공간마다 들어갈 수 있는 사람의 범위가 다르죠?
접근 제어자도 딱 그런 역할을 합니다!


접근 제어자란?

접근 제어자는 클래스 안의 **속성과 메소드(함수)**에 대해
외부에서 접근 가능한 범위를 제어하는 키워드입니다.

PHP에서는 대표적으로 세 가지가 있어요:

키워드 설명
public 어디서든 접근 가능 (누구나 자유롭게 드나드는 거실)
protected 해당 클래스와 상속받은 자식 클래스에서만 접근 가능 (가족만 드나드는 안방)
private 해당 클래스 내부에서만 접근 가능 (본인만 열 수 있는 개인 금고)

1. public – 누구나 접근 OK!

가장 개방적인 접근 제어자입니다.
외부 클래스나 인스턴스에서도 제한 없이 접근 가능해요.

예시

<?php
class User {
    public $name = "홍길동";

    public function greet() {
        return "안녕하세요, {$this->name}님!";
    }
}

$user = new User();
echo $user->greet();  // 출력: 안녕하세요, 홍길동님!
?>

🎉 비유하자면, public은 “누구나 들어와도 좋아요~” 하는 오픈된 카페 같은 느낌이에요!


2. private – 나만 볼 수 있어요!

가장 제한적인 접근 제어자로,
오직 해당 클래스 내부에서만 접근할 수 있어요.
외부나 자식 클래스에서도 접근 불가능합니다.

예시

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

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

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

$account = new BankAccount();
// echo $account->balance; // 오류 발생
// echo $account->getBalance(); // 오류 발생
echo $account->showBalance(); // 정상 출력: 10000
?>

🔐 비유하자면, 금고 속 현금은 본인만 열 수 있는 비밀번호가 있어야 볼 수 있는 거죠!


3. protected – 나와 내 자식만

protected는 **나(부모 클래스)**와 내 자식 클래스에서만 접근할 수 있어요.
즉, 외부에서는 접근할 수 없지만, 상속받은 클래스에서는 접근이 가능하다는 점이 특징이에요.

예시

<?php
class Animal {
    protected $sound = "울음소리";

    protected function makeSound() {
        return $this->sound;
    }
}

class Dog extends Animal {
    public function bark() {
        return $this->makeSound();
    }
}

$dog = new Dog();
// echo $dog->makeSound(); // 오류 발생
echo $dog->bark(); // 출력: 울음소리
?>

👨‍👧 비유하자면, 가족끼리는 안방도 들어갈 수 있지만 외부인은 들어갈 수 없는 것과 같아요.


접근 제어자별 접근 가능 범위 정리표

구분 클래스 내부 자식 클래스 외부 객체
public
protected
private

언제 어떤 걸 써야 할까요?

💡 실전에서의 꿀팁!

  • public: 외부에 노출해도 되는 기능이나 데이터 (예: 유저 이름, API 메서드)
  • protected: 자식 클래스에게 물려줄 필요는 있지만 외부에는 숨기고 싶은 경우
  • private: 내부 로직 보호가 필요한 경우 (예: 비밀번호, 내부 계산용 메서드 등)

실전 예시: 클래스 설계에 접근 제어자 활용하기

<?php
class Member {
    private $password;

    public function __construct($pw) {
        $this->setPassword($pw);
    }

    private function validate($pw) {
        return strlen($pw) >= 6;
    }

    public function setPassword($pw) {
        if ($this->validate($pw)) {
            $this->password = $pw;
        } else {
            echo "비밀번호는 6자 이상이어야 합니다.";
        }
    }
}
?>

이 구조는 보안적으로 매우 안전한 패턴이에요!
외부에서는 validate()에 접근할 수 없고,
정해진 방식(setPassword)을 통해서만 비밀번호를 설정할 수 있죠.


주의할 점 정리 🔍

항목 주의 내용
private 사용시 상속 불가 private 멤버는 자식 클래스에서 상속되어도 사용 불가예요!
protected를 public처럼 사용 금지 외부에서 직접 호출이 필요한 함수는 public으로 정의하세요.
public 남발 금지 아무나 접근 가능한 구조는 보안에 취약하니 꼭 필요한 것만 public으로 설정하세요!
접근 제어자 명시 습관화 명시하지 않으면 기본이 public이므로 의도치 않게 노출될 수 있어요.

마무리하며 😊

접근 제어자는 클래스와 객체지향 프로그래밍에서 보안과 유지보수성을 높이는 핵심 도구입니다!
마치 건물의 출입 카드처럼, 누가 어디까지 접근 가능한지 명확히 구분해주는 역할을 하죠.

처음엔 public만 주로 쓰게 되지만,
실력이 늘수록 private, protected를 적재적소에 사용하는 지혜가 생긴답니다.

자, 이제 여러분도 클래스의 출입문을 잘 관리할 수 있겠죠?
다음 시간에는 상속과 오버라이딩을 배워볼 거예요!

그럼 오늘도 즐거운 PHP 코딩 되세요! ✨🙌

답글 남기기