PHP getter/setter 패턴 완전 정리
Member 클래스에 5개의 private 멤버변수를 선언하고, 각각에 setter(저장)와 getter(조회) 메서드 쌍을 만든 뒤, 객체를 생성해서 값을 넣고 꺼내는 전형적인 OOP 패턴이다.
→ getter가 멤버변수 값을 호출한 자리로 반환해서 순서대로 출력된다
멤버변수를 public으로 열어두면 어디서든 $member->id = "아무값"으로 덮어쓸 수 있다. 검증 없이 잘못된 값이 들어와도 막을 방법이 없다. private으로 잠가두면 외부 코드가 직접 건드릴 수 없고, setter를 통해서만 값을 넣을 수 있어서 나중에 setter에 유효성 검사를 추가하기 쉬워진다.
$member->id = "";$member->password = null;외부에서 아무 값이나 직접 주입 가능. 유효성 검사 추가 불가.
$member->setID("1");setter 안에서 빈 문자열 체크, 길이 제한 등 검증 로직 추가 가능.
실무에서 setter에 유효성 검사를 추가하는 것은 선택이지만, 처음부터 setter를 만들어두면 나중에 검증 로직을 끼워 넣을 때 기존 코드를 전혀 바꾸지 않아도 된다. 이것이 캡슐화 설계의 핵심 이점이다.
setter의 역할은 "외부에서 값을 받아 멤버변수에 저장"하는 것이다. 저장만 하면 끝이기 때문에 반환할 것이 없다. 매개변수로 받은 값을 $this->변수명 = $매개변수로 넣어두면 그 객체가 살아있는 동안 값이 유지된다.
public function __construct(private string $id, private string $email)처럼 생성자 인수로 멤버변수를 선언·초기화할 수 있다(생성자 프로퍼티 승격). 단, setter/getter 분리 패턴이 필요한 경우엔 여전히 이 방식을 쓴다.getter는 private 멤버변수에 보관된 값을 "메서드가 호출된 자리로 돌려준다". print $member->getID()라고 쓰면, getID() 자리에 반환된 값이 치환되어 출력된다. 직접 $member->id에 접근하는 것이 아니라 메서드를 통해 안전하게 읽는 방식이다.
클래스는 설계도다. new Member를 2번 호출하면 독립된 객체 2개가 만들어진다. 클래스 내부에서 $this는 "지금 이 메서드를 호출한 그 객체"를 뜻하기 때문에, $member1->setID("A")와 $member2->setID("B")는 서로 다른 객체의 id 변수에 각각 저장된다.
수천 명의 회원 데이터를 각각 독립된 Member 객체로 관리할 수 있는 것이 이 구조의 핵심이다. 배열이나 전역 변수 대신 객체를 쓰면 각 회원의 데이터가 서로 섞이지 않는다.
PHP/Java 등에서 메서드명이나 변수명에 두 개 이상의 단어가 들어갈 때, 두 번째 단어부터 첫 글자를 대문자로 쓰는 관례다. 낙타의 등이 올라갔다 내려갔다 하는 모양과 비슷하다고 해서 카멜표기법이라고 부른다. 언더스코어 방식(snake_case)을 쓰지 않는 Java/PHP OOP 세계의 표준이다.
| 원단어 조합 | 카멜표기법 결과 | 설명 |
|---|---|---|
| set + id | setID |
ID는 약어라 전부 대문자로 쓰는 경우도 많다 |
| set + lastname | setLastname |
두 번째 단어 L을 대문자로 |
| get + firstname | getFirstname |
두 번째 단어 F를 대문자로 |
| set + password | setPassword |
두 번째 단어 P를 대문자로 |
| print + hello | printHello |
동사+명사 조합도 동일 규칙 적용 |
클래스는 정의만으로는 아무것도 실행되지 않는다. new 키워드로 객체를 생성한 뒤에야 메서드를 호출할 수 있다. 아래 흐름이 getter/setter 패턴의 기본 생애주기다.
| 실수 | 증상 | 해결 |
|---|---|---|
| $member->id = "1" 직접 접근 시도 | Cannot access private property 오류 | setter 메서드 $member->setID("1") 를 통해 저장 |
| setter에서 $id = $id 오타 (this 빠짐) | 멤버변수에 저장 안 됨. getter가 null 반환 | 반드시 $this->id = $id 로 현재 객체 변수에 저장 |
| new Member() 대신 Member()만 호출 | Call to undefined function 오류 | 객체 생성은 반드시 new 키워드 사용 |
| getter 호출 시 괄호 누락 $member->getID | 객체 자체가 출력되거나 오류 발생 | 메서드는 반드시 괄호 포함 $member->getID() |
| 두 객체를 생성했는데 값이 섞임 | 예상과 다른 값 출력 | $member1, $member2가 각각 new로 독립 생성됐는지 확인 |
핵심 한 줄 요약
Tags
'php' 카테고리의 다른 글
| PHP form + 클래스 연동 완전 정리 — HTML 입력 폼과 Member 클래스 setter/getter 실전 패턴 (0) | 2026.07.12 |
|---|---|
| PHP 런타임 상태 완전 정리 — 클래스가 메모리에서 실행되는 순간 (0) | 2026.07.12 |
| PHP trait 완전 정리 — 수평상속으로 다중 기능을 조합하는 방법 (0) | 2026.07.12 |
| PHP 상속과 오버라이딩 완전 정리 — extends와 메서드 재정의가 작동하는 원리 (0) | 2026.07.12 |
| PHP new 키워드 — 객체 생성 완전 정리 (0) | 2026.07.12 |
왕진 블로그

댓글