본문 바로가기

비개발자의 개발 일지

현장 팀장에서 수출 ERP까지 — AI와 함께 시스템을 만든 기록

시리즈 보기
php

PHP getter — private 멤버를 메서드로 우회 접근 완전 정리

by 왕진 2026. 6. 18.
반응형

 

 

Web Development · PHP getter

PHP getter —
private 멤버를 public 메서드로 안전하게 노출

$test->str2는 막혀도 $test->getStr2()는 가능
시작 오늘 분석할 코드
<?php class Test { public $str1 = '공개'; private $str2 = '비밀'; public function getStr2() { return $this->str2; } } $test = new Test(); print $test->str1; // "공개" print $test->getStr2(); // "비밀" ?>

private 멤버에 직접 접근은 막혀 있지만, 같은 클래스의 메서드는 자유롭게 접근 가능. public 메서드를 통해 값을 꺼내는 패턴이 getter.


1 getter / setter 패턴
class User { private $age; // getter — 읽기 public function getAge() { return $this->age; } // setter — 쓰기 (검증 포함) public function setAge($age) { if ($age < 0 || $age > 150) throw new Exception("잘못된 나이"); $this->age = $age; } }

getter는 단순 반환, setter는 입력 검증을 끼워 넣을 수 있다는 게 핵심.


2 private + getter의 가치
· 외부 변경을 막아 데이터 무결성 보장
· 내부 구현을 바꿔도 외부 코드 영향 X (예: 캐시 추가, 형 변환)
· 특정 조건에서만 노출하는 등 제어 가능
· 자동완성·문서화 도구가 명시적 인터페이스 활용

3 자주 하는 실수
· 모든 멤버를 public — 캡슐화 의미 사라짐
· 모든 멤버에 getter/setter — 결국 public과 동일
· setter 검증 누락 — getter/setter 패턴의 의미 절반 손실
· 이름 규칙 안 지킴 (관행은 getX/setX)

 

반응형

 

4 PHP 8.1+ readonly
class User { public function __construct( public readonly string $name, // 생성 후 변경 불가 public readonly int $age, ) {} } $u = new User("kim", 30); $u->name = "lee"; // 오류 — readonly

최신 PHP는 readonly 키워드로 "생성 시 한 번만 설정, 이후 변경 불가" 같은 패턴을 더 깔끔하게 표현 가능.


핵심 한 줄 요약

private 멤버외부 직접 접근 X
getterprivate를 안전하게 읽는 public 메서드
setter검증 후 변경하는 public 메서드
캡슐화데이터 보호 + 인터페이스만 노출
$this->메서드 안에선 자기 private도 접근
실무DTO·엔터티·도메인 객체 표준 패턴
PHP 8.1readonly로 더 간결하게
반응형

댓글