코딩 스쿨 PHP

언어선택 : HTMLCSSJAVAJAVASCRIPTMYSQLSQL PHP

PHP If...Else...Elseif

PHP 조건문: if, else, elseif 완벽 가이드

PHP 조건문이란 무엇인가요?

PHP에서 조건문은 특정 조건에 따라 코드의 실행 흐름을 제어하는 데 사용됩니다. 가장 기본적인 조건문인 if, else, elseif를 사용하여 다양한 논리적 결정을 구현할 수 있습니다. 조건문은 사용자 입력 검증, 데이터 처리, 프로그램 흐름 제어 등 웹 애플리케이션 개발에서 필수적인 요소입니다. 이 가이드에서는 PHP의 if, else, elseif 조건문의 기본 사용법부터 고급 활용법까지 상세히 설명하고, 실용적인 예제들을 통해 이해를 도울 것입니다.


1. if 조건문

if 조건문은 주어진 조건이 참(true)일 때 특정 코드를 실행합니다.

기본 문법

<?php
if (조건) {
    // 조건이 참일 때 실행될 코드
}
?>

예제: 나이에 따른 메시지 출력

<?php
$age = 20;

if ($age >= 18) {
    echo "성인입니다.";
}
?>

출력:

성인입니다.


2. if...else 조건문

if...else 조건문은 조건이 참일 때와 거짓일 때 각각 다른 코드를 실행할 수 있게 해줍니다.

기본 문법

<?php
if (조건) {
    // 조건이 참일 때 실행될 코드
} else {
    // 조건이 거짓일 때 실행될 코드
}
?>

예제: 나이에 따른 성인/미성년자 메시지 출력

<?php
$age = 16;

if ($age >= 18) {
    echo "성인입니다.";
} else {
    echo "미성년자입니다.";
}
?>

출력:

미성년자입니다.


3. if...elseif...else 조건문

if...elseif...else 조건문은 여러 개의 조건을 순차적으로 검사하여, 첫 번째로 참인 조건에 해당하는 코드를 실행합니다.

기본 문법

<?php
if (조건1) {
    // 조건1이 참일 때 실행될 코드
} elseif (조건2) {
    // 조건2가 참일 때 실행될 코드
} else {
    // 모든 조건이 거짓일 때 실행될 코드
}
?>

예제: 학점에 따른 성적 등급 출력

<?php
$score = 85;

if ($score >= 90) {
    echo "A 등급입니다.";
} elseif ($score >= 80) {
    echo "B 등급입니다.";
} elseif ($score >= 70) {
    echo "C 등급입니다.";
} else {
    echo "D 등급입니다.";
}
?>

출력:

B 등급입니다.


4. 중첩된 조건문

조건문 내부에 또 다른 조건문을 포함시켜 복잡한 논리를 구현할 수 있습니다.

예제: 로그인 상태와 사용자 역할에 따른 접근 제어

<?php
$is_logged_in = true;
$user_role = "admin"; // "admin", "editor", "subscriber"

if ($is_logged_in) {
    echo "로그인 상태입니다.<br>";

    if ($user_role === "admin") {
        echo "관리자 대시보드에 접근합니다.";
    } elseif ($user_role === "editor") {
        echo "편집자 대시보드에 접근합니다.";
    } else {
        echo "구독자 대시보드에 접근합니다.";
    }
} else {
    echo "로그인이 필요합니다.";
}
?>

출력:

로그인 상태입니다.
관리자 대시보드에 접근합니다.


5. 다중 조건 검사

if 조건문 내에서 논리 연산자(&&, ||, and, or)를 사용하여 여러 조건을 동시에 검사할 수 있습니다.

논리 연산자 설명

  • && 또는 and: 모든 조건이 참일 때 전체가 참
  • || 또는 or: 하나 이상의 조건이 참일 때 전체가 참
  • !: 조건의 논리값을 반전

예제: 사용자 나이와 회원 등급에 따른 혜택 제공

<?php
$age = 25;
$membership = "gold"; // "silver", "gold", "platinum"

if ($age >= 18 && ($membership === "gold" || $membership === "platinum")) {
    echo "무료 배송 혜택을 받을 수 있습니다.";
} else {
    echo "무료 배송 혜택을 받을 수 없습니다.";
}
?>

출력:

