PHP111 [PHP] SplPriorityQueue로 중요 작업 먼저 처리하기 안녕하세요,오늘은 SplPriorityQueue를 활용하여 작업 목록 중 중요 작업 먼저 처리하는 방법을 알아보겠습니다. SplPriorityQueue일반적인 대기열(Queue)은 선입선출(FIFO) 방식으로 작업을 처리합니다.하지만 '긴급 문의'처럼 다른 것보다 먼저 처리해야 할 중요한 작업이 있는 경우, SplPriorityQueue를 사용하여 먼저 처리할 수 있습니다. SplPriorityQueue는 PHP의 SPL(Standard PHP Library)이 제공하는 자료구조입니다. 데이터를 큐에 넣을(insert) 때, 데이터와 함께 '우선순위'를 숫자로 지정할 수 있습니다.데이터를 꺼낼(extract) 때 SplPriorityQueue는 들어온 순서와 상관없이, 지정된 우선순위가 가장 높은 데이.. 2025. 10. 16. [PHP] MultipleIterator 와 foreach로 여러 배열 동시에 반복하기 안녕하세요. 오늘은 MultipleIterator 와 foreach 를 활용하여 여러 배열 동시에 반복해보도록 하겠습니다. MultipleIterator 서로 다른 여러 배열의 같은 인덱스에 있는 값들을 한 번에 가져와야 할 때가 있습니다.보통 for 루프와 $i 인덱스를 사용하지만, 코드가 지저분해지기 쉽습니다.MultipleIterator를 활용하면 여러 배열(또는 이터레이터)을 하나로 묶어, foreach 루프 한 번으로 각 배열의 요소들을 동시에 접근할 수 있습니다. 예제상품 ID, 이름, 가격이 각각 다른 배열에 담겨 있을 때, MultipleIterator를 사용해 한 번에 출력하는 예제입니다. attachIterator(new ArrayIterator($ids), 'ID');$mi->.. 2025. 10. 15. [PHP] 숫자 내장 함수: number_format, round, rand 함수 PHP를 개발하다 보면 변수를 출력하는 것 이상으로 숫자를 다뤄야 하는 경우가 있습니다. 예를 들어 상품가격을 표시하거나, 통계 데이터의 소수점을 처리하거나, 숫자를 무작위로 뽑아야하는 상황도 있습니다. PHP가 기본적으로 제공하는 숫자 관련 함수들을 사용하면 편리하게 작성이 가능합니다. 쇼핑몰에서 1200000원 보다는 1,200,000원 이라고 표시된 것이 훨씬 보기 편하죠? number_format() 함수는 이처럼 숫자의 천 단위마다 콤마(,)를 찍어주거나 소수점 자리를 깔끔하게 정리해 주는 역할을 합니다. // 기존 방식: number_format()$price = 1234567;echo number_format($price); // 출력: 1,234,567 소수점 처리$pi = 3.141592.. 2025. 10. 13. [PHP] ... (스프레드 연산자) 배열 병합 및 함수 인자 전달 기존에는 두 배열을 합치기 위해 array_merge()를 사용했습니다.// 기존 방식: array_merge()$fruits1 = ['apple', 'banana'];$fruits2 = ['orange', 'mango'];$merged_fruits = array_merge($fruits1, $fruits2);print_r($merged_fruits);// 스프레드 연산자 방식$fruits1 = ['apple', 'banana'];$fruits2 = ['orange', 'mango'];$merged_fruits1 = [...$fruits1, ...$fruits2];print_r($merged_fruits1); 배열 중간에 다른 배열을 삽입 할 수 있습니다$start = ['one', 'two'];$mid.. 2025. 10. 5. [PHP] 객체의 불변성을 보장하는 readonly 프로퍼티 안녕하세요. 오늘은 객체의 불변성을 보장하는 readonly 프로퍼티에 대해 설명드리겠습니다. 코드를 작성하다보면, 객체가 한번 생성된 후에는 특정 값이 절대 변하지 않아야 하는 경우가 많습니다. 이전에는 이런 '불변성(Immutability)'을 보장하기 위해 프로퍼티를 private으로 선언하고 getter 메소드만 만드는 등 번거로운 작업이 필요했습니다.PHP 8.1부터 도입된 readonly 키워드로 이 문제를 해결할 수 있습니다.프로퍼티 앞에 readonly를 붙여주기만 하면, 해당 프로퍼티는 생성자에서 딱 한 번만 초기화될 수 있고, 그 이후에는 값을 절대 변경할 수 없습니다. readonly 프로퍼티 사용 예제 사용자의 고유 ID와 이메일 정보를 담는 간단한 데이터 전송 객체(DTO).. 2025. 10. 3. [PHP] array_walk()와 array_walk_recursive()의 차이점과 활용법 array_walk()는 주어진 배열의 모든 요소에 대해 사용자가 정의한 콜백 함수를 실행하는 함수입니다.콜백 함수의 첫 번째 파라미터 $value 앞에 &를 붙여 참조로 받았기 때문에, 함수 내에서 $value를 변경한 것이 원본 배열 $fruits에 직접 반영되었습니다. array_walk()는 한계가 있습니다.바로 1차원 배열에서만 동작한다는 점입니다.만약 배열 안에 또 다른 배열(중첩 배열)이 있다면, 그 안까지는 들어가지 못합니다. username의 공백은 제거되었지만, details 배열 안의 email에 있는 공백은 그대로 남아있습니다. array_walk()는 details가 배열이라는 것만 알고 그 안까지는 탐색하지 않기 때문입니다. array_walk_recursive()는 배열을 재.. 2025. 9. 28. [PHP] FilterIterator 로 if 없는 foreach loop 만들기 안녕하세요. 오늘은 FilterIterator 로 if 없는 foreach loop 만들어보도록 하겠습니다. foreach 루프를 사용하면서 특정 조건에 맞는 데이터만 처리하기 위해 루프 내부에 if 문을 쓰는 경우가 많습니다.코드가 길어지면 이런 if 조건문 때문에 로직이 복잡해지고 가독성이 떨어지게 됩니다. PHP의 SPL(Standard PHP Library)이 제공하는 FilterIterator로 이러한 문제를 해결할 수 있습니다. FilterIterator는 기존 배열이나 이터레이터를 감싸서, 우리가 정의한 특정 규칙(accept 메소드)을 통과하는 요소들만 foreach에 전달하는 '필터' 역할을 합니다.결과적으로, 반복문 안에는 순수하게 처리 로직만 남게 되어 코드가 깔끔해집니다. .. 2025. 9. 26. [PHP] __clone() 메소드: 객체 복사 시 발생하는 문제와 해결법 안녕하세요, 오늘은 __clone() 메소드를 활용해서 객체 복사 시, 원본 객체와 복제된 객체가 독립되지 않는 문제를 해결해보도록 하겠습니다. __clone() 메소드 PHP에서 clone 키워드를 사용해 객체를 복사할 때, 대부분의 개발자는 완전히 독립된 새로운 객체가 생성될 것이라 기대합니다. 하지만 예상과 다르게 동작할 때가 있습니다.기본적으로 PHP의 clone은 얕은 복사(Shallow Copy)를 수행합니다.이는 객체 내부의 프로퍼티가 또 다른 객체를 참조하고 있을 경우, 그 참조(주소값)만 복사하기 때문입니다.결국, 원본 객체와 복제된 객체가 내부의 동일한 객체를 공유하게 되는 문제가 발생합니다. 이 문제를 해결하고, 내부 객체까지 모두 복제하여 완전한 독립을 보장하는 깊은 복사(Dee.. 2025. 9. 19. [PHP] 상속(extends)을 사용하기 PHP로 객체 지향 프로그래밍을 하다보면 비슷한 기능과 속성을 가진 클래스를 만들어야 할 때가 있습니다.이번 예제는 강아지 클래스, 고양이 클래스 만들고 속성과 행동을 만들어 보겟습니다. 공통의 기능을 수정해야 할 때 관련된 클래스를 일일이 수정하는 불편함을 줄여줍니다. 그럼 상속은 무엇일까요?부모 클래스의 속성, 행동을 자식 클래스가 물려받아 사용 할 수 있게 하는 기능입니다.자식클래슨느 부모의 모든 것을 물려받아 자신만의 새로운 기능을 추가하거나 물려받은 기능을 자신에게 맞게 재정의(오버라이딩)을 할 수도 있습니다. 예제코드class Animal{ public $name; public function __construct($name) { $this->name = $name.. 2025. 9. 15. 이전 1 2 3 4 5 ··· 13 다음