기본 타입

유영·2023년 3월 2일
0

PHP

목록 보기
5/57

타입(data type)이란 프로그램에서 다룰 수 있는 값의 종류를 의미합니다.

PHP에서는 여러 가지 형태의 타입을 미리 정의하여 제공하고 있으며, 이것을 기본 타입이라고 합니다.
PHP가 제공하는 기본 타입은 다음과 같습니다.

  1. 불리언(boolean)

  2. 정수(integer)

  3. 실수(float)

  4. 문자열(string)

  5. 배열(array)

  6. 객체(object)

  7. 리소스(resource)

  8. NULL


불리언(boolean)

불리언은 참(true)과 거짓(false)을 표현합니다.

PHP에서 불리언은 상수인 true와 false를 사용해 나타내며, 대소문자를 구분하지는 않습니다.

PHP에서 다음 값들은 불리언 타입으로 변환되면, 모두 false로 인식됩니다.

  • 불리언 : false

  • 정수 : 0

  • 실수 : 0.0

  • 빈 문자열과 문자열 "0"

  • 빈 배열

  • NULL

위의 값들 이외의 모든 값(음수도 포함)은 true로 인식됩니다.

// var_dump() 함수는 인수로 전달받은 변수의 타입과 값을 구조화된 정보로 보여주는 함수입니다.
var_dump((bool) false);   // false
var_dump((bool) "false"); // true
var_dump((bool) 0);       // false
var_dump((bool) -100);    // true
var_dump((bool) 0.0);     // false
var_dump((bool) "");      // false
var_dump((bool) "0");     // false
var_dump((bool) array()); // false
var_dump((bool) null);    // false

상수 false와 문자열 "false"는 전혀 다른 의미로 해석되는 것을 확인할 수 있습니다.
문자열 "false"는 빈 문자열이나 문자열 "0"이 아니므로, true로 인식됩니다.


정수(integer)

정수(integer)는 부호를 가지는 소수부가 없는 수를 의미합니다.
PHP에서 정수의 표현 범위는 운영체제에 따라 달라지며, 64비트 운영체제를 기준으로 -263 ~ (263 - 1) 사이의 값을 가집니다.
PHP에서는 부호가 없는 정수(unsigned integer)는 지원하지 않습니다.
또한, 정수는 10진수, 8진수(0으로 시작), 16진수(0x로 시작)로도 표현할 수 있습니다.

상수 PHP_INT_MAX의 값은 정수 타입이 표현할 수 있는 가장 큰 수를 가리킵니다.

PHP에서는 변수에 정수의 최대 범위를 넘는 값이 대입되면, 그 변수는 자동으로 실수형(float)으로 인식됩니다.


실수(float)

실수는 소수부나 지수부를 가지는 수를 의미하며, 정수보다 더 넓은 표현 범위를 가집니다.
PHP에서 실수의 표현 범위는 운영체제에 따라 달라지지만 대략 ~1.8e307까지 표현할 수 있습니다.
하지만 컴퓨터에서 실수를 표현하는 방식은 반드시 오차가 존재하는 한계를 지니므로, 실수형끼리 직접 값을 비교하는 것은 피하는 것이 좋습니다.

	$float_01 = 3.14;
	var_dump($float_01); //float(3.14)
	
	echo "<br>";
	$float_02 = 1.23e-4;
	var_dump($float_02); //float(0.000123) 
	
	echo "<br>";
	$float_03 = 1.8E307;	//float(1.8E+307) // float이 표현할 수 있는 범위를 넘지 않는 값을 대입함.
	var_dump($float_03);
	
	echo "<br>";
	$float_04 = 1.8E308;	//float(INF) // float이 표현할 수 있는 범위를 넘는 값을 대입함.
	var_dump($float_04);

PHP에서는 e 지수 표현과 E 지수 표현이 모두 가능합니다.
또한, 변수에 실수의 최대 범위를 넘는 값이 대입되면, 그 변수는 자동으로 미리 정의된 상수인 INF로 인식됩니다.
미리 정의된 상수인 INF는 무한(infinite)이라는 값을 의미합니다.

지수표기법(Exponential Notation)
지수란(exponential)로 E로 표기하는데 과학이나 공학에서는 아주 큰 숫자를 간단히 표기할 때 사용
javascript에서는 소문자e로 표기하고 끝!
예) 0.35 = 3.5*10-2승 이므로 3.5E-2


문자열(string)

문자열(string)은 일련의 연속된 문자(character)들의 집합을 의미합니다.

PHP에서 문자열 리터럴은 큰따옴표("")나 작은따옴표('')로 감싸서 표현합니다.
오랫동안 사용되어 온 아스키(ASCII) 인코딩 환경에서 영문자는 한 글자당 1바이트, 한글은 한 글자당 2바이트로 표현됩니다.
하지만 UTF-8 인코딩 환경에서는 영문자는 한 글자당 1바이트, 한글은 한 문자당 3바이트로 표현됩니다.

$str_01 = "PHP";
$str_02 = "자바스크립트"
echo strlen($str_01); // 3
echo strlen($str_02); // 18