무료 배송 혜택을 받을 수 있습니다.


6. 삼항 연산자

삼항 연산자는 간단한 조건문을 한 줄로 작성할 수 있는 연산자입니다. if...else 문을 간결하게 표현할 때 유용합니다.

기본 문법

<?php
(조건) ? 참일 때의 값 : 거짓일 때의 값;
?>

예제: 나이에 따른 성인/미성년자 메시지 출력

<?php
$age = 17;
$message = ($age >= 18) ? "성인입니다." : "미성년자입니다.";
echo $message;
?>

출력:

미성년자입니다.


7. 널 병합 연산자와 조건문

PHP 7.0부터 도입된 널 병합 연산자(??)는 변수가 설정되어 있고 null이 아닌 경우 그 값을 반환하며, 그렇지 않으면 대체 값을 반환합니다. 조건문과 함께 사용하여 보다 간결한 코드를 작성할 수 있습니다.

예제: 사용자 이름 출력

<?php
// GET 파라미터로부터 'name'을 가져옴
$name = $_GET['name'] ?? '게스트';
echo "안녕하세요, $name 님!";
?>

사용 예시:

  • URL: http://example.com/?name=홍길동

출력:

안녕하세요, 홍길동 님!

  • URL: http://example.com/

출력:

안녕하세요, 게스트 님!


8. switch 문과 if...elseif...else의 비교

switch 문은 다중 조건을 처리할 때 if...elseif...else 문보다 가독성이 높을 수 있습니다. 하지만 switch 문은 비교 대상이 동일할 때 유용하며, 범위 조건이나 복잡한 논리를 처리하기에는 적합하지 않습니다.

switch 문 기본 문법

<?php
switch (표현식) {
    case 값1:
        // 값1일 때 실행할 코드
        break;
    case 값2:
        // 값2일 때 실행할 코드
        break;
    default:
        // 모든 case가 일치하지 않을 때 실행할 코드
}
?>

예제: 요일에 따른 메시지 출력

<?php
$day = "수요일";

switch ($day) {
    case "월요일":
        echo "오늘은 월요일입니다. 새로운 한 주가 시작됩니다.";
        break;
    case "화요일":
        echo "오늘은 화요일입니다. 꾸준히 화이팅!";
        break;
    case "수요일":
        echo "오늘은 수요일입니다. 주말이 다가오고 있습니다.";
        break;
    case "목요일":
        echo "오늘은 목요일입니다. 곧 금요일입니다!";
        break;
    case "금요일":
        echo "오늘은 금요일입니다. 즐거운 주말 보내세요!";
        break;
    default:
        echo "오늘은 주말입니다. 푹 쉬세요!";
}
?>

출력:

오늘은 수요일입니다. 주말이 다가오고 있습니다.


9. 조건문에서의 논리 오류 방지

조건문을 작성할 때는 논리적 오류를 방지하기 위해 다음 사항에 주의해야 합니다.

9.1 비교 연산자 사용 시 타입 주의

  • == 연산자는 타입을 강제로 변환하여 비교
  • === 연산자는 타입과 값을 모두 비교

예제:

<?php
$a = 0;
$b = "0";

var_dump($a == $b);   // 출력: bool(true)
var_dump($a === $b);  // 출력: bool(false)
?>

9.2 조건문의 우선순위 이해

연산자 우선순위를 정확히 이해하고, 필요한 경우 괄호를 사용하여 의도한 대로 표현식을 작성합니다.

예제:

<?php
$a = false || true; // ($a = (false || true)) -> $a = true
$b = false or true; // (($b = false) or true) -> $b = false

var_dump($a); // 출력: bool(true)
var_dump($b); // 출력: bool(false)
?>


10. 실용적인 조건문 예제

10.1 사용자 권한에 따른 접근 제어

<?php
$user_role = "editor"; // "admin", "editor", "subscriber"

if ($user_role === "admin") {
    echo "관리자 페이지에 접근할 수 있습니다.";
} elseif ($user_role === "editor") {
    echo "편집자 페이지에 접근할 수 있습니다.";
} else {
    echo "구독자 페이지에 접근할 수 있습니다.";
}
?>

출력:

편집자 페이지에 접근할 수 있습니다.

10.2 피보나치 수열 생성기

사용자가 입력한 숫자까지의 피보나치 수열을 생성하는 예제입니다.

