유닛테이블 – 12.템플릿상수 & 변수

아래 그림에서와 같이 여러 페이지에서 단일 템플릿 파일을 이용하여 HTML 코드를 생성하는 경우를 예를 들어 템플릿상수 및 템플릿 변수를 설명하고자 합니다. 이 과정을 살펴보면 템플릿 파일은 하나이지만 나머지 PHP코드, 중간코드 UTEA 데이터는 각 페이지마다 별도로 보유하고 있습니다.

한 페이지가 작성되는 과정에서 존재하는 코드의 형태는 소스코드, 중간코드 및 HTML 코드의 세 가지입니다. 소스코드와 중간코드에는 값이 정해진 상수와 값이 정해지지 않고 변할 수 있는 변수가 존재하며, 최종 HTML 코드에는 상수만 존재할 수 있습니다.

< 코드의 형태 및 실행 메소드 >

템플릿상수

템플릿상수는 소스코드 단계에서부터 모든 페이지에서 동일한 값을 가지고 있어 값을 변경할 필요가 없는 데이터입니다.

템플릿 변수

템플릿 변수는 소스코드 단계에서부터 페이지마다 서로 다른 값을 가지고 있어 템플릿 파일에 변수의 형태로 데이터가 존재할 필요가 있는 값을 나타내는데 사용합니다. 이러한 템플릿 변수가 중간코드로 컴파일(?)되면서 두 가지 형태로 나누어지게 됩니다. 첫 번째 형태는 템플릿 파일에서 변수로 존재하던 값이 중간코드에서 상수로 바뀌게 되는 경우이고, 두 번째 형태는 중간코드에서도 계속 변수로 남아있게 되며, 중간코드에서 HTML 코드로 해석되는 단계에서 그 값이 지정되는 경우입니다. 첫 번째 형태를 스태틱 템플릿 변수, 간단히 줄여서 스태틱 변수라고 하고, 두 번째 형태를 다이내믹 템플릿 변수, 간단히 줄여서 다이내믹 변수라고 합니다.

스태틱 변수 및 다이내믹 변수의 용도

스태틱 변수와 다이내믹 변수의 용도를 구분해서 사용할 필요성에 대하여 아직 이해가 잘 되지 않겠지만, 이것은 응용하기에 따라서는 상당히 중요하면서도 필수적인 개념입니다. 한가지 예를 들어보죠. PHP 프로그래머라면 대부분 한번쯤은 게시판을 만들어보셨거나 아니면 최소한 남의 소스코드 정도를 분석해 보았을 것입니다. 게시판 요소 중에 글쓰기와 글수정 하기는 거의 동일한 레이아웃과 데이터를 가지고 있고 단지 몇몇 부분만 다르다는 것을 알고 있을 겁니다. 글쓰기 페이지와 글수정하기 페이지는 하나의 템플릿 파일로 구성할 수 있으며 이 때에 템플릿 파일에서 동일한 부분은 템플릿상수로 표현하고, 다른 부분은 스태틱 템플릿 변수로 표현하면 됩니다. 그러면 다이내믹변수는 무엇을 위해 사용하느냐 고요? 템플릿 상수와 스태틱 변수는 모두 하나의 페이지 내에서 보면 그 페이지에서는 고정된 데이터를 표현하는 것입니다. 그러면 현재 페이지에서 고정되지 않고 실행할 때마다 변경되어야 하는 데이터, 예를 들면 데이터베이스에서 읽어들인 현재 레코드의 값을 표현하는 것이 다이내믹 변수입니다.

다이내믹 템플릿 변수

스태틱 템플릿 변수는 PHP 스크립트의 변수와 같은 형태와 성질을 가지고 있는 것이고, 단지 사용범위(scope)가 템플릿 파일에 제한된다는 차이만 있는 것이니 이해하는데 별 어려움이 없을 것입니다. 그러나 다이내믹 변수는 앞장에서 모드지정자 value를 설명하면서도 언급하였지만 존재하는 형태가 PHP 코드의 변수뿐만 아니라 함수 또는 별도의 파일의 형태로도 존재할 수 있습니다. 다이내믹 변수로 지정할 수 있는 수단을 다시 한번 나열하면 아래와 같습니다.

  1. 디스크립션
  2. PHP의 전역변수
  3. PHP의 전역함수
  4. PHP 클래스의 프로퍼티
  5. PHP 클래스의 메소드
  6. 별도의 텍스트 파일

다른 것이야 이미 다 아는 것이고, 디스크립션은 새로운 개념이라 설명하겠습니다. 디스크립션은 중간코드 상에서 문자열의 형태를 가지고 있습니다. 그러면 문자열상수가 아니냐고요? 상수가 아닙니다. 형태는 상수형태를 띠고 있지만 중간코드에서 HTML 코드로 해석하는 단계에서 그 값이 다른 문자열로 변경될 수 있는 특징을 가지고 있습니다. 그래서 문자열상수라고 표현하지 않습니다. 그러면 문자열 변수가 아니냐고요? 변수가 아닙니다. 변수라면 특정 변수명으로 저장된 값에 접근할 수 있어야 하는데 그런 수단이 없습니다. 디스크립션의 값을 바꿀 수 있는 것은 특정함수를 통해서만 가능합니다. 이는 고급 메소드에 속하는 것으로 현재 그 인터페이스가 아직 정하여지지 않았으며 따라서 현재까지는 디스크립션 값을 바꿀 수 있는 공개된 방법이 없습니다.

템플릿상수 & 디스크립션

템플릿상수와 디스크립션을 구분하는 것은 쉽지 않습니다. 물리적인 면에서 보면 서로 중복되는 부분이 있습니다. 따라서 템플릿상수와 디스크립션을 명확히 구분할 수 있는 것은 논리적인 면에서 가능합니다. 템플릿 상수가 웹애플리케이션이 동작되는 처음부터 마지막 순간까지 그 값이 전혀 변하지 않는다면 디스크립션은 중간코드에서 그 값을 바꿀 수가 있습니다. 템플릿 파일(UTIS 데이터)에서 보면 템플릿상수와 디스크립션 데이터가 구분되지 않는 부분이 있습니다. 개발자가 중간코드에서 템플릿상수 값을 변경시키면 그 데이터는 디스크립션인 것입니다. 이러다 보니 유닛테이블에서는 사실 템플릿 상수라는 데이터 구조는 거의 없습니다. 대신 디스크립션이라는 데이터 구조를 가지고 템플릿상수를 표현합니다. 디스크립션이 템플릿상수를 포함하고 있는 좀 더 포괄적인 개념인 것이지요. 즉, 템플릿상수의 값이 절대 변할 수 없다면, 디스크립션은 템플릿상수 값도 바꿀 수 있도록 한 것입니다.

다이내믹 템플릿 변수의 사용위치

디스크립션을 제외한 나머지 다이내믹 변수는 value 지정자 내에서만 사용할 수 있습니다. value 지정자 내에서는 위에서 예와 같이 desc 속성지정자로 속성 값이 디스크립션임을 나타낼 수 있으나, id 지정자와 value 지정자를 제외한 모든 속성지정자의 속성 값은 그 자료구조가 기본적으로 디스크립션입니다.

답글 남기기