킴스큐Rb 개발자를 위한 기초적인 가이드를 제시해 드립니다.
180 52 13
평가 :
분류 : 활용서
주제 : 킴스큐
개설일자 : 2011년 02월 01일
라이선스 : 비영리,재배포허용
개설자
세븐고님
포인트 : 56,006
등급 : 파워유저+ (16)
공동 작성자
공동 작성자가 없습니다.
작성자를 추천해 주세요
6 6
  • 노트
  • 킴스큐Rb 개발자를 위한 기초 활용노트

(02) 변수/상수/배열/함수/객체

관리자 | 2011.02.01 20:51 | 조회 2430

변수/상수/배열/함수/객체..

 

를 접하기 전에 먼저 각각의 용어에 대한 이해가 필요합니다.

함수라는 단어는 보통 중학교 수학시간에 처음으로 접하게 되는데 "y는 x에 대한 관계식" 혹은 "y는 x에 의해서 종속적으로 정해는 값" 등으로 배우게 됩니다.

사실 써놓고도 쉽지 않습니다.

단어자체가 어렵기 때문에 이해하기도 쉽지 않았다는 것을 한참 시간이 지난후에 깨달았는데 가르치는 입장에서 좀더 쉬운 단어를 이용해 풀어준다면 적어도 "함수" 수준에서 수학을 포기하는 학생이 줄어들지 않을까 하는 생각을 해 봅니다.

 

사실, 함수는 중학교때 처음으로 듣는 단어이지만 알고보면 국민하교 아니 초등하교때 부터 배우는 개념입니다.

 

y = f(x)

 

정말 많이 본 식입니다.

이 것을 php 함수로 표현하면 이렇습니다.

 

function f(x)

{

    retrun $value;

}

$y = f($x);

 

그리고 이 것을 초등학교 수준으로 표현하면 다음과 같습니다.

 

6 = []*3

 

이 것을 함수료 표현하면, y = f(x) 이고

 

y = f(3) 입니다.

그렇다면 f 즉, function 은  * 2 가 됩니다.

 

너무 쉽습니다.

그런데 이 것 마져도 중학교때 이해하지 못하는 경우가 태반입니다.

 

왜그럴까요?

 

"단어" 자체의 의미를 파악하지 못했기 때문입니다.

(혹은 관심이 없었기 때문입니다)

 

때문에 변수/상수/배열/함수/객체.. 를 이해하기 위해서는 단어 자체의 의미부터 이해해야만 정상적인 접근이 가능합니다.

다음은 각각의 용어에 대한 한자어입니다.

익히 아시겠지만 대부분의 용어들은 한자어입니다.

따라서 각각의 용어에 대한 한자의 기본뜻을 이해하지 않고 접근하는 것은 본래의 뜻을 접근하지 못했다고 볼 수 있으며 그럴 경우 제대로 된 이해를 이끌어내기 어렵다는 것이 필자의 생각입니다.

 

변수 : 變數

상수 : 常數

배열 : 排列

함수 : 函數

객체 : 客體

 

이 것을 한자 그대로 직역하면..

 

변수 : 변할 수 있는 수 또는 변하는 수

상수 : 일정한 수

배열 : 일정하게 벌려놓는 것

함수 : 상자(통) 수

객체 : 각각의 몸 , 손님의 몸?

 

다시 이 것을 의역하면..

 

변수 : 결과가 바뀔수 있게 할 수 있는 어떤 상황 (수)

상수 : 이미 정해져 있는 불변의 상황 (수)

배열 : 일정한 규격에 따라 분리되어진 집합

함수 : 주어진 변수가 정해진 관계식에 대입된 상황 (결과)

객체 : 모든 사물,동작 등에 접근할 수 있도록 구조화한 형체 (개념)

 

* 위의 풀이는 필자 개인적인 의견이므로 실제와 다를 수 있습니다.

 

아직도 이해하기 어렵습니다.

좀더 풀어보겠습니다.

 

변수 : 오늘 비가 온다는 예보가 있는데 야구장을 가야하나 말아야 하나.. 오늘의 변수는 비구나..

상수 : 파이는 무조건 3.141592.... 이다. 파이는 항상 일정한 상수다.