HTML 폼: fibonacci.html

<!DOCTYPE html>
<html>
<head>
    <title>피보나치 수열 생성기</title>
</head>
<body>
    <h2>피보나치 수열 생성기</h2>
    <form method="post" action="fibonacci.php">
        항의 개수: <input type="number" name="count" min="1" required><br><br>
        <input type="submit" value="생성">
    </form>
</body>
</html>

PHP 처리 스크립트: fibonacci.php

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $count = intval($_POST['count']);

    if ($count < 1) {
        echo "항의 개수는 1 이상이어야 합니다.";
        exit;
    }

    $fibonacci = [];

    for ($i = 0; $i < $count; $i++) {
        if ($i === 0) {
            $fibonacci[] = 0;
        } elseif ($i === 1) {
            $fibonacci[] = 1;
        } else {
            $fibonacci[] = $fibonacci[$i - 1] + $fibonacci[$i - 2];
        }
    }

    echo "피보나치 수열: " . implode(", ", $fibonacci);
}
?>

사용 예시:

  • 입력: 5

  • 출력:

    피보나치 수열: 0, 1, 1, 2, 3
    
    

10.3 할인율 적용 예제

구매 금액에 따라 할인율을 적용하여 최종 결제 금액을 계산하는 예제입니다.

<?php
$purchase_amount = 250000; // 구매 금액 (원)

if ($purchase_amount >= 500000) {
    $discount_rate = 0.20; // 20% 할인
} elseif ($purchase_amount >= 300000) {
    $discount_rate = 0.15; // 15% 할인
} elseif ($purchase_amount >= 100000) {
    $discount_rate = 0.10; // 10% 할인
} else {
    $discount_rate = 0.00; // 할인 없음
}

$discount = $purchase_amount * $discount_rate;
$final_amount = $purchase_amount - $discount;

echo "구매 금액: ₩" . number_format($purchase_amount) . "<br>";
echo "할인율: " . ($discount_rate * 100) . "%<br>";
echo "할인 금액: ₩" . number_format($discount) . "<br>";
echo "최종 결제 금액: ₩" . number_format($final_amount);
?>

출력:

구매 금액: ₩250,000
할인율: 10%
할인 금액: ₩25,000
최종 결제 금액: ₩225,000


11. 조건문에서의 함수 사용

조건문 내에서 함수를 호출하여 복잡한 논리를 단순화할 수 있습니다.

예제: 사용자 입력 검증

<?php
function isValidEmail($email) {
    return filter_var($email, FILTER_VALIDATE_EMAIL) !== false;
}

$email = "user@example.com";

if (isValidEmail($email)) {
    echo "유효한 이메일 주소입니다.";
} else {
    echo "유효하지 않은 이메일 주소입니다.";
}
?>

출력:

유효한 이메일 주소입니다.


12. 중첩된 조건문에서의 주의사항

중첩된 조건문은 코드의 가독성을 떨어뜨릴 수 있으므로, 가능한 한 단순하게 유지하고 필요 시 함수를 활용하여 코드를 분리하는 것이 좋습니다.

예제: 중첩된 조건문

<?php
$age = 25;
$gender = "남성";

if ($age >= 18) {
    if ($gender === "남성") {
        echo "성인 남성입니다.";
    } else {
        echo "성인 여성입니다.";
    }
} else {
    if ($gender === "남성") {
        echo "미성년자 남성입니다.";
    } else {
        echo "미성년자 여성입니다.";
    }
}
?>

출력:

성인 남성입니다.

개선된 예제: 함수 사용

<?php
function getAgeGenderMessage($age, $gender) {
    if ($age >= 18) {
        return ($gender === "남성") ? "성인 남성입니다." : "성인 여성입니다.";
    } else {
        return ($gender === "남성") ? "미성년자 남성입니다." : "미성년자 여성입니다.";
    }
}

$age = 25;
$gender = "남성";
echo getAgeGenderMessage($age, $gender);
?>

출력:

성인 남성입니다.


13. 조건문에서의 스위칭과 폴딩(Folding)

복잡한 조건문을 간결하게 작성하기 위해 조건을 그룹화하거나 스위칭을 활용할 수 있습니다.

예제: 다중 조건 그룹화

<?php
$role = "editor";

