잘못 알려진 프로그래밍 개념 설명
부인 성명
이것은 완전한 것이 아니며 개인적인 선택일 뿐입니다.
배타적 OR 조건이란 무엇입니까?
xor
는 특정 사례를 처리하기 위해 PHP와 같은 프로그래밍 언어로 구현된 논리 연산자입니다.그래도 꽤 사용되지 않거나 잘못 알려진 상태로 남아 있지만 간단한 영어로
xor
는 "그것 또는 저것 중 하나지만 둘 다는 아님"을 의미합니다.PHP에서는 다음을 수행할 수 있습니다.
if ($distance > 8 xor $time_spent > 30) {
// some code
}
조건은 피연산자 중 하나가
TRUE
로 평가되는 경우에만 TRUE
이며 둘 다는 아닙니다.비트 XOR이란 무엇입니까?
XOR의 또 다른 일반적인 용도는
^
기호를 사용하는 비트 연산입니다.Python에서는 다음과 같이 사용할 수 있습니다.
a = 19
b = 3
x = a ^ b
print(x) # 16
도대체 왜 우리는 16을 얻습니까?
a = 19 => 10011
b = 3 => 11
a ^ b => 10000 => 16
^
는 숫자의 이진 표현에 대해 연산을 수행합니다.게다가 두 개의 정수를 입력으로 제공했기 때문에 정수를 얻습니다. 부울을 비교하면 XOR은 부울 값을 반환합니다.
데코레이터 패턴이란?
특정 동작을 구현하는 데코레이터로 개체를 래핑하여 개체의 동작을 수정할 수 있습니다.
원래 코드뿐만 아니라 동일한 코드에 의존하는 다른 구조(예: 클라이언트)에서도 팽창을 방지하는 데 도움이 됩니다.
데코레이터는 일반적으로 동일한 인터페이스를 구현합니다.
<?php
interface Product
{
public function price();
}
class Laptop implements Product
{
public function price () {
return 700;
}
}
class Sticker implements Product
{
private $unit;
public function __construct (Product $unit) {
$this->unit = $unit;
}
public function price () {
return $this->unit->price() + 42;
}
}
class StickerDev implements Product
{
private $unit;
public function __construct (Product $unit) {
$this->unit = $unit;
}
public function price () {
return $this->unit->price() + 50;
}
}
$laptop = new Laptop();
$sticker = new Sticker($laptop);
$stickerDev = new StickerDev($sticker);
echo $stickerDev->price(); // 792
싱글톤인가 아닌가?
전역적으로 고유한 인스턴스에 액세스할 수 있습니다.
공유 리소스(예: 데이터베이스 연결)에 대한 액세스를 "보호"하기 위해 코드에서 자주 사용됩니다.
또한 코드의 어느 부분에서든 덮어쓸 수 있는 전역 변수를 사용하지 않고 모든 곳에서 가져오는 것이 편리할 수 있습니다.
생성자는
new
키워드를 사용한 추가 인스턴스화를 방지하기 위해 비공개여야 합니다.반환될 정적 속성에 객체를 저장하기 위해 또 다른 메서드가 생성됩니다.
다음은 일반적인 예입니다.
<?php
class MySingleton {
private static $instance = null;
private function __construct() {}
public static function getInstance()
{
if (self::$instance == null) {
self::$instance = new MySingleton();
}
return self::$instance;
}
public function __clone() {
throw new Exception("Don't even try to clone me!");
}
}
$sin = MySingleton::getInstance();
print_r($sin);
누구도 매직 메소드를 사용하여 싱글톤을 복제하지 못하도록 합니다
__clone()
.많은 개발자들이 Singleton을 단일 책임 원칙을 존중하지 않고 테스트하기 더 어려운 안티 패턴으로 간주한다는 점에 유의해야 합니다.
신중하게 사용하고 확실하지 않은 경우 팀원과 논의하십시오.
왜 사람들은 구성이 상속보다 낫다고 말합니까?
상속은 아마도 코드를 재사용할 때 가장 직관적인 기술일 것입니다.
큰 주의 사항은 자식 클래스의 요소를 덮어써야 할 가능성이 높기 때문에 빠르게 유지 관리하기가 어려워질 수 있다는 것입니다.
게다가 자식 클래스에서 부모 속성과 메서드에 액세스할 수 있으므로 캡슐화 원칙을 위반하기 쉽습니다.
최악의 시나리오에서는 동일한 기반에 의존하는 다른 많은 영역을 손상시킬 수 있는 기능을 추가하기 위해 "슈퍼 마더 클래스"(~ 상속 체인의 맨 위에 있는 클래스)를 수정하게 될 수 있습니다.
상속을 사용하는 코드가 나쁘다는 의미는 아니지만 모든 것을 부모-자식 관계로 나타낼 수는 없기 때문에 모든 곳에서 사용할 수는 없습니다.
예를 들어 Go에서는 상속을 사용하고 요소를 직접 확장할 수도 없습니다. 예를 들어 구조체를 사용하여 구성해야 합니다.
package main
import (
"fmt"
)
type RST interface {
Test()
}
type UVW interface {
RST
}
type Compo struct{}
func (z Compo) Test() {
fmt.Println("Test Compo")
}
func Demo(x UVW) {
x.Test()
}
type XYZ struct {
Compo
}
func main() {
test := XYZ{}
Demo(test)
}
컴포지션을 사용하면 객체와 다른 유형을 마음대로 결합하고 런타임에 동작을 수정할 수 있습니다.
마무리
이 실용적인 예를 통해 몇 가지를 배웠기를 바랍니다.
Reference
이 문제에 관하여(잘못 알려진 프로그래밍 개념 설명), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/jmau111/misknown-programming-concepts-explained-3fad텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)