배열 : 김밥 한줄을 썰어서 10조각이 나왔다. 썰어진 김밥은 배열이다. 김밥[0] 은 첫번째 김밥 조각이다.

함수 : 압력솥에 잘 씻은 쌀과 물을 넣고 가열했더니 20분후에 쌀밥이 됐다. 함수는 압력솥이다.

객체 : 자동차는 바퀴,핸들,시트,달리다 로 표현할 수 있다. 바퀴는 자동차를 위한 객체이다.

 

* 위의 풀이는 필자 개인적인 의견이므로 실제와 다를 수 있습니다.

 

그래도 이해가 안된다면..

좀더 풀어보겠습니다.

 

1)변수 (variable)

 

변수는 변하는 수, 변할 수 있는 수, 나 때문에 상황이 바뀔 수 있는 수...

오늘 야구장에 가야하는데 날씨가 변수다...

 

<?php

$날씨 = '맑음';

if ($날씨 == '비')

{

     echo '우천취소';

}

else {

     echo '야구 정상적으로 진행';

}

?>

 

날씨 라는 변수가 "맑음" 일 경우 야구는 정상적으로 진행될테지만 "비" 라면 우천취소가 될 것입니다.

즉, 날씨는 맑을 수도 있고 흐릴 수도 있고 비가 올 수도 있는 "변수" 라는 것입니다.

 

그런데 변수에는 여러가지 형식(자료형)이 있습니다.

위의 경우 $날씨 라는 변수는 문자형(string) 형식입니다.

이 형식 즉, 자료형은 변수 뿐만 아니라 배열,상수,함수,객체 모두 해당되는데 다음과 같은 것들이 있습니다.

 

- 정수형 (integer)

- 실수형 (float)

- 문자형 (string)

- 객체형 (object)

- 배열형 (array)

- 자원형 (resource)

 

이중 정수,실수,문자만 이해하고 넘어가겠습니다.

정수는 -N ... -2,-1,0,1,2 ... N 과 같은 수이고

실수는 소수점을 가진 수이고

문자는 말그대로 문자입니다.

 

중요한 점은 변수라는 것은 정수,실수,문자 등으로 사용될 수 있다는 점이며 다음으로 다룰 상수,배열,함수,객체도 마찬가지라는 것입니다.

자료형에 대한 자세한 것은 다음장에서 더 깊이 다뤄보도록 하고 여기에서는 변수에 대한 이해까지만 짚어보기로 하겠습니다.

 

2) 상수 (constant)

 

원의 면적을 구하기 위해서는 원주율이 필요합니다.

원주율은 그리스문자인 π(파이)로 표기하며 3.1415926535... (필자의 기억으로는 여기까지..) 입니다.

이 값은 정해진 값입니다.

원주율 = 약 3.14

라는 것은 불변의 약속(법칙?)입니다.

이 것이 어떤 경우는 3.19 또 어떤 경우에는 2.14 라면 상수가 될 수 없습니다.

즉, 상수는 정확하게 미리 정해져 있는 수 여야 합니다.

 

이와같이 php 에서는 미리 정해져 있는 상수들이 있는데 상수의 특징은 변수와는 달리 $ 가 붙지 않는다는 것입니다.

__LINE__ 이나 __FILE__ 과 같은 상수는 굳이 선언하지 않아도 미리 정의되어 있는 상수입니다.

상황에 따라서는 define() 함수를 이용해 상수를 정의할 수 있습니다.(만들어 낼 수 있습니다.)

 

__RB__ 라는 상수를 만들고 "최고의 CMS" 라고 정의하고자 한다면..

define('__RB__','최고의 CMS'); 를 선언해 줄 경우 어디에서는 __RB__ 는 '최고의 CMS' 로 통용됩니다.

 

그렇다면 변수를 이용해도 되는 것을 왜 굳이 상수를 사용할까요..

변수와 상수의 가장 큰 차이점은 한번 정의된 값이 변경될 수 있느냐 없느냐는 것입니다.

변수의 경우는..

 

$var = 'a';

$var = 'b';

 

라고 할때 $var 는 처음 선언된 a 가 변경되어 b 가 되지만  상수는 다음과 같이 변경을 하였을때..

 

define('constant','a');

define('constant','b');

 