if ($role === "admin" || $role === "superadmin") {
    echo "전체 권한을 가집니다.";
} elseif ($role === "editor" || $role === "contributor") {
    echo "편집 권한을 가집니다.";
} else {
    echo "기본 사용자입니다.";
}
?>

출력:

편집 권한을 가집니다.


14. 조건문과 배열 활용

조건문과 배열을 결합하여 보다 효율적인 코드를 작성할 수 있습니다.

예제: 다중 조건에 따른 메시지 출력

<?php
$status = "pending"; // "pending", "approved", "rejected"

$status_messages = [
    "pending" => "승인 대기 중입니다.",
    "approved" => "승인되었습니다.",
    "rejected" => "거부되었습니다."
];

if (array_key_exists($status, $status_messages)) {
    echo $status_messages[$status];
} else {
    echo "알 수 없는 상태입니다.";
}
?>

출력:

승인 대기 중입니다.


15. 조건문에서의 예외 처리

조건문과 예외 처리를 결합하여 오류를 효과적으로 관리할 수 있습니다.

예제: 파일 읽기 시 예외 처리

<?php
$file_path = "data.txt";

if (file_exists($file_path)) {
    $content = file_get_contents($file_path);
    echo "파일 내용:<br>" . nl2br($content);
} else {
    // 예외 던지기
    throw new Exception("파일이 존재하지 않습니다: " . $file_path);
}
?>

출력 예시 (파일이 존재하지 않을 때):

Fatal error: Uncaught Exception: 파일이 존재하지 않습니다: data.txt in /path/to/script.php on line 8


16. 조건문에서의 PHP 8.0 새로운 기능 활용

PHP 8.0에서는 조건문을 더욱 유연하게 사용할 수 있는 새로운 기능들이 도입되었습니다. 그 중 대표적인 것은 매치 표현식(match expression)입니다.

16.1 매치 표현식 (match)

match 표현식은 switch 문과 유사하지만, 더 엄격한 비교와 반환 값을 지원합니다.

기본 문법

<?php
$result = match ($변수) {
    값1 => 반환값1,
    값2 => 반환값2,
    default => 반환값3,
};
?>

예제: 요일에 따른 메시지 출력

<?php
$day = "수요일";

$message = match ($day) {
    "월요일" => "오늘은 월요일입니다. 새로운 한 주가 시작됩니다.",
    "화요일" => "오늘은 화요일입니다. 꾸준히 화이팅!",
    "수요일" => "오늘은 수요일입니다. 주말이 다가오고 있습니다.",
    "목요일" => "오늘은 목요일입니다. 곧 금요일입니다!",
    "금요일" => "오늘은 금요일입니다. 즐거운 주말 보내세요!",
    default => "오늘은 주말입니다. 푹 쉬세요!",
};

echo $message;
?>

출력:

오늘은 수요일입니다. 주말이 다가오고 있습니다.

장점:

  • 엄격한 비교: match== 대신 ===를 사용하여 값을 비교합니다.
  • 반환값: 각 조건에 대해 값을 반환할 수 있어 변수에 직접 할당 가능합니다.
  • break 필요 없음: 각 조건이 자동으로 종료됩니다.

예제: 매치 표현식과 변수 할당

<?php
$status = "approved";

$response = match ($status) {
    "pending" => ["code" => 100, "message" => "승인 대기 중입니다."],
    "approved" => ["code" => 200, "message" => "승인되었습니다."],
    "rejected" => ["code" => 400, "message" => "거부되었습니다."],
    default => ["code" => 500, "message" => "알 수 없는 상태입니다."],
};

echo "응답 코드: " . $response["code"] . "<br>";
echo "메시지: " . $response["message"];
?>

출력:

응답 코드: 200
메시지: 승인되었습니다.


17. 조건문에서의 함수와 클로저 활용

조건문 내에서 함수를 호출하거나 클로저(익명 함수)를 사용하여 복잡한 논리를 캡슐화할 수 있습니다.

예제: 조건에 따른 콜백 함수 실행

<?php
function executeCallback($condition, $callback) {
    if ($condition) {
        $callback(true);
    } else {
        $callback(false);
    }
}

executeCallback(true, function($result) {
    if ($result) {
        echo "조건이 참입니다.";
    } else {
        echo "조건이 거짓입니다.";
    }
});
?>

출력:

