변수 - 배열, 객체, 널
배열
배열은 동일한 이름을 가진 변수에 한 개의 값을 저장하는 것이 아니라 여러 가지 변수값을
저장하기 위해 만든 변수 집합입니다.
우선 한번 배열이 어떻게 생겼는지 구경을 해봅시다.
<?php
$a[0]="abc"; $a[1] ="def"; $b['foo']=13;
?>
위에서 보시다시피 배열은 $변수명[인덱스]
이런식의 형태입니다.
변수는 대부분 하나의 변수에 하나의 값을 갖는게 기본인데,
배열은 위처럼 a라는 변수에 abc 와 def를 모두 가질 수 있습니다.
하나의 변수에 여러개의 값을 가지다보니 그들을 구분할 수 있는 것이 필요하게 되었습니다.
그것이 바로 인덱스입니다.
PHP에서는 0부터 시작하는 숫자형 인덱스와 foo 같이 문자로 구분하는 인덱스 두가지가 있습니다.
$a[0]
와 $a[1]
는 각각 a라는 이름의 배열변수에서 첫 번째와 두 번째 값이라는 뜻입니다.
다차원 배열
PHP는 다차원 배열을 지원합니다.
다차원 배열이란 1차원적인 $a[0],$a[1]
같은 모양이 아니라 두가지 이상의 인덱스를 이용하여
값을 구분하는 $a[0][0]
이러한 모양의 배열을 말합니다.
예를 들어 4x4 배열의 경우 아래와 같이 메모리에 저장이 됩니다.
$a[0][0] | $a[0][1] | $a[0][2] | $a[0][3] |
---|---|---|---|
$a[1][0] | $a[1][1] | $a[1][2] | $a[1][3] |
$a[2][0] | $a[2][1] | $a[2][2] | $a[2][3] |
$a[3][0] | $a[3][1] | $a[3][2] | $a[3][3] |
그러면 $a[0][0][0] 는 안되냐? 당연히 됩니다.^^
배열부분은 실제 프로그래밍할 때 많이 쓰이게 됩니다.
그러면 당연히 배열을 잘~~ 다룰줄 알아야겠지요. ^^
중요도 만큼이나 PHP에는 배열에 관련된 많은 함수들이 있으니 함수를 잘 이용하면
쉽게 프로그래밍을 하실수 있습니다.
객체
객체를 배우려면 OOP (object-oriented programming) 에 대해서 아셔야 합니다.
우리말로 객체지향프로그래밍이라고 하는데요.
객체지향프로그래밍은 모든 사물을 객체로 생각하는 것부터 시작합니다.
맨먼저 객체는 메소드(기능)와 프로퍼티(속성)를 가집니다. 어떠한 사물이더라도 메소드와 프로퍼티를 가진 객체로 생각해보자라는 것입니다.
인간을 객체로 생각해 보겠습니다.
인간은 어떠한 메소드가 있을까요?
걷고 달리고 말하고 음식을 먹고 잠을 자고 등등 많은 메소드를 가집니다.
속성또한 이름,나이,주소 등등 수많은 속성들을 가집니다.
이러한 많은 메소드와 속성을 가진 것이 인간이다! 라고 인간을 정의하는 겁니다.
(이를 인간 클래스(class)라고 합니다.)
class는 도장과 같습니다. 도장(class)을 만들었다면 이제부터는 찍어내기만 하면 됩니다.
인간이란 class로 찍어내면 철수니 영희니 돌쇠니 하는 사람들이 나오게 되는 것이죠.
이렇게 class를 통해 만들어진 철수를 객체라고 하는 것입니다.
간단히 작성해본 인간 Class
<?php
class Human { //인간 클래스를 정의 합니다.
var $Name;
var $Age;
var $Height;
var $Weight;
function Eat ( ) { 먹는 행위를 함수로 정의 }
function Walk ( ) { 걷는 행위를 함수로 정의 }
function Work ( ) { 일하는 행위를 함수로 정의 }
function Talk ( $words ) { 말하는 행위를 함수로 정의 }
}
$철수 = new Human; //인간 클래스를 이용해 철수 객체를 생성
$철수->Eat(); // 철수야!! 밥먹어라~!
$철수->Talk($철수->Age); // 철수야~ 몇살이야? 말해봐!!
?>
class Human으로 감싸져있는 부분이 인간 클래스에 대한 정의를 내린 부분입니다.
위에서 말씀드렸듯이 클래스는 메소드와 프로퍼티를 가집니다.
15번 줄에서는 인간 클래스를 이용해서 철수라는 객체를 생성하는 방법입니다.
16번 줄은 생성된 철수에게 밥먹으라고 하는 것입니다.
17번 줄은 철수가 자신의 나이를 이야기 하는 것입니다.
조금 이해가 가시나요?
객체를 생성한 후에 메소드나 프로퍼티에 접근하기 위해서는 "->" 와 같은 기호를 이용합니다.
상속
객체지향 프로그래밍에는 상속이라는 것이 존재합니다.
상속은 기존에 정의한 클래스를 이용하여 이와 유사한 클래스를 새로 정의하고자 할 때 사용합니다.
아기는 인간의 한 형태이기 때문에 인간의 메소드와 속성을 가집니다.
즉, 아기 클래스는 인간 클래스의 메소드와 속성을 모두 물려받는(상속) 것이죠.
<?php
class Baby Extends Human { //인간 클래스를 상속받아 아기 클래스를 정의 합니다.
function 모유먹기() { /* 모유를 먹는 행위를 함수로 정의 */ }
function 천사와대화() { /* 천사와 대화하는 행위를 함수로 정의 */}
}
$재민 = new Baby; //아기 클래스를 이용해 재민이 객체를 생성
$재민->천사와대화(); // 옹알~ 옹알~
?>
Extends 라는 키워드를 통해 상속을 받을 수 있습니다.
객체지향프로그래밍은 대규모 프로젝트에 대한 배려속에서 태어났다고 해도 과언이 아닙니다.
최근 프로그래밍의 대세가 객체지향프로그래밍이지만 PHP에서 꼭 사용해야 하는 것은 아닙니다.
이 또한 하나의 프로그래밍 방식일 뿐입니다.
이 부분이 잘 이해가 안된다고 포기하지마시고 살짝쿵~ 무시해 버리세요.
널 (NULL)
NULL 은 無를 뜻합니다. 아무것도 없는 값을 나타내는 특별한 변수입니다.
변수형의 변환
PHP에서는 변수의 선언이 없습니다. 두 강좌에 걸쳐서 다양한 변수형을 배웠지만
특별한 경우를 제외하고 대부분의 경우는 PHP가 자동으로 변수형을 결정하게 됩니다.
만약에 우리가 지금까지 배운 7가지 Type을 자신이 원하는 다른 타입으로 바꾸고 싶을 때는 다음과
같은 방법으로 바꿀수 있습니다.
$foo = (int) $bar;
- (int), (integer) - 정수형으로 변환
- (real), (double), (float) - 실수형으로 변환
- (string) - 문자열로 변환
- (array) - 배열로 변환
- (object) - 객체로 변환
이번 강좌는 다소 어려웠을지 모르겠습니다.
처음부터 모두 이해하지 않더라도 프로그래밍을 하다보면 나중에 "아~" 하고 이해하게 될 때가 있습니다.
너무 겁먹지 마시고 다음 강좌로 출발~