constant 가 b 가 되지 않고 여전히 a 로 유지됩니다.

이 점이 가장 큰 차이점이며 이를 이용해야만 하는 경우가 프로그래밍을 하다보면 종종 생기게 됩니다.

 

 

3) 배열 (array)

 

배열은 일정한 형식으로 분리된 집합이라 정의할 수 있는데 이 표현이 사실 이해하기 쉽지 않습니다.

때문에 적절한 예제가 필요합니다.

 

필자는 다음과 같은 예를 들어볼까 합니다.

 

* 다음의 예는 필자 개인적인 의견이므로 적절치 않을 수 있습니다.

 

<?php

$아파트 = 20;

 

아파트 라는 변수입니다.

 

if ($아파트 == 20)

{

     echo '아파트는 20층입니다.';
}

else {

     echo '아파트는 20층이 아닙니다.';

}

?>

 

아파트라는 변수에 대한 조건식입니다.

아파트 변수에 20 이라는 정수형 데이터(층수를 의도한..)를 담았습니다.

그런데 위와같이 단순한 조건이 아닌 아파트의 층수별 세대주에 대한 처리를 해야할 일이 생겼습니다.

이 경우..

 

$아파트1층의세대주 = '홍길동';

$아파트2층의세대주 = '아무개';

...

...

$아파트 20층의세대주 = '세븐고';

 

와 같이 표현을 한다면...

아파트가 20층인걸 다행으로 생각해야 할 것입니다.

초고층 주상복합이라면 생각만 해도 끔직합니다.

 

이와 같은 경우에 배열이 필요합니다.

배열은 기본적으로 다음과 같은 형식으로 생성합니다.

 

$아파트 = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20);

 

그리고 $아파트[0] , $아파트[1] ... $아파트[n] 의 형식으로 표현합니다.

배열의 첫번째를 0 부터 시작합니다.

따라서 $아파트[3] 일 경우 값은 4 가 됩니다.

 

그런데 조금 이상합니다.

앞서 $아파트1층의세대주는 '홍길동' 으로 정의하고자 했는데 이 것을 배열로 처리하는 방법을 설명하지 않았습니다.

이제 층층의 세대주를 지정해 주겠습니다.

 

$아파트 = array(

    'f1' => '홍길동',

    'f2' => '아무개',

    ...

    'f20' => '세븐고'

);

 

앞서 일일히 변수를 통해 세대주를 지정해 주었던 것과 비교하면 아주 간단합니다.

아파트 2층의 세대주는 누구일까요?

 

$아파트['f2'] 입니다.

 

매우 심플하면서 직관적입니다. 여기까지가 1차(원 연관)배열입니다.

배열을 이해하면 프로그래밍의 반은 이해한 것이다라고 필자는 주저없이 말하곤 합니다.

그만큼 배열은 중요합니다.

 

배열을 이해함에 있어서 항상 잊지 말아야 할 것은 "입체적인 접근" 입니다.

초급자들이 배열을 접근함에 있어서 실수하는 것이 있는데 바로 1차원에서 멈춘다는 것입니다.

대부분 위에 예로 올려드린 정도에서 배열을 다루거나 심지어 배열에 대한 명확한 이해없이 어림짐작으로 사용하는 경우도 흔히 보게 됩니다.

 

배열은 1차원에서 그치지 않고 N차원까지 접근할 수 있고 또한 배열의 인자에 또 다른 하위배열이나 객체를 담을 수 있습니다.

 

다시 $아파트 배열을 보겠습니다.

앞서 $아파트의 세대주들을 정의했었는데 거기에 세대주들의 나이를 지정해 보려고 합니다.

 

$아파트 = array(

    'f1' => array('홍길동',34),

    'f2' => array('아무개',45),

    ...

    'f20' => ('세븐고',36)

);

 

$아파트 20층에 살고 있는 사람의 세대주와 나이는 몇살일까요?

 

세대주는 $아파트['f20'][0] 이고 나이는 $아파트['f20'][1] 입니다.

 

더 나아가 $아파트 20층에 살고 있는 세븐고의 초,중,고등학교 정보도 담으려고 합니다.

어떻게 하면 될까요?

 

$아파트['f20'][0][] = array('강동','외산','명석');

 

