[part 1] PHP로 좋은 객체 지향(OOP) 습관을 가집시다.
아래의 내용들은 객체지향을 공부하면서 필요한 내용을 개인적으로 보기쉽게 정리한것입니다.
잘못된 부분이 있을수도 있으니 만약 더 좋은 방법이 있다면 환영합니다.
나쁜습관 : public 노출
아래 예제에서 Person 객체의 필드는 접근자가 public 으로 직접 노출됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php class Person { public $prefix; public $givenName; public $familyName; public $suffix; } $person = new Person(); $person->prefix = "Mr."; $person->givenName = "John"; echo($person->prefix); echo($person->givenName); |
객체에 변화가 생기면 이를 사용하는 코드도 변경해야 합니다.
위 코드를 좋은 코드로 변경해보겠습니다.
아래 코드는 public 필드 대신 private 를 가지고 되고 private 필드는 접근자 public 의 get set 메소드를 통해 외부에서 접근할수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | <?php class Person { private $prefix; private $givenName; private $familyName; private $suffix; public function setPrefix($prefix) { $this->prefix = $prefix; } public function getPrefix() { return $this->prefix; } public function setGivenName($gn) { $this->givenName = $gn; } public function getGivenName() { return $this->givenName; } public function setFamilyName($fn) { $this->familyName = $fn; } public function getFamilyName() { return $this->familyName; } public function setSuffix($suffix) { $this->suffix = $suffix; } public function getSuffix() { return $suffix; } } $person = new Person(); $person->setPrefix("Mr."); $person->setGivenName("John"); echo($person->getPrefix()); echo($person->getGivenName()); | cs |
언뜻보기에, 이것은 훨씬 더 많은 작업처럼 보일 수 있으며 실제로 프론트 엔드에서 더 많은 작업이 될 수 있습니다.
그러나 일반적으로 좋은 OO 습관을 사용하면 향후 변경 사항이 크게 고착되므로 장기적으로 효과가 있습니다
아래코드는 조금더 개선하여 이름 부분에 대해 연관배열을 사용하도록 내부구현을 변경했습니다.
오류 처리가 더 많고 요소가 존재하는지 확인하는 데 더주의해야하지만
이 예제의 목적은 내 클래스를 사용하는 코드가 어떻게 변경 될 필요가 없는지 보여주는 것입니다.
OO 습관을 채택하는 이유는 변경 사항을 신중하게 캡슐화하여 코드가 보다 확장 가능하고 유지 관리가 가능하다는 것입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | <?php class Person { private $personName = array(); public function setPrefix($prefix) { $this->personName['prefix'] = $prefix; } public function getPrefix() { return $this->personName['prefix']; } public function setGivenName($gn) { $this->personName['givenName'] = $gn; } public function getGivenName() { return $this->personName['givenName']; } /* Todo */ } $person = new Person(); $person->setPrefix("Mr."); $person->setGivenName("John"); echo($person->getPrefix()); echo($person->getGivenName()); | cs |
'소행성이야기' 카테고리의 다른 글
코드이그나이터에서 JWT 사용하기 (0) | 2018.07.09 |
---|---|
JWT의 구조는 어떻게 생겼을까? (1) | 2018.07.09 |
JWT 왜 사용할까요 ? (0) | 2018.07.09 |
[part 3] PHP로 좋은 객체 지향(OOP) 습관을 가집시다. 부제: 메두사를 바라 보지 마라 (0) | 2018.07.09 |
[part 2] PHP로 좋은 객체 지향(OOP) 습관을 가집시다. 부제: 각 모듈은 자체 오류를 처리 (0) | 2018.07.06 |