본문 바로가기

비개발자의 개발 일지

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

시리즈 보기
php

PHP class 키워드 — 클래스 선언 완전 정리

by 왕진 2026. 7. 8.
반응형

 

 

Web Development · PHP Class

PHP class 키워드 — 클래스 선언 완전 정리

멤버변수, 메서드, $this의 역할 | 레거시 PHP vs 모던 PHP의 차이
시작 오늘 분석할 코드

PHP에서 처음으로 class 키워드를 사용해 클래스를 선언한 예제다. 클래스 안에 멤버변수와 메서드를 선언하고 $this로 자기 자신을 참조하는 기본 구조를 담고 있다.

// user1.php — PHP 클래스 선언 기초 <?php class User { public $name = '철수'; // 멤버변수 — 클래스 안에 선언된 변수 public function print_hello() { // 메서드 — 클래스 안에 선언된 함수 print $this->name; // $this = 현재 활성화된 객체 자신 print " 님 안녕하세요!<BR>"; } } ?>
실제 출력 미리보기
철수 님 안녕하세요!

클래스를 선언만 해서는 아무 출력이 없다. new User()로 객체를 생성해야 실행된다 (→ user2 파일).


용어 핵심 용어 정리
classPHP 클래스를 선언하는 키워드. 멤버변수와 메서드의 묶음(설계도)이다.
객체 (Object)클래스(설계도)로 만들어진 실체. new 키워드로 생성한다.
인스턴스객체와 같은 의미. "User클래스의 인스턴스"처럼 클래스를 강조할 때 쓴다.
멤버변수클래스 안에 선언된 변수. 프로퍼티(property)라고도 부른다.
메서드클래스 안에 선언된 함수. 클래스 밖의 함수와 구별하기 위해 메서드라 부른다.
public접근제어자. 클래스 외부에서도 자유롭게 접근할 수 있다는 선언이다.
$this클래스 메서드 안에서 현재 활성화된 객체 자신을 가리키는 특수 변수.
-> 연산자객체의 멤버에 접근하는 연산자. Java의 점(.)에 해당한다.
레거시 PHP클래스 없이 함수 중심으로 개발하는 구식 방식. 여전히 현장에서 많이 쓰인다.
모던 PHP클래스·객체지향(OOP)을 중심으로 개발하는 방식. Laravel 등 프레임워크가 대표.

1 PHP에 클래스가 생긴 이유
왜 PHP에 뒤늦게 클래스가 도입되었나?

PHP는 원래 웹 페이지를 빠르게 만들기 위한 스크립트 언어였기 때문에 함수(function) 중심으로 설계되었다. 전 세계에 PHP 개발자층이 두터워지고 코드가 엄청나게 쌓였기 때문에, 언어의 핵심 방향을 바꾸기가 쉽지 않았다.

그러다 2000년대 중반 Java + Spring 진영이 크게 성장하면서 객체지향 프로그래밍(OOP)의 장점이 부각되었고, PHP도 뒤늦게 클래스를 제대로 지원하기 시작했다.

※ 그 결과 PHP 시장에는 레거시 방식모던 방식이 공존하며, 구인 공고에서도 둘을 따로 구별해 뽑는 경우가 있다. 두 방식 모두 익혀두면 선택의 폭이 훨씬 넓어진다.
레거시 PHP (함수 중심)
• 전역 함수와 변수 위주
• 파일을 include해서 조각 조합
• 짧은 스크립트엔 간결하고 빠름
• 구형 코드베이스에서 여전히 현역
모던 PHP (클래스 중심)
• 클래스·객체로 코드 구조화
• 네임스페이스·오토로딩 지원
• Laravel, Symfony 등 프레임워크
• 대규모 프로젝트 유지보수에 유리

2 class 키워드로 클래스 선언하기
왜 클래스 이름은 대문자로 시작하나?

class User { ... }처럼 class 키워드 뒤에 클래스 이름을 쓰면 클래스가 선언된다. PHP 공식 관례는 PascalCase(첫 글자 대문자, 이후 단어도 대문자로 시작)다.

class User { ... } // 권장 — PascalCase class user_account { ... } // 동작하지만 관례 위반 class userAccount { ... } // camelCase — PHP 클래스엔 비권장

클래스는 설계도(Blueprint)다. 선언만 해서는 아무것도 실행되지 않는다. new 키워드로 객체를 만들어야 비로소 동작한다.

※ 클래스명은 파일명과 일치시키는 게 관례다. User 클래스 → User.php. 프레임워크의 오토로딩이 이 규칙을 기반으로 동작한다.

3 멤버변수 — 클래스 안의 변수
왜 멤버변수를 "프로퍼티"라고도 부르나?

클래스 안에 선언된 변수를 멤버변수(member variable) 또는 프로퍼티(property)라고 부른다. 일반 변수와 달리 클래스 소속이기 때문에 별도의 이름으로 구별한다.

