bool 타입은 불리언(boolean)의 줄임말로, true와 false 두 가지 값만 가져요.
코드에서 true와 false 리터럴 값은 대소문자를 구분하지 않아요.
<?php
$value_is_true = true;
$value_is_false = false;
불리언 값은 논리식에서 연산자의 결과로 자주 쓰이고, 그다음 제어 구조에서 사용돼요.
논리 연산자에는 여러 가지가 있어요:
!$a: $a가 true가 아니면 true를 반환해요$a && $b: $a와 $b가 모두 true면 true를 반환해요$a || $b: $a나 $b 중 하나라도 true면 true를 반환해요and 연산자와 or 연산자가 있고, 이들은 각각 &&와 ||에 대응해요.
하지만 &&와 ||와 똑같이 동작하지는 않아서 예상치 못한 결과를 낼 수 있으니, 사용을 권장하지 않아요.
이 연습 문제에서는 친구가 개발 중인 새로운 RPG 게임의 퀘스트 로직을 구현해요. 게임의 주인공은 Annalyn으로, 용감한 소녀이자 사납지만 충직한 반려견의 주인이에요. 그런데 안타깝게도, 가장 친한 친구가 숲에서 열매를 찾다가 납치되는 일이 벌어져요. Annalyn은 이 퀘스트를 떠나 친구를 찾아내고 구출하려고 해요. 원한다면 반려견과 함께 갈 수도 있어요.
친구의 흔적을 한참 따라간 끝에, Annalyn은 친구가 갇혀 있는 야영지를 발견해요. 납치범은 둘이었는데, 하나는 힘센 기사이고 다른 하나는 교활한 궁수예요.
납치범들을 찾은 Annalyn은 다음 행동 중 어떤 것을 할 수 있을지 고민해요.
이제 네 가지 과제가 있어요. 숲에서 만난 세 인물의 상태와 Annalyn의 반려견 동반 여부에 따라 위 행동을 할 수 있는지 판단하는 로직을 구현해요.
기사가 깨어 있는지를 나타내는 불리언 값을 받는 canFastAttack이라는 함수를 구현해요.
이 함수는 해당 인물의 상태에 따라 '빠른 공격' 행동이 가능하면 true를 반환해요.
그렇지 않으면 false를 반환해요.
<?php
$is_knight_awake = true;
$infiltration = new AnnalynsInfiltration();
$infiltration->canFastAttack($is_knight_awake);
// => false
기사, 궁수, 죄수가 각각 깨어 있는지를 나타내는 세 개의 불리언 값을 받는 canSpy라는 함수를 구현해요.
이 함수는 인물들의 상태에 따라 '정찰' 행동이 가능하면 true를 반환해요.
그렇지 않으면 false를 반환해요.
<?php
$is_knight_awake = false;
$is_archer_awake = true;
$is_prisoner_awake = false;
$infiltration = new AnnalynsInfiltration();
$infiltration->canSpy($is_knight_awake, $is_archer_awake, $is_prisoner_awake);
// => true
궁수와 죄수가 각각 깨어 있는지를 나타내는 두 개의 불리언 값을 받는 canSignal이라는 함수를 구현해요.
이 함수는 인물들의 상태에 따라 '죄수에게 신호 보내기' 행동이 가능하면 true를 반환해요.
그렇지 않으면 false를 반환해요.
<?php
$is_archer_awake = false;
$is_prisoner_awake = true;
$infiltration = new AnnalynsInfiltration();
$infiltration->canSignal($is_archer_awake, $is_prisoner_awake);
// => true
네 개의 불리언 값을 받는 canLiberate라는 함수를 구현해요.
처음 세 매개변수는 기사, 궁수, 죄수가 각각 깨어 있는지를 나타내요.
마지막 매개변수는 Annalyn의 반려견이 함께 있는지를 나타내요.
이 함수는 인물들의 상태와 Annalyn의 반려견 동반 여부에 따라 '죄수 구출' 행동이 가능하면 true를 반환해요.
그렇지 않으면 false를 반환해요.
<?php
$is_knight_awake = false;
$is_archer_awake = true;
$is_prisoner_awake = false;
$is_dog_present = false;
$infiltration = new AnnalynsInfiltration();
$infiltration->canLiberate(
$is_knight_awake,
$is_archer_awake,
$is_prisoner_awake,
$is_dog_present
);
// => false
Exercism에 가입하고 PHP 트랙을 개념 11개연습 문제 122개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.