strlen() 함수는 인수로 전달받은 문자열의 길이를 반환하는 함수


배열(array)

PHP에서 배열(array)은 한 쌍의 키(key)와 값(value)으로 이루어진 맵(map)으로 구성되는 순서가 있는 집합을 의미합니다.

맵의 키값으로는 정수와 문자열만이 가능하며, 하나의 배열에 두 가지 키값을 같이 사용할 수 있습니다.
만약 정수와 문자열 이외에 다른 타입의 값을 키값으로 사용하면, 내부적으로 다음과 같이 타입 변환이 이루어집니다.

  • 불리언은 true는 1로, false는 0으로 자동 타입 변환됩니다.
  • 유효한 숫자로만 이루어진 문자열은 정수나 실수로 자동 타입 변환됩니다.
  • 실수는 소수 부분이 제거되고, 정수로 자동 타입 변환됩니다.
  • NULL은 빈 문자열("")로 자동 타입 변환됩니다.
  • 배열과 객체는 배열의 키값으로 사용할 수 없습니다.
	$arr = array(
		1 => "첫 번째 값",		// php의 배열에서 키값의 1과 "1"은 같은 값을 나타냄.
		"1" => "두 번째 값",	// 같은 키값을 사용하여 두 번 선언했기 때문에 나중에 선언된 "두 번째 값"만 남게됨.
		10 => "세 번째 값", 
		-10 => "네 번째 값"
	);
	var_dump($arr); //array(3) { [1]=> string(14) "두 번째 값" [10]=> string(14) "세 번째 값" [-10]=> string(14) "네 번째 값" }
	
	echo "<br>";
	echo $arr[1]."<br>"; //두 번째 값
	echo $arr["1"]."<br>"; //두 번째 값
	echo $arr[10]."<br>"; //세 번째 값
	echo $arr[-10]; //네 번째 값

첫 번째 배열 요소의 키값인 1과 두 번째 배열 요소의 키값인 "1"은 같은 값으로 저장됩니다.
PHP에서는 같은 키값으로 여러 번 맵(map)을 선언할 경우,그 키에 해당하는 값을 계속 덮어써서 맨 마지막에 선언된 값만을 저장하게 됩니다.


객체(object)

객체(object)는 클래스의 인스턴스(instance)를 저장하기 위한 타입입니다.
이러한 객체는 프로퍼티(properties)과 메소드(methods)를 포함할 수 있습니다.

  • 프로퍼티
var person = {
	name : 'Lee',
	age : 20
};

객체는 프로퍼티의 집합
프로퍼티 : name: Lee, age: 20
프로퍼티 키 : name, age
프로퍼티 값 : Lee, 20

프로퍼티는 프로퍼티 키(이름)와 프로퍼티 값으로 구성된다. 프로퍼티는 프로퍼티 키로 유일하게 식별할 수 있다. 즉, 프로퍼티 키는 프로퍼티를 식별하기 위한 식별자(identifier)다. 프로퍼티 키의 명명 규칙과 프로퍼티 값으로 사용할 수 있는 값은 아래와 같다.

프로퍼티 키 : 빈 문자열을 포함하는 모든 문자열 또는 symbol 값
프로퍼티 값 : 모든 값

  • 메소드
    프로퍼티 값이 함수일 경우, 일반 함수와 구분하기 위해 메소드라 부른다. 즉, 메소드는 객체에 제한되어 있는 함수를 의미한다.
var circle = {
radius:5,
getDiameter : functin(){
	return 2 * this.radius;
	}
};

radius: 5가 프로퍼티가 되고, getDiameter: function()가 메소드가 되는것이다.

이러한 객체를 사용하는 이유
복잡도를 낮추기 위해서 그리고 연관성이 잘 드러난다.
사용하지 않으면 메소드나 변수가 한번더 쓰여지면서 원래의 기능이나 값이 변형될 수 도 있다.
즉 유지보수가 편하며, 여러 사람이 같이하는 프로젝트가 된다면 더욱 복잡해질 수 있어 객체지향 프로그래밍을 사용하는게 좋다.


리소스(resource)

리소스(resource)는 PHP 외부에 존재하는 외부 자원을 의미합니다.
이러한 리소스는 데이터베이스 함수 등에서 데이터베이스 연결 등을 반환할 때 사용됩니다.


NULL

NULL은 오직 한 가지 값(NULL 상수)만을 가질 수 있는 특별한 타입입니다.
NULL 타입의 변수란 아직 어떠한 값도 대입되지 않은 변수를 의미합니다.

	$var_01;
	var_dump($var_01);	//NULL 
    // 초기화되지 않은 변수를 참조 
	
	echo "<br>";
	$var_01 = 100;		
    // $var_01 변수를 초기화함.
	var_dump($var_01); //int(100)
	
	echo "<br>";
	unset($var_01);		// $var_01 변수를 삭제함.
	var_dump($var_01);	//오류 
    // 삭제된 변수를 참조

unset() 함수는 인수로 전달받은 변수를 메모리에서 삭제한다.

0개의 댓글