$아파트 20층에 살고있는 세븐고는 어느 초등학교를 나왔을까요?

 

$아파트['f20'][0][0] 초등학교를 나왔습니다.

 

지금까지 대략 120개 정도의 변수가 필요한 작업을 $아파트 라는 하나의 배열로 처리해 보았습니다.

20층이어서 120개지 50층짜리 주상복합이면 300개의 변수가 필요합니다.

더 나아가 초,중,고 뿐만 아니라 대학교,직업,연락처,이메일까지 더하면 700개의 변수가 동원되어야 합니다.

 

그런데 배열을 이용했더니 $아파트 라는 배열 하나로 모든 것을 처리할 수 있었습니다.

이 것이 바로 배열의 힘입니다.

아무리 커다른 프로그램이라 할지라도 배열하나면 모든 변수를 처리할 수 있습니다.

Rb 제작시 $RB 라는 배열로 모든 변수를 처리하려 했으나 최소 5차배열까지 사용해야 할 것으로 판단되어 사용자가 헷갈릴 것을 우려해 포기했던 과거가 있습니다.

 

 

4) 함수(function)

 

함수는 "관계식" 으로 표현할 수 있는데 앞서 보았던 수학식 y = f(x) 로 표현됩니다.

 

y = f(x)

 

y 는 f 라는 함수에 x 를 대입하였을때 돌려받는 어떤 값입니다.

 

php 로 표현하면..

 

$y = f($x);

 

입니다.

 

$y 는 $x 값이 전달된 f 함수에 따라 값이 변하게 됩니다.

즉, 함수는 변수의 확장이라고 보시면 됩니다.

 

$a = 1;

$b = 2;

$c = $a + $b; //3

 

변수를 이용한 일반적인 더하기 표현입니다.

이 것을 함수로 표현하면 다음과 같습니다.

 

function sum($a,$b)

{

     return $a + $b;

}

$c = sum(1,2); //3

 

그런데 왜 함수를 사용해야 할까요..

더하기를 빈번하게 사용해야 한다고 가정할때 함수를 사용하지 않았다면 계속해서 변수들을 생성하고 그 변수들을 사용해서 연산을 해 주어야 할 것입니다.

하지만 `더하기` 라는 함수를 만들어 놓으면 위와같이 $결과값 = sum($a,$b) 를 이용해 모든 더하기에 대해서 처리가 가능하게 됩니다.

불필요한 변수셋팅이나 코드량도 줄어들게 되므로 효율면에서 상당한 효과를 보게 되는 것입니다.

 

예를들어 `구구단` 프로그램을 작성한다고 할때 함수를 사용하지 않았다면 3단,5단... N단을 처리할때 그때그때 코드를 새로 작성해 주어야 할 것입니다.

이 것을 함수로 표현하면 언제든지 별도의 추가프로그래밍 없이 N단에 대한 처리가 가능하게 됩니다.

 

function gugudan($n)

{

    for ($i = 1; $i <= 9; $i++)

    {

         echo $n .'*'.$i.'='.($n*$i).'<br />';

    }

}

 

gugudan(3); // 구구단 3단

gugudan(7); // 구구단 7단

 

여기에서 잠시 짚고 넘어갈 것이 있습니다.

앞서 보았던 sum() 함수와 gugudan() 함수를 보면 하나는 결과값을 넘겨주고 다른 하나는 그렇지 않음을 알 수 있습니다.

sum 함수는 결과값을 돌려주고 있지만 gugudan() 함수는 결과값을 돌려주지 않고 함수내에서 직접 출력을 시키고 있습니다.

이렇듯 함수는 return 을 통해 결과값을 돌려줄 수도 있고 그렇지 않을 수도 있습니다.

 

그리고 돌려주는 결과값이 정수일 수도 있고 실수일도 있으며 문자일 수도 있습니다.

나아가서 앞서 언급했던 자료형들을 모두 넘겨줄 수 있습니다.

 

다음은 코드값에 따라 해당국가의 영문과 한글을 돌려받는 간단한 함수입니다.

CountrySet() 함수에 코드값인 ko,cn,jp,en 등을 넘겨주면 해당코드의 영문,한글을 돌려받게 됩니다.

그런데 이때 돌려받는 데이터의 자료형이 정수도 아니고 실수도 아니고 문자도 아니고 배열입니다.

 