class User { public $name = '철수'; // 기본값 있는 멤버변수 public $age = 25; // 숫자 기본값 public $email; // 기본값 없이 선언만 → null }

멤버변수에는 반드시 접근제어자(public / protected / private)를 붙이는 게 권장된다. 붙이지 않으면 기본적으로 public으로 처리되지만, 명시적으로 쓰는 것이 읽기에 좋다.

멤버변수 vs 지역변수: 메서드 안에서 $x = 10;처럼 선언한 변수는 지역변수로, 메서드가 끝나면 사라진다. 멤버변수는 객체가 살아있는 동안 계속 유지된다.

 

반응형

 

4 메서드 — 클래스 안의 함수
왜 클래스 안의 함수는 "메서드"라고 따로 부르나?

클래스 밖에 선언된 독립 함수와 구별하기 위해, 클래스 안에 선언된 함수를 메서드(method)라고 부른다. 선언 문법은 동일하게 function 키워드를 사용하지만, 앞에 접근제어자를 붙인다.

class User { public $name = '철수'; public function print_hello() { // public 메서드 print $this->name; print " 님 안녕하세요!<BR>"; } public function get_name() { // 메서드는 여러 개 선언 가능 return $this->name; } }
※ 메서드는 클래스의 행동(behavior)을 정의한다. 멤버변수가 "무엇을 가지고 있나"라면, 메서드는 "무엇을 할 수 있나"에 해당한다.

5 $this — 자기 자신을 가리키는 특수 변수
왜 $this가 필요한가?

메서드 안에서 같은 객체의 멤버변수나 다른 메서드에 접근하려면 $this를 써야 한다. $this는 "현재 이 메서드를 호출한 객체 자신"을 가리킨다.

class User { public $name = '철수'; public function print_hello() { print $this->name; // $this → 현재 객체, ->name → 그 객체의 $name // print $name; ← 오류! 메서드 안에서 $name 단독 사용 불가 } }
$user (객체)
print_hello() 호출
$this = $user
$this->name = '철수'

Java에서 a.name처럼 점(.)을 쓰는 반면, PHP는 $a->name처럼 화살표 연산자 ->를 사용한다. 이 규칙은 멤버변수와 메서드 모두에 적용된다.

$this->name에서 멤버변수 앞에는 $를 붙이지 않는다. $this->$name이 아닌 $this->name이 올바른 문법이다.

6 클래스 선언 위치와 파일 구성
클래스는 어디에 선언해야 하나?

PHP에서 클래스는 파일 어디에 선언해도 동작한다. 하지만 관례적으로 별도 파일에 분리하는 것이 표준이다. 이 예제는 학습용으로 한 파일에 모두 담은 것이다.

실무 권장 구성
  • User.php — 클래스 선언만 (설계도 파일)
  • view.phprequire 'User.php' 후 객체 생성·메서드 호출
  • Laravel 같은 프레임워크는 오토로딩으로 클래스 파일을 자동으로 불러온다
※ PSR-4 오토로딩 표준에 따르면 클래스명과 파일명을 완전히 일치시켜야 한다. class UserAccount → 파일명 UserAccount.php.

7 자주 하는 실수
실수 증상 해결
$this->$name 처럼 $ 붙임 변수명으로 인식해 예상치 못한 동작 발생 $this->name — 화살표 뒤는 변수 이름 그대로 ($ 없음)
클래스 선언 없이 new User() 호출 Class "User" not found 오류 클래스 선언이 먼저 있어야 하거나 파일을 require해야 한다
메서드 안에서 $name으로 멤버변수 접근 시도 undefined variable 경고 또는 빈 값 출력 반드시 $this->name으로 접근해야 한다
접근제어자 없이 멤버변수 선언 동작은 하지만 PHP 7+ 권고 위반 public / private / protected 명시 권장
클래스 이름 소문자로 시작 (class user) 동작은 하지만 PSR-1 코딩 스타일 위반 PHP 관례: 클래스명은 PascalCase (User, UserAccount)

핵심 한 줄 요약

class 키워드멤버변수 + 메서드를 하나로 묶는 설계도 선언
public $name = '철수'외부에서 접근 가능한 멤버변수 선언 + 기본값 설정
public function print_hello()클래스에 속한 함수 = 메서드. function 앞에 접근제어자 필수
$this->name메서드 내부에서 자기 객체의 멤버변수에 접근하는 방법
레거시 vs 모던 PHP함수 중심 구식 방식과 클래스 중심 현대 방식이 현재 공존 중

Tags

#PHP 클래스 #class 키워드 #멤버변수 #메서드 #$this #public #객체지향 #OOP #모던PHP #레거시PHP #PHP강의 #웹개발 #티스토리
▼ 티스토리 태그 입력란 복사용
PHP 클래스, class 키워드, 멤버변수, 메서드, $this, public, 객체지향, OOP, 모던PHP, 레거시PHP, PHP강의, 웹개발, 티스토리
반응형

댓글