조건이 참입니다.


18. 조건문에서의 스코프와 변수 접근

조건문 내부에서 선언된 변수는 조건문 외부에서도 접근이 가능합니다. 하지만 함수나 클래스 내부에서는 스코프 규칙을 따릅니다.

예제: 조건문 내 변수 접근

<?php
if (true) {
    $message = "조건이 참일 때 실행됩니다.";
}

echo $message; // 출력: 조건이 참일 때 실행됩니다.
?>

예제: 함수 내부에서 조건문과 변수 스코프

<?php
function checkNumber($num) {
    if ($num > 0) {
        $result = "양수입니다.";
    } else {
        $result = "음수이거나 0입니다.";
    }
    return $result;
}

echo checkNumber(10); // 출력: 양수입니다.
echo "<br>";
echo checkNumber(-5); // 출력: 음수이거나 0입니다.
?>


19. 조건문에서의 에러 처리

조건문을 사용하여 예상치 못한 상황이나 오류를 처리할 수 있습니다.

예제: 사용자 입력 검증 및 에러 메시지 출력

<?php
$username = $_POST['username'] ?? '';
$password = $_POST['password'] ?? '';

if (empty($username) || empty($password)) {
    echo "사용자명과 비밀번호는 필수 입력 사항입니다.";
} else {
    // 로그인 처리 로직
    echo "로그인 시도 중...";
}
?>

출력 예시:

사용자명과 비밀번호는 필수 입력 사항입니다.


20. 조건문과 보안 고려사항

조건문을 사용할 때는 보안 측면에서 주의가 필요합니다. 특히 사용자 입력을 기반으로 조건을 설정할 때는 입력값을 적절히 검증하고 필터링해야 합니다.

예제: SQL 인젝션 방지

<?php
$username = $_POST['username'] ?? '';
$password = $_POST['password'] ?? '';

if (!empty($username) && !empty($password)) {
    // 입력값을 이스케이프하여 SQL 인젝션 방지
    $username = mysqli_real_escape_string($conn, $username);
    $password = mysqli_real_escape_string($conn, $password);

    $query = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
    // 쿼리 실행 로직
} else {
    echo "사용자명과 비밀번호를 입력해주세요.";
}
?>

주의: 실제 애플리케이션에서는 비밀번호를 해싱하여 저장하고, 준비된 문장(prepared statements)을 사용하는 것이 더욱 안전합니다.


21. 조건문과 배열의 결합 활용

배열과 조건문을 결합하여 효율적인 데이터 처리를 구현할 수 있습니다.

예제: 상품 가격에 따른 할인율 적용

<?php
$products = [
    ["name" => "상품A", "price" => 120000],
    ["name" => "상품B", "price" => 80000],
    ["name" => "상품C", "price" => 50000],
];

foreach ($products as $product) {
    $price = $product["price"];

    if ($price >= 100000) {
        $discount = 0.20; // 20% 할인
    } elseif ($price >= 50000) {
        $discount = 0.10; // 10% 할인
    } else {
        $discount = 0.00; // 할인 없음
    }

    $final_price = $price - ($price * $discount);

    echo "{$product['name']}의 최종 가격: ₩" . number_format($final_price) . "<br>";
}
?>

출력:

상품A의 최종 가격: ₩96,000
상품B의 최종 가격: ₩72,000
상품C의 최종 가격: ₩50,000


22. PHP 조건문 Best Practices

PHP에서 조건문을 효과적으로 사용하기 위한 몇 가지 권장 사항을 소개합니다.

22.1 가독성 유지

  • 들여쓰기: 조건문 내부의 코드는 들여쓰기를 통해 계층 구조를 명확히 합니다.
  • 명확한 조건: 조건을 명확하고 간결하게 작성하여 코드를 쉽게 이해할 수 있도록 합니다.
  • 주석 추가: 복잡한 논리에는 주석을 추가하여 코드의 의도를 설명합니다.

22.2 불필요한 중첩 피하기

가능한 한 조건문의 중첩을 피하고, 필요 시 함수를 활용하여 코드를 분리합니다.

비권장:

<?php
if ($a > 0) {
    if ($b > 0) {
        echo "a와 b는 모두 양수입니다.";
    }
}
?>

권장:

<?php
if ($a > 0 && $b > 0) {
    echo "a와 b는 모두 양수입니다.";
}
?>

