트랙
/
PHP
PHP
/
연습 문제
/
창 관리 시스템
창 관리 시스템

창 관리 시스템

학습 연습 문제

소개

클래스

클래스는 PHP에서 코드를 구성하는 단위예요. 어떤 대상의 동작이나 어떤 과정의 동작을 나타내는 코드는 하나의 클래스로 묶을 수 있어요. 클래스에 할당된 함수는 관례적으로 methods라고 불러요.

<?php

class Door
{
    function lock()
    {
        // ...
    }

    function unlock()
    {
        // ...
    }
}

클래스는 new 키워드로 인스턴스화하는데, 이때 클래스 인스턴스를 위한 메모리가 할당되고 클래스의 생성자 메서드가 호출돼요. 인스턴스화된 클래스는 변수에 할당할 수 있어요. 클래스 인스턴스의 메서드를 호출하려면 -> 접근 연산자를 사용할 수 있어요.

<?php

$a_door = new Door();
$a_door->lock();
$a_door->unlock();

인스턴스화된 클래스는 특별한 $this 변수를 사용해 자기 자신의 인스턴스를 참조할 수 있어요. 클래스는 속성을 가질 수도 있는데, 이 속성은 클래스 객체의 인스턴스에 묶인 변수 역할을 해요. 이 속성은 내부에서도 외부에서도 참조할 수 있어요.

<?php

class Car
{
    public $color;

    function __construct($color)
    {
        $this->color = $color;
    }

    function getColor()
    {
        return $this->color;
    }
}

$a_car = new Car("red");
$a_car->color; // => "red" by accessing the property
$a_car->getColor(); // => "red" by invoking the instance method

지침

이 연습 문제에서는 창 기반 컴퓨터 시스템을 시뮬레이션해요. 이동하고 크기를 조절할 수 있는 창을 몇 개 만들어요. 다음 이미지는 아래에서 다룰 값들을 보여줘요.

 ╔════════════════════════════════════════════════════════════╗
 ║                                                            ║
 ║        position::$y,_                                      ║
 ║        position::$x  \                                     ║
 ║                       \<---- size::$width ---->            ║
 ║                 ^      *──────────────────────┐            ║
 ║                 |      │        title         │            ║
 ║                 |      ├──────────────────────┤            ║
 ║                 |      │                      │            ║
 ║          size::$height │                      │            ║
 ║                 |      │       contents       │            ║
 ║                 |      │                      │            ║
 ║                 |      │                      │            ║
 ║                 v      └──────────────────────┘            ║
 ║                                                            ║
 ║                                                            ║
 ╚════════════════════════════════════════════════════════════╝

1. 프로그램 창의 속성 정의하기

제공된 클래스 뼈대를 사용해 y, x, height, width 값에 대한 속성을 정의해요.

<?php

$window = new ProgramWindow();
$window->y; // => null
$window->x; // => null
$window->height; // => null
$window->width; // => null

2. 프로그램 창의 초기값 정의하기

ProgramWindow에 대한 생성자 함수를 정의해요. 인자는 받지 않지만, 생성자가 실행되는 동안 속성의 기본값을 설정해요. 초기 y와 x 값을 0으로 설정해요. 초기 height와 width는 600x800 화면 크기로 설정해요.

<?php

$window = new ProgramWindow();
$window->y; // => 0 
$window->x; // => 0
$window->height; // => 600
$window->width; // => 800

3. 창 크기를 조절하는 함수 정의하기

Size.php에 Size 클래스를 새로 정의해요. 생성자 인자로 height와 width 속성을 설정해요. 또한 ProgramWindow에는 Size 객체 인스턴스를 받아 자신의 속성을 갱신하는 resize 함수가 필요해요.

<?php 

$window = new ProgramWindow();
$size = new Size(764, 1080);
$window->resize($size)

$window->height;
// => 764
$window->width;
// => 1080

4. 창을 이동하는 함수 정의하기

Position.php에 Position 클래스를 새로 정의해요. 생성자 인자로 y와 x 속성을 설정해요. 또한 ProgramWindow에는 Position 객체 인스턴스를 받아 자신의 속성을 갱신하는 move 함수가 필요해요.

<?php 

$window = new ProgramWindow();
$position = new Position(80, 313);
$window->move($position)

$window->y;
// => 80
$window->x;
// => 313
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
PHP Exercism

창 관리 시스템 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 PHP 트랙을 개념 11개연습 문제 122개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.