function CountrySet($code)

{

    $lang = array(

        'ko' => array('korean','한국'),

        'cn' => array('china','중국'),

        'jp' => array('japan','일본'),

        'en' => array('usa','미국')

    );

    return $lang[$code];

}

$country = CountrySet('ko');

 

$country 는 array('korean','한국') 이라는 배열값을 리턴받게 됩니다.

따라서 $country[0] 는 `korean` , $country[1] 은 `한국` 이 됩니다.

 

중요한 점은 함수내에서 결과값을 돌려줄때 단순히 숫자나 문자뿐만이 아닌 배열이나 객체도 포함된다는 것이며 함수에 넘겨주는 인수의 경우도 단순히 숫자나 문자가 아닌 배열이나 객체를 넘겨줄 수 있다는 것입니다.

 

 

5) 객체 (object)

 

다음에 계속...

 

twitter facebook me2day 요즘
  • 노트(52)
  • 목차
  • 분류별
  • 펼쳐보기
  • 포토(2)
  • 동영상(0)
소셜링크 모듈 사용시 보내진 SNS 아이콘 출력방법
소셜링크를 사용할 경우 게시물이나 댓글등록시 SNS 사이트로도 동시에 보낼 수가 있습니다.그런데 보낸내용을 아이콘으로 출력하려면 테마에서 별도로 출력용 코드를 적용해 주어야 합니다..
세븐고님 , 열람 : 791 ㆍ2011.12.22 3 3
1.1 이후버젼에서 외부라이브러리(jquery 등) 자동 임포트방법
1.1 이후 버젼부터는 레이아웃의 폴더구조가 다음과 같이 구조화되었습니다. layouts -+- 레이아웃 -+- _action -+- 액션파일들 ..
세븐고님 , 열람 : 884 ㆍ2011.12.21 6 2
1.1 이후버젼에서 모듈내 테마의 사용자액션 사용방법
1.1 이후버젼에서는 모듈내에 포함되어 있는 테마에서 사용자액션을 사용할 수 있습니다.모듈구의 구조를 보면 보통 다음과 유사하게 되어 있습니다. modules -+- 모듈 -+- ..
세븐고님 , 열람 : 718 ㆍ2011.12.21 3 3
PHP입문 가이드
PHP 에 입문하고자 하는 분들에게 작은 분량이지만 꼭 필요한 것들만 모아서 정리해 드리고자 합니다. 여기에 올려드린 내용이 PHP의 전부는 아니지만 처음부터 끝까지 자신의 것으..
관리자님 , 열람 : 3720 ㆍ2011.02.01 4 1
(02) 변수/상수/배열/함수/객체
변수/상수/배열/함수/객체.. 를 접하기 전에 먼저 각각의 용어에 대한 이해가 필요합니다. 함수라는 단어는 보통 중학교 수학시간에 처음으로 접하게 되는데 "y는 x에 대한..
관리자님 , 열람 : 2431 ㆍ2011.02.01 2 3
(01) PHP 이렇게 시작하라
PHP뿐만 아니라 모든 언어들을 배울때 입문자들이 범하는 실수중에 하나가 무작정 "책" 부터 사는 것입니다. 물론 요즘과 같이 인터넷이 발달되지 않았던 시절에는 정보를 접하기 어..
관리자님 , 열람 : 3045 ㆍ2011.02.01 6 3+1
마켓등록
지금까지 여러분이 만든 모듈,위젯,레이아웃을 마켓에 등록하려면 먼저 "판매자등록" 을 해야합니다. 판매자 등록을 하시면 운영진의 심사후 이용약관에 따라 문제가 없을시 정식판매자로..
관리자님 , 열람 : 2843 ㆍ2011.02.01 0 1+1
드리는 말씀
앱스토어나 안드로이드 마켓에서 흔히 말하는 "대박앱" 이 나올때 마다 해당앱의 기발한 아이디어에 놀라곤 합니다. 우리는 보통 사용자의 니즈를 읽는데 들이는 시간보다 오직 개발자체..
관리자님 , 열람 : 1164 ㆍ2011.02.01 3 0
패키지 구성방법
마켓에 올리기 위한 상품의 패키지 구성방법입니다. 패키지는 모듈/위젯/레이아웃/기타 4개로 구분될 수 있습니다. 모듈패키지 구성방법 패키지로 ..
관리자님 , 열람 : 1804 ㆍ2011.02.01 1 1
마켓 이용약관
제1조 목적본 약관은 레드블럭(이하 회사라 함)가 운영하는 디지털 컨텐츠 전자상거래 서비스인 큐마켓 서비스(이하 본 서비스라 함)를 이용하여 디지털 컨텐츠를 거래하는 회원 간 또는..
관리자님 , 열람 : 1125 ㆍ2011.02.01 0 0
개발 참고자료
이 곳은 개발자 여러분들께 유용한 자료들을 올려드리는 공간으로 사용됩니다. 자료가 준비되고 확보될때마다 이 곳을 통해서 공유해 드리도록 하겠습니다.
관리자님 , 열람 : 3371 ㆍ2011.02.01 0 0
DB테이블 내역서
킴스큐Rb를 설치했을때 기본으로 셋팅되는 테이블들에 대한 정보입니다. 기본으로 사용되는 필수테이블은 31개이며 게시판모듈에서 5개가 생성되어 총 36개의 테이블이 생성됩니다. ..
관리자님 , 열람 : 2604 ㆍ2011.02.01 5 1+1
파일디렉토리 구조도
버젼에 따라서 실제구조와 차이가 날 수 있습니다. 크게 보시려면 아래의 첨부파일을 다운로드 받으셔서 보세요.
관리자님 , 열람 : 2816 ㆍ2011.02.01 2 1
실전 레이아웃제작
레이아웃은 사용자페이지의 틀을 구성하는 디자인요소입니다. 과거 프로그램들은 헤더/풋터/메뉴/사이드 등의 요소를 분리하여 프로그램에 붙여주는 형식으로 구성된 경우가 많았습니다. ..
관리자님 , 열람 : 4324 ㆍ2011.02.01 1 0
(5) 전용변수/함수 처리
레이아웃 제작하면서 해당 레이아웃에서만 사용하려는 변수나 함수가 있다면 _main.php 를 추가합니다. 다음은 _main.php 를 추가한 레이아웃입니다. _main.p..
관리자님 , 열람 : 2068 ㆍ2011.02.01 0 0
(4) CSS/자바스크립트 관리
레이아웃의 공통 css 및 js 파일은 _main.css 와 _main.js 입니다. 이 두 파일은 어떠한 경우라도 레이아웃 폴더안에 존재해야 합니다. 그런데 메인레아웃인..
관리자님 , 열람 : 2124 ㆍ2011.02.01 0 0
(3) 이미지/미디어파일 관리
레이아웃을 만들면 대부분 해당 레이아웃에서 사용되는 이미지파일이나 플래쉬파일들을 같이 만들기 마련입니다. 이러한 미디어파일들은 레이아웃 폴더 밑의 image 폴더에 담아두게 되는..
관리자님 , 열람 : 2146 ㆍ2011.02.01 0 0
(2) 메인/서브레이아웃 만들기
레이아웃은 메인레이아웃(main.php) 와 서브레이아웃으로 구분됩니다. 메인레이아웃은 반드시 존재하야 하는 레이아웃으로 레이아웃의 최소단위입니다. 그러나 레이아웃 작업을..
관리자님 , 열람 : 3145 ㆍ2011.02.01 0 5
(1) 레이아웃폴더 만들기
레이아웃을 만들기 위해서는 먼저 레이아웃 폴더를 만들어야 합니다. mylayout 이라는 폴더를 만들어 보겠습니다. 그리고 이 레이아웃의 이름을 "나의처음레이아웃" 이라 하겠습..
관리자님 , 열람 : 2524 ㆍ2011.02.01 0 0
레이아웃제작 방법론
레이아웃을 제작하기에 앞서 짚어볼 것들이 있습니다. 다음은 레이아웃을 만들기 전에 먼저 생각해봐야할 사항들입니다. 1. 메뉴를 자동으로 출력할 것인가? 2. 서브 레이아..
관리자님 , 열람 : 2317 ㆍ2011.02.01 0 0
처음페이지이전 10 페이지123다음 10 페이지마지막페이지