22.3 삼항 연산자와 널 병합 연산자 활용

간단한 조건문은 삼항 연산자(?:)나 널 병합 연산자(??)를 사용하여 코드의 간결성을 높입니다.

예제:

<?php
// 삼항 연산자
$status = ($age >= 18) ? "성인" : "미성년자";

// 널 병합 연산자
$username = $_GET['user'] ?? '기본 사용자';
?>

22.4 명확한 변수 네이밍

조건문의 가독성을 높이기 위해 변수명을 명확하고 직관적으로 설정합니다.

예제:

<?php
$is_user_logged_in = true;

if ($is_user_logged_in) {
    echo "환영합니다!";
} else {
    echo "로그인이 필요합니다.";
}
?>


23. PHP 조건문 관련 유용한 함수

조건문을 작성할 때 도움이 되는 PHP의 내장 함수들을 소개합니다.

23.1 empty()

변수가 비어 있는지 확인합니다. 비어 있음의 정의는 "", 0, "0", NULL, FALSE, array() 등입니다.

예제:

<?php
$username = "";

if (empty($username)) {
    echo "사용자명이 비어 있습니다.";
} else {
    echo "사용자명: $username";
}
?>

출력:

사용자명이 비어 있습니다.

23.2 isset()

변수가 설정되어 있고 NULL이 아닌지 확인합니다.

예제:

<?php
$username = "홍길동";

if (isset($username)) {
    echo "사용자명이 설정되어 있습니다.";
} else {
    echo "사용자명이 설정되어 있지 않습니다.";
}
?>

출력:

사용자명이 설정되어 있습니다.

23.3 is_null()

변수가 NULL인지 확인합니다.

예제:

<?php
$var = NULL;

if (is_null($var)) {
    echo "변수는 NULL입니다.";
} else {
    echo "변수는 NULL이 아닙니다.";
}
?>

출력:

변수는 NULL입니다.


24. PHP 조건문과 함수 결합

조건문과 함수를 결합하여 코드의 재사용성과 모듈화를 향상시킬 수 있습니다.

예제: 사용자 등급에 따른 할인율 적용 함수

<?php
function getDiscountRate($user_level) {
    if ($user_level === "gold") {
        return 0.20; // 20% 할인
    } elseif ($user_level === "silver") {
        return 0.10; // 10% 할인
    } elseif ($user_level === "bronze") {
        return 0.05; // 5% 할인
    } else {
        return 0.00; // 할인 없음
    }
}

$user_level = "silver";
$purchase_amount = 500000;

$discount_rate = getDiscountRate($user_level);
$discount = $purchase_amount * $discount_rate;
$final_amount = $purchase_amount - $discount;

echo "사용자 등급: $user_level<br>";
echo "할인율: " . ($discount_rate * 100) . "%<br>";
echo "할인 금액: ₩" . number_format($discount) . "<br>";
echo "최종 결제 금액: ₩" . number_format($final_amount);
?>

출력:

사용자 등급: silver
할인율: 10%
할인 금액: ₩50,000
최종 결제 금액: ₩450,000


25. PHP 조건문 관련 참고 자료


26. 요약

PHP의 if, else, elseif 조건문은 프로그램의 논리 흐름을 제어하는 데 필수적인 도구입니다. 기본적인 조건 검사부터 복잡한 논리 구성까지 다양한 방식으로 활용할 수 있으며, 중첩 조건문, 논리 연산자, 배열과의 결합 등을 통해 강력한 로직을 구현할 수 있습니다. 또한, PHP 8.0의 매치 표현식과 같은 최신 기능을 활용하면 코드의 가독성과 효율성을 더욱 향상시킬 수 있습니다.

조건문을 효과적으로 사용하면 웹 애플리케이션의 다양한 요구사항을 충족시키고, 사용자 경험을 개선할 수 있습니다. 이 가이드를 참고하여 PHP 조건문의 기본 개념을 이해하고, 실용적인 예제를 통해 실제 프로젝트에 적용해보세요. 코드를 명확하고 간결하게 유지하면서, 안정적이고 유지보수하기 쉬운 웹 애플리케이션을 개발할 수 있을 것입니다.


copyright ⓒ 스타트코딩 all rights reserved.
이메일 : startcodingim@gamil.com