사실 이부분은 오늘 배운 개념인데 나도 잘 정리가 안되어서 복습 겸 공부 차 블로그에 끄적이게되었다.
나도 이해가 잘 안가는 부분이라 좀 두서없을수도 있지만.. 잘 모르는 만큼 내가 이해를 해야하기때문에 최대한 친절하게 정리 해 볼 계획이니 혹시나 개념이 안잡히는 사람이 이 글을 본다면 이해에 도움이 되길 바란다... :)
이번 글에서 다룰 주제는 PHP의 클래스와 인스턴스의 개념이다
이것을 이해하기 위해서는 클래스가 무엇인지를 먼저 알아야 한다.
개념에 대한 정의를 내리는 것은
클래스란?
현실에 있는 대상에서 제작하고자 하는 프로그램에 필요한 속성과 동작만을 추려내어 설계하는 문법이다.
쉽게 말해서 객체의 템플릿, 즉 설계도라고 할 수 있으며, 객체를 생성하기 위한 필드, 생성자, 메소드로 구성되어있다.
클래스를 정의하는 문법
class 클래스명 { //클래스의 속성과 메서드 // }
강제성은 없지만 알아두면 전문성 있어보일 클래스/클래스명의 규칙 :D
-프로퍼티의 정보는 보통 앞쪽에 적지만 동작에있어 위치는 관계가 없다. 뒤쪽에 나와도 중간에 나와도 된다.
-프로퍼티와 메소드의 정의 앞에는 (private, public/protected라는 접근제어자가 붙어있다)
-클래스 이름은 대문자로 시작하며, 여러단어로 구성될 경우 각 단어의 사이는 언더스코더를 사용하여 분리하고 각 단어의 첫자를 대문자로 사용한다 (ex)Table_Setting)
-프로퍼티와 메소드는 소문자로 시작된다. 여러단어로 구성될 경우 카멜표기법을 사용한다 (ex) tableSetting)
-프로퍼티와 메소드가 private인 경우 첫자를 언더스코어를 사용한다.
인스턴스란?(=객체)
설계하여 생성된 클래스를 바탕으로 만들어 낸 클래스의 객체를 의미한다
그렇다면 위의 문법을 이용해서 간단한 클래스를 만들어보자!
class User{
public $name = "김철수";
public function print_hello(){
echo $this -> name; //변수의 내용참조
echo "님 안녕하세요";
}
}
위의 코드를 분석해보겠다
public은 접근제한 키워드이다(클래스의 프로퍼티와 메서드 앞에는 접근제한 키워드를 써주는것이 관례이다)
$name이라는 변수를 '김철수'로 정의 한 후,
print_hello( )라는 함수를 선언하여 메서드를 만들어준다
이때 print_hello( )의 함수 안의 내용은
$this -> name; (this는 현재 인스턴스 자신을 의미하며 name은 변수인 '김철수'를 참조한다)
위으 코드를 보면 화면에는 김철수님 안녕하세요 가 출력 되어야하겠지..만 아직 출력이 되지 않을것이다
그 이유는 아직 생각만하고 선언하지 않은 상태이기 때문이다..!
쉽게 얘기하자면 앞서말한듯이 class란 객체의 설계도면이고,
설계도만 가지고 물건이 제작되지 않듯이 이것을 실행시키기위해서는 이설계도로 제작을 실행해주어야 한다
$user01 = new User(); //인스턴스 생성 문법 : 오브젝트변수 = new 클래스명();
$user01->print_hello();
그렇기 때문에 상기 코드로 인스턴스를 생성하여 실제 객체를 생성해주어야 한다
이렇게 생성까지 해주고나면
$user01은 new User();이라는 클래스(설계도)를 담은 변수가 된다
이 다음 클래스 내부에 생성한 print_hello();를 user01 인스턴스에 생성하고나면 지정해 둔 로컬서버에
김철수님 안녕하세요!가 출력되는것을 볼 수 있다.
개인적으로는 이부분을 공부하면서 들었던 의문점이
그냥 변수 $name를 김철수로 정의 한 후
print_hello( ){ }안에 echo "$name 님 안녕하세요" 를 적어주면 같은 값이 아닌가? 뭐가 다른거지? 라는 궁금증이 있었는데
클래스가 하나의 템플릿이라는걸 기억하고 나면
이 User라는 클래스는 <'김철수님 안녕하세요'를 출력하기 위한 하나의 클래스>라는 개념으로 이해하면 될 것 같다.
'PHP' 카테고리의 다른 글
PHP함수 -htmlspecialchars(); (0) | 2021.02.02 |
---|---|
클래스와 객체-클래스 상속과 final 객체키워드 (0) | 2021.01.30 |
클래스와 객체-접근제한키워드(멤버와 메서드) (0) | 2021.01.30 |
웹에서의 PHP- 텍스트 송신 테스트 (0) | 2021.01.29 |
PHP개발이란 무엇일까? (0) | 2021.01.29 |