앞부분은 쭉 보면 PHP 기초를 복습할 수 있고
Class 부분은 생활코딩보다
기초부터 쉽게 알려줘서 내용 정리를 해봤다.
https://www.youtube.com/watch?v=OK_JCtrrv-c&t=11719s
⌨️ 29. (3:45:57) Classes & Objects
⌨️ 30. (3:56:23) Constructors
⌨️ 31. (4:06:18) Object Functions - PHP - Tutorial 31
⌨️ 32. (4:13:52) Getters & Setters
⌨️ 33. (4:29:17) Inheritance
하나의 스트링, 숫자, 불리언 등의 데이터형만으로는
표현할 수 없는 것(핸드폰, 키보드, 물병 등)이 있다.
PHP에서 우리의 own custom data type을 만들 수 있다.
그것은 class라는 것을 만듬으로써 가능하다.
class = specification for a custom data type
= specification for what a book is in our program
도서관 관리를 돕는 Book class를 만들어보자.
Class 이름의 첫글자는 관습적으로 대문자로 한다.
다음으로 이 Book을 series of attributes로 break up할 것이다.
attributes를 정의하자.
우리는 PHP에게 우리가 Book이라는 데이터형을 만들 것이라고 말하고 있다.
그리고 Book이라는 데이터형은 title, author, pages으로 구성되어 있다.
이 클래스는 나의 프로그램에 Book을 만드는 청사진과 같다.
이번에는 PHP 프로그램에 정말로 Book을 만들어보자.
new Book 데이터형을 만들어서 $Book1이라는 변수 안에 넣었다.
위에서 Book 클래스를 만든 것은 '우리 프로그램에서 Book이 무엇인가'에 대한 청사진/템플릿이었고,
지금 한 것은 실제로 Book을 만든 것이다. = Object(객체)
객체는 클래스의 인스턴스이다.
이것은 실제의 책이기 때문에
이것에 제목, 저자, 쪽수를 줄 수 있다.
$book1은 Book 객체를 저장하고 있다.
객체는 Book의 instance이다.
객체는 실제의 Book이다.
이런 식으로 스트링 두개를 만들듯이
두 개의 Book(데이터형)을 만든 것이다.
Constructor는 우리가 Class에 넣을 수 있는 특별한 기능이다.
그것은 우리가 객체를 만들 때 호출된다.
객체에게 디폴트 정보를 준다.
→ 객체를 만드는 것을 훨씬 더 쉽게 만든다.
우리가 new Book 객체를 만들 때마다
이 함수가 실행되게 해보겠다.
construct는 다른 함수와 같이 작동한다.
다른 함수처럼 정보를 pass할 수 있다.
ex) 이 함수가 $name이라는 파라미터를 take하도록 만들 수 있다.
이제 책을 만들 때 책의 이름을 pass할 수 있다.
즉, 우리가 new Book이라고 할 때마다
constructor 함수를 호출하고 있다.
아주 유용한 기능이다.
이런 식으로 new Book들을 만들려면 여러 줄의 코드가 필요하다.
$this란 현재 만들어지고 있는 객체를 의미한다.
즉 $book1->title과 $this->title은 같은 것이다.
8줄의 코드가 2줄로 줄었다.
이런식으로 업데이트할 수도 있다.
Object function이란
class 안에서 define할 수 있는 funtion이다.
그리고 그 class의 다른 object들이
그 function을 사용할 수 있다.
이것은 많이 사용된다.
- object에 대해서 알려주기 위해서
- 현재의 object를 modify하기 위해서 등등
student라는 class를 create했다.
모든 student는 name, major, gpa를 가진다.
그 밑에 constructor 함수가 있다.
name, major, gpa를 pass in하고,
pass in 된 name을 actual object에 assign한다.
그 밑에 student1이라는 변수가 있고
그것은 이름이 Jim이고 전공이 Business이고 학점이 2.8인 학생의
student object를 저장한다.
어떻게 object function을 만드는지 알아보자.
아까 말했듯이 object function이란
기본적으로 이 각각의 object들이
(specific task들을 위해서 라든가) 사용할 수 있는
함수이다.
현재의 학생이 장학금을 받을 수 있는지 말해주는 함수를 만들 것이다.
학점이 3.5 이상이면 true, 아니면 false를 return
결과를 볼 수 있게 string으로 출력한다.
※ true 뒤에 ; 빼먹었다.
※※※※※※※※※※ 정리하자면, ※※※※※※※※※※
이런 class가 있을 때,
valid한 rating이 이 5가지밖에 없는데
Dog과 같이 invalid한 rating이 입력될 수 있다.
이와 같은 문제를 방지하기 위해서
(1) 12행의 public을 private로 바꾼다.
→ $rating을 get or set하는 것은 class Movie 안에서만 가능해진다.
(2) 밖에서도 get or set은 할 수 있되,
invalid한 rating의 입력만 막고 싶은 것이므로,
getters & setters 함수를 만든다.
이것은 단순히 get or set기능을 'class Movie안에'서 만들어서
밖에서도 get or set할 수 있게 만든 것이다.
따라서 여기까지만 했을 때,
밖에서 getters & setters를 사용하기만 하면 기존과 똑같다.
여기서의 포인트는 settter 함수 안에 invalid한 rating을 지정해주는 것이다.
따라서 다음과 같이 바꿔준다.
그러면 위의 방법으로는 rating을 Dog으로 set할 수 없다.
그러나 constructor를 통해서는 여전히 Dog을 입력할 수 있다.
(3) 그러므로 constructor도 setRating 함수를 통하도록 한다.
※※※※※※※※※※ 정리 끝 ※※※※※※※※※※
getters & setters
- class 안에서 만들 수 있는 함수로,
사람들이 그 class의 attribute에 접근하는 것을 제어할 수 있게 해준다.
이런 class가 있을 경우의 문제점:
rating은 이런 종류가 있다.
(NR은 not rated)
invalid rating을 입력할 경우
ex) Dog
그것이 그대로 나와버린다.
→ 입력할 수 있는 rating을 제한하기
(1) 첫 번째 단계는 rating attribute에 대한 접속을 차단하는 것이다.
22행을 추가하면 avengers의 rating이 Dog가 되어버린다.
- Visibility Modifiers의 사용
: '어떤 코드가' 접속해서 다른 attributes를 사용하는 것이 가능한지 지정한다.
public - 이 attribute는 any other code에게 visible하다.
open to everybody
→ 모든 사람이 access, modify 등 원하는 모든 것을 할 수 있다.
→ 이 rating에게 value를 줄 수 있고,
그 value를 print out할 수 있다.
var이라고 하면 기본적으로 public이다.
private
- 이 Movie class의 { }밖에서는
nobody an directly access it
즉, declare된 곳 안에서만 access 가능
이렇게 바꾸면
이렇게 했을 때
에러가 뜬다.
_construct 함수는 Movie class 안에 있으므로
여기서는 access 가능
(2) 두 번째 단계는 getters & setters를 만드는 것이다.
getters & setters
: class 안에 write할 수 있는 특별한 함수로,
attribute를 set(22행) & get(23행)할 수 있게 해준다.
$rating이 private이기 때문에,
위 그림처럼 직접적으로 set & get할 수는 없다.
Movie class 안에 getters & setters를 만들어보자.
이렇게 하면
23행 대신에 이렇게 쓰면 에러 없이 출력이 잘 된다.
하나의 parameter (argument)를 take한다.
→ rating을 update한다.
윗줄처럼 입력하면 rating을 update할 수 있다.
이렇게 하면 여전히 Dog으로 update할 수 있으니까
valid한지 if 문으로 확인한다.
if문으로 체크하는 몇 가지 방법이 있지만
or문을 사용해보겠다.
(3) 그러나 constructor를 이용할 때
여전히 Dog으로 입력할 수 있다.
이 부분을
이렇게 바꿔주면 된다.
→ rating이 set될 때마다
setRating을 거치게 된다.
.
'PHP > Youtube' 카테고리의 다른 글
5/20(4) freeCodeCamp - PHP 00:00~3:45:59 (0) | 2020.05.30 |
---|
댓글