Programming/PHP

PHP 루프, 이렇게만 바꿔도 2배 빨라집니다!

DOTI 2025. 4. 8. 14:56
PHP 루프, 이렇게만 바꿔도 2배 빨라집니다!
반응형

PHP 루프 성능 최적화 팁

불필요한 반복을 줄여 속도 높이기


루프는 PHP에서 정말 자주 사용하는 구조입니다. 그런데 잘못 사용하면,
성능 저하의 주범이 되기도 하죠.

이번 글에서는 실무에서 자주 발생하는 비효율적인 루프 코드
더 빠르고 효율적으로 바꾸는 팁을 알려드릴게요.


1. count()는 루프 밖에서 한 번만 계산하세요

// 비효율적인 코드
for ($i = 0; $i < count($items); $i++) {
    // 처리
}

위 코드는 count($items)를 루프 돌 때마다 계속 호출하게 됩니다.

// 최적화된 코드
$length = count($items);
for ($i = 0; $i < $length; $i++) {
    // 처리
}

또는 가능하다면 foreach를 사용하세요. 더 빠르고 깔끔합니다.


2. 루프 안에서 함수 호출은 최소화하세요

// 비효율적인 코드
foreach ($users as $user) {
    $profile = getUserProfile($user['id']); // 매번 호출
}

이렇게 되면 루프를 도는 동안 계속 함수 호출이 발생해 성능이 떨어질 수 있습니다.

// 최적화된 코드
$profiles = getAllUserProfiles(); // user_id => profile 형태

foreach ($users as $user) {
    $profile = $profiles[$user['id']] ?? null;
}

데이터는 미리 가져와서 메모리에 캐싱하는 습관을 들이세요.


3. 조건문을 루프 밖으로 빼는 것도 중요해요

// 비효율적인 코드
foreach ($items as $item) {
    if ($mode === 'admin') {
        // 처리
    }
}

이렇게 매번 같은 조건을 검사하는 건 낭비입니다.

// 최적화된 코드
if ($mode === 'admin') {
    foreach ($items as $item) {
        // 처리
    }
}

4. 중첩 루프는 정말 주의해야 합니다

// 비효율적인 코드
foreach ($orders as $order) {
    foreach ($products as $product) {
        if ($order['product_id'] === $product['id']) {
            // 처리
        }
    }
}

이 코드는 데이터 수가 많아질수록 성능이 급격히 나빠집니다.

// 최적화된 코드
$productMap = [];
foreach ($products as $product) {
    $productMap[$product['id']] = $product;
}

foreach ($orders as $order) {
    $product = $productMap[$order['product_id']] ?? null;
    // 처리
}

연관 배열로 바꾸면 중첩 없이도 빠르게 조회할 수 있습니다.


마무리 정리

불필요한 반복은 코드의 성능을 갉아먹습니다.
하지만 조금만 구조를 바꾸면, 큰 차이를 만들어낼 수 있습니다.

핵심 요약

  • count()는 루프 밖에서 한 번만
  • 함수 호출은 캐싱하듯 사용
  • 조건문은 루프 밖으로
  • 중첩 루프는 배열 맵핑으로 대체
반응형