
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 코딩 되세요! ✨🙌