티스토리 툴바


CSS Float속성은 CSS를 공부하는 사람입장에서 꼭 이해하고 넘어가야할 개념입니다. 어렵지 않은 개념이지만, 헷갈리기 쉬운 개념이라 이해가 완벽하게 되지 않았는데, 다음 영문포스트를 읽고 저는 한결 쉽게 이해가 되었습니다. 부족한 실력이지만 나름의 번역을 통해 정보를 공유하고자 합니다. ( 번역오류는 지적해주시면 수정하도록 하겠습니다.)

번역은 편한 구어체/대화체로 구성하도록 하겠습니다.(어투가 다소 건방진 점 양해부탁드립니다/ 대화체가 개인적으로 이해가 쉽게 되어서요^^)

원본 출처 :  http://www.alistapart.com/articles/css-floats-101/

float속성은 웹개발자나 웹디자이너가 작업을 수행할 때, 매우 편리함을 가져다주는 속성이야. 그런데 이게 말이지, 완벽하게 개념을 이해하지 못하면 혼란을 가져다 주기도 하거든, 게다가 예전 브라우저에서는 이런저런 버그들로 인해, float속성을 제대로 사용함에도 이상하게 동작하기도 했어. 그렇다고 하더라도 float속성을 마스터하면 얻는 장점들이 많기 때문에 한 번 이번 기회에 제대로 짚고 넘어가자구.. 내가 그 길로 가도록 한 번 썰을 풀어볼게...

float속성은 잡지나 신문과 같은 곳에서 쉽게 볼 수 있어. 무슨 말이냐고? 신문이나 잡지에 있는 이미지 주위로 글자가 흐르는 것 봤지?(이미지 옆에 글자가 함께 있는 것) 그게 HTML/CSS에서 float속성이 적용되었기 때문에 가능한 일이야. 물론 이미지는 float속성을 적용한 여러가지 case중의 하나야. 다른 예를 하나 더 살펴볼까? 혹시 블로그를 사용하나? 사용한다면 쉽게 이해할 수 있는데 말이지.. 쩝!! 머 사용하지 않는다고 하더라도 긴장은 하지말아. 이해하는데 어렵지는 않으니까 .. 블로그 레이아웃 중에 쉽게 볼 수 있는 2단 구성(two-column) 이라는 게 있어. 이게 뭐냐고? 한쪽에는 내용을 다른 한쪽에는 각종 메뉴들을 배치하는 방법이지.. float속성을 사용해서 이런 구성을 아주 쉽게 해낼 수 있지. 참, 이말을 빠뜨렸구나. float속성은 HTML 요소(element) 어느 곳에나 적용가능하다는 거~~

본격적인 내용에 들어가기에 앞서 float의 정의를 살펴볼까?

The definition

W3C 에 의한 float의 정의는 다음과 같아...

A float is a box that is shifted to the left or right on the current line. The most interesting characteristic of a float (or “floated” or “floating” box) is that content may flow along its side (or be prohibited from doing so by the “clear” property). Content flows down the right side of a left-floated box and down the left side of a right-floated box.

float속성은 현재위치의 왼쪽이나 오른쪽으로 shift되어 배치되는 박스의 일종이다. float속성의 가장 흥미있는 요소는 contents들이 float속성이 적용된 요소의 주변에 위치한다는 점이다.  

무슨 말인지 이해가 되나? ㅎㅎ 안된다고 하더라도 걱정은 하지말아. 앞으로 차근차근 살펴볼 테니까.. float 속성으로 지정가능한 값은 네가지가 있어.. left, right, inherit, none . 이 속성값만 봐도 대충 무슨 뜻인지 이해가 가지? 이해가 안된다고? 흠, 그럼 이해를 돕도록 예를들어 볼까? 어떤 요소(element)의 float 속성이 left이면, 그 요소는 부모 요소의 가장 좌측으로 배치돼.. right속성은 당연히 반대겠지? 그리고 inherit는 부모 element의 float속성을 상속받아... inherit의 의미가 상속이니까.. 참 쉽죠잉? none이면.. float속성이 없다는 의미지. float속성을 지정하지 않으면 기본 값(default value)이 none이기 때문에, 굳이 none을 지정할 필요는 없겠지?

자..말로 설명해서 무엇하겠어.. 역시나 예제를 보는 게 제일 빠르지.. 다음 마크업이 적용된 예제(Example A)를 한 번 살펴볼까?

img { float: right; margin: 10px;}


이미지의 float속성이 right이기 때문에, 이미지가 우측으로 붙고, Text는 주위로 흐르는 거 봤지? 혹시 조금 더 궁금하다면 소스를 내려받고 float속성을 none으로 바꿔서 테스트 해보길 바래(테스트하는 방법은 굳이 설명안해도 되지?^^) 그럼 float속성이 이렇구나 하는 약간의 간을 맛 볼 수 있을거야.

다음에는 실제 float 속성이 어떻게 동작하는지 조금 더 디테일하게 알아보자구..

How floats behave

float를 자세히 설명하기에 앞서, HTML에 대해 조금 더 살펴볼까? HTML에서 normal flow라는 개념이 있어. normal flow(우리 말로 어떻게 번역해야할지 몰라 그냥 영어 개념을 사용하기로 할게)에서는 block element(블락요소)는 화면의 위에서 아래로 차곡차곡 배치돼. block element가 뭐냐고? 에이 이사람아 그런 정도는 HTML 기본이라고.. 예를들면 div, p 같이 공간을 차지하는 태그들이야. 왜 float를 설명하는데 갑자기 normal flow 얘기가 나오는지 의아해하는 사람들이 있겠지? float 속성이 적용된 요소들도 normal flow에 따라 왼쪽 또는 오른쪽 끝으로(float에 적용된 속성에 따라)배치되기 때문이야. 단, 배치된 다음에는 normal flow의 흐름에서 제외돼.(이 부분은 아래쪽의 clear속성 설명하면서 자세히 설명하도록 할게) float속성이 적용되지 않은 element와 차이점은 float가 적용되지 않은 요소(element)들은 위에서 아래로 순차적으로 배치되는 반면에 float가 적용되면 좌측이든 우측이든 비어있는 공간이 있으면 그 자리에 배치된다는거지... 무슨 말인지 잘이해가 안되지?^^ 나도 써놓고 나니까 혼란스럽네.. 이럴 때에는 예제를 보면 바로 이해가 될거야.

다음 속성이 적용된 예제(Example B)를 살펴보자고. float속성이 없는 걸 주의깊게 보자고...

.block { width: 200px; height: 200px;}

3개의 색상이 있는 block들이 어떻게 구성되는지 보았지? float속성이 없으면 위에서 얘기했듯이 block들은 그냥 위에서 아래로 차례로 배치되는거야.. 그럼 이번에는 float속성을 적용해 볼까? 

아래 코드가 적용된 예제(Example C)를 한 번 보자구.

.block {float:left; width: 200px; height: 200px;}

어때? 블록들이 한줄로 연달아서 배치되지? 신기하지 않아? 신기하지 않다고? 그럼 브라우저의 창 사이즈를 가로로 줄여볼래? 계속줄이다보면 블록들이 두 줄, 세 줄로 배치되지? 위에서 설명했지만 float 속성이 적용되면 비어있는 공간이 있으면 옆으로 배치되고, 없으면 아래로 배치되는거야? 이제 이해되지?^^ 그래도 안된다면 다음예제(Example D)를 한번 살펴보도록 해. 

여기까지 이해되었으면 float의 기본은 이해했다고 봐도 돼, 그런데 여기에서 만족한다면 안되겠지? 조금 더 디테일하게 나아가보자구..

In the clear

float 속성과 함께 따라다니는 속성 중에 clear 속성이란 것이 있어. 이 것을 이해해야 파워풀한 float 속성의 사용이 가능해지니 지금부터 설명하는 것을 집중해서 듣길 바래. 앞에서 얘기했듯이 float속성은 normal flow에 따라 배치된 다음에 normal flow에서 제외대. 아리까리 하지? 아무래도 이부분은 예제(Example E)를 통한 설명이 낫겠어. 핑크색하고 파란색 블록은 float속성이 적용된거구, 녹색하고 오렌지색 블록은 float가 적용되지 않은 경우야. 코드는 다음과 같아. 예제를 실행해보고 놀라면 안돼? 알았지?

<div class="block pink float"></div>

<div class="block blue float"></div>

<div class="block green"></div>

<div class="block orange"></div>


.block {

  width: 200px;

  height: 200px;

}

.float { float: left; }

.pink { background: #ee3e64; }

.blue { background: #44accf; }

.green { background: #b7d84b; }

.orange { background: #E2A741; }


놀랐지? 녹색 블록이 어디로 갔을까? 그건 바로 분홍색 블록 밑에 위치해 있어. 왜 이런 결과가 나온지 이해가 돼? 앞에서 말했지? float속성은 normal flow에 따라 배치된 다음에 제거된다고. 바로 그래서 그린 블록하고 오렌지 블록은 마치 flow 속성이 적용된 분홍/파란색 블록이 없는 것으로 간주되어 배치되는거야. 그럼 어떻게 녹색 블록을 보이게 배치할 수 있을까?

이번 Chapter의 제목이 뭐였지?..그래..바로 clear 속성에 그 답이 있어. 조금 더 살펴볼까? clear속성은 다섯 가지 값을 가져. left, right, both, inherit, none 그럼 각각의 속성값이 무엇을 의미하는지 살펴볼까? left값이 적용된 clear속성을 가지는 요소(element)는 float속성 값이 left인 요소(element)의 아래에 배치된다는 것을 의미해. right 값이 적용된 clear속성은 그 반대를 의미하고, both는 left/right 둘 중 어느 float 속성을 만나더라도 아래에 배치된다는 것을 의미하고... inherit는 자신의 부모 element의 clear속성을 상속하는 것을 의미해. none은 당연히 clear속성 값이 없다는 것을 의미하지.. nonedefault 값이고.. 자 그럼 이 지식을 토대로 다음 예제(Example E2)를 살펴보도록하자. 아마 쉽게 이해할 수 있을 거야.

<div class="block pink float"></div>

<div class="block blue float"></div>

<div class="block green clear"></div>

<div class="block orange"></div>


.block {

  width: 200px;

  height: 200px;

}


.float { float: left; }

.clear { clear: left; }

.pink { background: #ee3e64; }

.blue { background: #44accf; }

.green { background: #b7d84b; }

.orange { background: #E2A741; }


자 결과가 어때? 녹색 블록이 분홍블록 밑에 위치해 있지? 이건 녹색 블록의 clear속성값이 left이기 때문에 그런거야. 만약 clear속성 값이 right였으면 어떻게 됐을까? 여러분의 상상에 맡길게. float속성만 있으면 컨텐츠를 배치하기가 만만치 않아. 하지만 clear속성과 함께 있으면 보다 강력한 레이아웃 구성이 가능해지지. 이제 float을 레이아웃 구성을 위해 사용되는 사례를 살펴보도록 할까?

Using floats for layouts

맨 앞에서 말했지? float속성을 활용하여 2단 구성으로 배치한 레이아웃이 가능하다고. 좌측에는 컨텐츠 우측에는 네비게이션을 배치하는 방법을 한번 살펴보도록 할까? 이번에도 예제(Example F)를 통해 이해를 해보도록 하자.

#container {

  width: 960px;

  margin: 0 auto;

}


#header { 

  padding: 30px;

  background: #bbb;

}


#content {

  float: left;

  width: 660px;

  background: #fff;

}


#navigation {

  float: right;

  width: 300px;

  background: #eee;

}


#footer {

  clear: both;

  background: #aaa;

  padding: 10px;

}


이번에는 소스코드가 조금 기니 간단히 설명해 볼까? #container는 모든 하위 요소(element)를 담고 있는 그릇이라고 보면 돼. 굳이 container를 사용하는 이유는 이렇게 해야 전체 내용의 배치를 편리하게 조절할 수 있기 때문이야. container를 사용하지 않으면 브라우저 창의 좌측끝에 배치되거든. 다음으로 살펴볼 요소는 #header 야.. header는 일반적으로 상단영역을 차지하는 부분이지. 이번예제에서는 그냥 공간만 차지하도록 구성했어. 다음으로 살펴볼 요소는 #contents와 #navigation이야. float속성 값을 한 번 잘 살펴보길 바래. 그 다음 요소는 #footer야 보통 하단에 추가로 보여주어야 할 내용을 표시하는 영역이지, clear 값이 both인 것을 유심히 보아야 할거야. 이 clear 속성 값으로 인해 footer가 내용의 하단에 배치되는거야? Got it? 자, 그럼 확실한 이해를 위해 clear속성이 제거된 footer가 있는 예제(Example G)를 보도록 하자.

#footer가 #navigation 아래에 위치해 있지? 이런 현상은 #navigation 아래에 #footer가 위치할 공간이 충분하기 때문이야. 이런 일을 막기 위해 바로 clear속성을 사용해야 하는 거지. 혹시 #contents와 #navigation의 높이가 달라서 고민하는 사람있어? 그 내용까지 여기에서 다루기는 좀 뭣하고, 다음 칼럼을 통해 참조하면 도움이 될거야. 

지금까지 이해하는데 별 무리가 없지? 이제부터는 정신을 조금 더 집중해야 할거야. 조금 더 디테일하고 다양한 사례들을 살펴보도록 하지. 

Float first

HTML코드의 어느 곳에 float가 위치해 있느냐에 따라 조금 다르게 보여지는 경우가 있어. 예제(Example H)를 통해 살펴보도록 해볼까? 적용되는 CSS 코드는 다음과 같아.

#container {

  width: 280px;

  margin: 0 auto;

  padding: 10px;

  background: #aaa;

  border: 1px solid #999;

}


img {

  float: right;

}

 
#container안에 이미지가 위치해 있는 구조지. HTML코드는 다음과 같아 

<div id="container">

  <img src="image.gif" />

  <p>This is some text contained within a 

small-ish box. I'm using it as an example

of how placing your floated elements in different 

orders in your HTML can affect your layouts. For

example, take a look at this great photo 

placeholder that should be sitting on the right.</p>

</div>

결과는 예상대로지? 이렇게 쉽게 넘어가지는 않겠지? HTML의 위치를 조금 수정해볼까? 다음예제(Example I)를 한번 살펴보도록 하자. CSS는 동일하고 HTML은 다음과 같아.

<div id="container">

  <p>This is some text contained within a

small-ish box. I'm using it as an example

of how placing your floated elements in different 

orders in your HTML can affect your layouts. For

example, take a look at this great photo 

placeholder that should be sitting on the right.</p>

  <img src="image.gif" />

</div>

 
이미지가 벗어났지? 왜 이런 현상이 일어났을까?, 현상을 이해하기 전에, 일단 이런 문제를 재빠르게 벗어날 수 있는 방법은 float 요소들을 먼저 배치하는 방법이야. 이 정도 답변에는 만족못하겠지? 이 현상이 나타나는 근본적인 이유는 Collapsing이라는 개념 때문이야. 다음 챕터에서 조금 자세히 알아보도록 하자.

Collapsing

Collapsing은 float된 element들이 float되지 않은 요소들로 덮이지 않는 경우 발생해. 이 경우 float된 요소들은 올바른 영역을 확보하지 못하는데 이런 현상을 collapsing라고 하거든, 다음 그림을 보면 조금 더 이해가 잘될거야.

이미지 출처 : http://css-tricks.com/795-all-about-floats/

앞에서도 말했지만, float속성은 배치된 다음에 normal flow영역에서 제거되기 때문에 이런 현상이 발생하는거야. 따라서 이건 브라우저 버그도 아니고 결함도 아니라는 거지. 하지만 그렇다고 그냥 놔두면 안되겠지? 이 문제를 해결하는 여러가지 방법이 있어. 한 번 살펴보기로 할까? 가장 손 쉬운 방법은 float 속성이 적용된 요소의 하단에 clear속성값을 가지는 element를 배치하는 방식(Example J)이야. 소스를 볼까?

<div id="container">

  <p>This is some text contained within a 

small-ish box. I'm using it as an example

of how placing your floated elements in different

orders in your HTML can affect your layouts. For 

example, take a look at this great photo 

placeholder that should be sitting on the right.</p>

  <img src="image.gif" />

  <div style="clear: right;"></div>

</div>


어때? 쉽지? 하지만 쉬운 만큼, 단점도 있는데 그건 바로 불필요한 element(요소)가 포함된다는 거야. 다른 방법으로는 어떤 게 있을까? 

한 번 다음 예제(Example K)를 살펴볼까? 이 예제에 적용된 CSS 코드와 HTML코드는 다음과 같아.

<div id="container">

  <img src="image.gif" />

  <img src="image.gif" />

  <img src="image.gif" />

</div>

 

#container {

  width: 260px;

  margin: 0 auto;

  padding: 10px 0 10px 10px;

  background: #aaa;

  border: 1px solid #999;

}


img {

  float: left;

  margin: 0 5px 0 0;

}

예상한 대로지? 역시 제대로 나오질 않는군. 이제 다른 방식으로 이 문제를 고쳐볼까? float속성이 적용된 요소들의 부모요소에 overflow속성을 적용하면 돼. overflow속성의 값은 hidden으로 적용하고 말이지, 하지만 본래 overflow속성은 이용도를 위해 만들어진 게 아니기 때문에 부작용이 있을 수 있어.

적용된 소스를 살펴볼까?

#container {

  overflow: hidden;

  width: 260px;

  margin: 0 auto;

  padding: 10px 0 10px 10px;

  background: #aaa;

  border: 1px solid #999;

}


결과는 다음 링크(Example L)에서 확인 가능해.  이번엔 조금 다른 방법을 살펴볼까? 이번 방식이 앞의 방식보다는 부작용이 덜할 거야. :after라는 pseudo selector를 이용하는 방법이지. 다음 아티클(Position is Everything)에서 이에 대한 자세한 내용을 확인할 수 있을거야.

#container:after {

  content: ".";

  display: block;

  height: 0;

  clear: both;

  visibility: hidden;

}

이 방법 외에도 몇가지가 더있지만, 여기에서는 더이상 소개를 생략하기로 할게. 각 기법마다 상황에 따라 사용해야 할거야. 자세한 내용은 각자 공부들 하드라고.

Conclusion 

float속성을 사용하면 매우 기민하게 Layout수정이 가능하니 꼭 연마하도록 해봐. 요즘 유행하는 responsive web design에서도 float속성은 요긴하게 사용되니까 말이야. 물론 float과 관련된 몇가지 브라우저 버그(double margin bugthe 3px Text-Jog)가 있긴 하지만 Google에서 찾아보면 손쉽게 해결가능할거니 너무 걱정은 말고..

추가 참고자료(float를 이해하는데 추가적으로 도움이 될만한 자료들이야)

이미지를 통한 CSS float 이해 

All about floats 

Containg floats

'WEB' 카테고리의 다른 글

CSS Float속성의 모든 것!  (4) 2011/09/26
Posted by 꽃광
TAG CSS, Float
이번 강좌에서는 자바스크립트의 제어문/반복문에 대해 살펴보도록 하겠습니다. 

제어문은 참/거짓에 의해 로직을 분기하는 것을 의미합니다. 자바스크립트에서는 if , switch 키워드를 통해 제어문을 구현합니다. 코드를 통해 알아보도록 하겠습니다.

if ( a > 2 ) {
    console.log("2보다 크다");

가장 기본이 되는 if 문 설명입니다. if 문은 if ( expression ) {statement; ... } 로 구성됩니다. 괄호안의 조건(expression)이 참이면 안의 문장을 수행합니다. 
괄호안에는 참/거짓 판단이 가능한 어떤 expression 이라도 올 수 있습니다. 

if 문이 조금 더 응용된 형태인 if ~ else if ~ else 에 대해 보도록하겠습니다.

if ( a > 3 && b > 5) {
    console.log("a는 3보다 크고 b도 5보다 큽니다.");
} else if ( a > 5 ) {
    console.log("a는 5보다 큽니다.");
} else if ( b > 6 ) {
    console.log("b는 6보다 큽니다.");
} else {
    console.log("이도저도아닙니다");


if 문안의 표현식이 거짓이면 그 다음 else if 를 실행하고, 또 거짓이면 그 다음 else if 그 값이 거짓이면 else 안을 수행합니다.

예를들어 a가 0, b가 7이라면 첫번째 if문은 거짓이 되고 a>5 문장도 거짓이고, b>6문장은 참이므로 b는 6보다 큽니다 라는 메시지가 출력됩니다. 

또 다른 제어문을 구현하는 키워드인 switch 에 대해 알아보도록 하겠습니다. 

var a = 1;

switch (a) {
    case '1': 
        console.log("aaa");
        break;
    default :
        console.log("default");
}

if ( a == '1' ) {
    console.log("ccc");
}

switch 는 switch (expression) { ... } 형태로 수행됩니다. expression 값을 가지고 case 문과 비교를 수행합니다. a가 1이기 때문에 case '1'과의 비교는 거짓입니다. ( 타입까지 비교함 ), case문이 모두 거짓이면 default 문을 수행합니다. ( if문의 else와 같은 역할) 따라서 위의 경우 "default"라는 값을 출력합니다. 

switch문에서 주의 깊게 볼 점은 break;문입니다. case 문이 참이 되어 내부로 진입하는 경우 문장을 수행하다 break문을 만나면, switch문을 빠져나옵니다. break;문이 없는 경우 , 아래로 로직이 흐르게 되어 잘못된 문장이 수행될 수 있으니 주의해야 합니다.

아래 추가설명된 if 문은 참이 되는 것을 보여주기 위해 추가로 적어보았습니다. '==' 연산자는 자동으로 두 피연산자의 타입을 일치시키기 때문에 참이 됩니다. switch문에서의 'case'는 '===' 와 같다는 점을 헷갈리면 안됩니다.

반복문에 대해 살펴보도록 하겠습니다. 반복문은 단어 그대로 반복적으로 수행할 작업이 있는 경우 사용하기 좋은 명령입니다. 반복문을 위해 자바스크립트에서는 while, do-while, for, for-in 키워드를 제공하고 있습니다. 

각각에 대해 코드를 통해 간략히 살펴보도록 하겠습니다.

우선 while문입니다.

var i=0;
while ( i < 10 ) {
    i++;
}

while의 조건식 ( i <10 ) 이 참인 동안 반복적으로 실행됩니다. while문은 반복문의 가장 기본적인 형태입니다.

다음은 do-while문입니다.

var i = 0;
do {
    i++;
} while (i<10)

while문과의 차이는 조건식에 관계없이 최초 한번은 무조건 명령을 수행한다는 점입니다. do {} 안의 문장은 조건식에 상관없이 최초 한번 무조건 수행되고 i<10조건을 실행한 뒤에 비교하게 됩니다.

그 다음에 살펴볼 것은 for 문입니다.
for문은 while문에 비해 초기화, 증감 부분이 추가된 구문입니다.
코드를 보겠습니다.

for ( var i=0 ; i <10; i++ ) {
   console.log(" i = " + i );
}


for문 안에서 i가 초기화 되고, 한번 loop를 수행한 뒤 i값이 1씩 증가하고(i++), 바로 조건식을 비교합니다.
즉 실행순서는
var i=0;(초기화) => 조건비교(i<10) => 내부구문 실행 => 증감(i++) => 조건비교 => 내부구문 실행 ...
과 같은 형태로 실행됩니다.

마지막으로 for - in을 살펴보겠습니다. for-in은 앞서 설명드렸던 배열과 함께 사용되는 반복문입니다.
코드를 통해 살펴보겠습니다.

var a = ['a','b','c','d'];
for ( var i in a ) {
  console.log("index : " + i + ", value = " + a[i]);



a배열에 있는 요소(element)들의 인덱스가 차례대로 i에 셋팅됩니다. 
결과는  

index : 0, value = a
index : 1, value = b
index : 2, value = c
index : 3, value = d


가 됩니다. 

이상으로 자바스크립트의 기본 문법인 제어문/반복문에 대해 살펴보았습니다. 다음 강좌에서는 함수(function)에 대해 살펴보도록 하겠습니다. 함수부터는 자바스크립트만의 고유한 특징들이 많이 나타나므로 주의깊게 보셔야 합니다. 
Posted by 꽃광
프로그래밍 언어를 한 번 이라도 접해셨던 분들으이라면 배열에 대한 개념은 익히 들어보셨을 겁니다.
배열은 인덱스와 그것에 맵핑되는 데이타로 구성된 자료구조이다. 
다른 언어(C,Java,C++등)에서의 배열은 동일한 타입의 데이타들로 구성되어 있는 반면에 자바스크립트의 배열은 하나의 배열에 여러 개의 데이타 유형이 들어갈 수 있습니다. ( 자바스크립트에서는 var 키워드로 모든 변수타입을 선언할 수 있다는 것과 동일한 이유입니다. )

어려운 개념은 아니므로, 실제 코드와 함께 배열에 대해 살펴보도록 하겠습니다.

>>> var a = [];
>>> typeof a;
"object"


배열은 대괄호([])로 변수를 선언하면 만들어지게 됩니다. 배열의 타입을 조사해보면 "object"라는 결과 값이 나옵니다. 객체(object)에 대해서는 뒤에서 자세히 설명할 예정입니다. 지금은 배열은 객체의 일종이다. 라는 정도로만 이해하시면 됩니다.

배열의 값은 ,(콤마)로 분리하여 들어갈 수 있습니다.

>>> var a = [1,2,3];
>>> a;
[1,2,3]
>>> a[0];
1
>>> a[2];

여타 언어와 마찬가지로 배열은 인덱스를 통해 접근이 가능합니다. 인덱스는 0번부터 시작합니다.

배열 데이타의 삽입/수정/삭제는 어떻게 이루어질까요? 코드를 통해 살펴보도록 하겠습니다.

>>> var a = [1,2,3];
>>> a[2] = "three";  // 2번 인덱스의 값을 "three"로 수정합니다.
>>> a
[1,2,"three"]
>>> a[3] = "four";   // 3번 인덱스에 "four"라는 값을 추가합니다.
>>> a
[1,2,"three","four"]
>>> a[6] = "new"  // 6번 인덱스에 "new"라는 값을 추가합니다. 4,5번인덱스는 셋팅되지 않는데 어떻게 될까요? 비어있는 공간에는 undefined 값이 추가됩니다.
>>> a
[1,2,"three","four",undefined,undefined,"new"]
>>> delete a[1];

true
>>> a 
[1,undefined,"three","four",undefined,undefined,"new"] 

위의 코드에서 주의 깊게 살펴볼 코드는 a[6] 부분입니다. 인덱스를 건너뛰어 값을 셋팅하는 경우에는 비어있는 인덱스에는 undefined 값이 추가됩니다. ( 실제로 이렇게 사용하는 일은 별로 없겠죠?^^; )

삭제의 경우도 특이한데, 삭제는 delete 연산자와 함께 수행합니다. delete a[1];을 수행하면 a1의 엘리먼트값을 삭제하고 이 부분을 undefined 로 대체합니다. (배열 길이에는 변함없음에 주의)

다음으로 배열안의 배열에 대해 살펴보도록 하겠습니다. 

>>> var a = [1,"two",false, [1,2,3], undefined];
>>> a[3] //배열안의 배열을 출력합니다.
[1,2,3]
>>> a[5] = [2,3,4]
>>> a
[1,"two",false, [1,2,3], undefined, [2,3,4]];
>>> a[3][0]; //배열안의 배열 접근법
1



다른 언어와 크게 다른 점은 없습니다.

문자열에서의 배열에 대해서도 한번 살펴보겠습니다.

>>> var s = "one";
>>> s[1];
"n"

문자열도 배열처럼 접근이 가능합니다. ^^

이상으로 배열에 대한 강좌를 마칩니다. 배열은 프로그래밍 언어의 기초가 되는 개념이므로 꼭 숙지하셔야 합니다.
다음강좌에서는 자바스크립트의 기본 문법(제어문,반복문 등)에 대해 알아보도록 하겠습니다.

Posted by 꽃광
원래 이번 강좌는 배열에 대해 설명하기로 했었죠?^^, 목차를 정확하게 잡지 않은 상태에서 연재를 하다보니 중간에 추가로 설명해야 하는 부분들이 생겨나네요. (죄송합니다..하하)

배열을 들어가기에 앞서 자바스크립트(다른 언어도 마찬가지)에서 기본이 되는 주요 개념에 대해 먼저 소개하고 나아가도록 하겠습니다.

오늘 소개할 개념은 literal, expression, statement입니다. 우리말로는 값(사전적으로는 '문자의' 라는 의미), 표현식, 문장  정도로 번역이 가능합니다. 하지만 언어의 특성상 가급적 기본 개념은 영문 그대로 받아들이는 것이 서로간의 의사소통에 도움을 주기 때문에 글에서는 영문표기를 사용하도록 하겠습니다.

자바스크립트에서의 literal은 데이타타입에 들어가는 값 그 자체를 의미합니다.
literal의 예를  들어보면

12  // 숫자 12
1.2 // 숫자 1.2
"hello world" //문자열
true // boolean값
/javascript/gi  // 정규식 표현값

위와 같은 것들을 literal이라고 부릅니다.



그럼 다음으로 expression에 대해 살펴보도록 하겠습니다.
자바스크립트에서의 expression은 자바스크립트엔진이 해석하여 값으로 출력할 수 있는 모든 구문들을 의미합니다.
expression은 literal, 연산자의 조합으로 이루어져 있습니다. 정확한 이해는 역시 예제로 설명하는 것이 빠릅니다.  
"333"		//문자 literal
i	        //변수 i
(i+1.5)/3	//수식



마지막으로 살펴볼 개념은 statements 입니다. statement는 온전한 문장 또는 명령어를 의미하며, ;(세미콜론)으로 각각의 statement를 구분합니다. expression과의 가장 큰 차이점은 expression은 일반적으로(물론 expression이 특정 목적을 수행하는 경우도 있음) 그 자체로는 어떤 것도 하지 않지만, statement는 어떤 목적을 수행합니다. 예를 통해 statement에 대해 알아보도록 하겠습니다.
var a = 5+3;	//statement
a++;		//expression 이면서 sentence, a값을 증가시키는 의미를 가지 때문에 statement임
a+10;		//expression, a+10이 어떤 영향을 미치지는 못함
if (a){a++};	//statement, 제어를 수행하는 역할을 함
개념적으로 보면 statement >= expression >= literal 정도로 표현이 가능하겠네요.

자바스크립트 코드의 기본 구조이므로 이 개념은 명확하게 이해하고 넘어가는게 좋을 것 같아 부연설명하였습니다.
 
Posted by 꽃광

지금까지 진행하는데 무리는 없으셨죠? 혹시나 제가 건너뛰고 가는 내용이 있으면 지적해주시면 보완하겠습니다. 이 번 강좌에서는 지지난 강좌의 산술연산자에 이어 나머지 다른 연산자에 대해 알아보기로 합니다.

우선 논리 연산자를 알아보기로 하겠습니다. 논리연산자는 true 또는 false 값을 인자로 취해 true/false를 결과로 보여주는 연산자입니다. 자바스크립트의 논리 연산자는 다음 세가지가 존재합니다.

연산자 설명 예제
! NOT연산자로, 입력 값이 true이면 false로 , false이면 true로 값을 리턴합니다. >>> var b = !true;
>>> b;
false
>>> var c = !!true; // NOT연산자가 두번 사용됨
>>> c;
true
>>> var d = “one”
>>> !d; //NOT연산자를 변수에 사용하면 boolean 타입으로 형변환이 이루어집니다
false;
&& AND연산자로, 두 개의 입력 값을 취해, 두 개의 입력이 모두 true인 경우에만, true를 리턴합니다 >>> true && true;
true
>>> true && false;
false
>>> false && false;
false
>>> true && !”3”; //3은 true이고 여기에 NOT연산자를 취했으므로 결과적으로 true && false 구문
false
|| OR연산자로, 두 개의 입력 값 중 어느하나라도 true이면 , true를 리턴합니다 >>> true || false;
true
>>> false || false;
false;
>>> true || !”3”;
true

앞 선 강좌에서도 잠깐 설명 했지만, 자바 스크립트의 기본 데이타는 다음 6가지 경우를 제외하고는 모두 true 입니다.
””             (빈 문자열)
NaN          (Not a Number)
undefined  (정의되지 않은 값)
null           (Null값)
false         (기본 boolean false)
0              (숫자 0)

또 한가지 살펴볼 점은 자바스크립트에서의 형변환입니다. 형변환에 대해서는 중간 중간 강의를 진행하면서 짚고 넘어가겠지만, 서로 다른 데이타 유형끼리 연산이 이루어지거나, 특정연산자와 결합하면 자바스크립트의 문법규칙에 의해 형변환이 이루어지게 됩니다.

논리 연산자에서는 Not연산자와 결합하게 되면 boolean 데이타 유형으로 형변환이 이루어집니다.
논리 연산자는 매우 기본적인 개념이므로 반드시 정확하게 이해하고 넘어가셔야 합니다.

다음으로 비교연산자에 대해 알아보도록 하겠습니다. 비교연산자는 두 값을 취해 그 값을 비교하여 boolean(true/false) 값을 리턴합니다.

연산자 설명 예제
== 동치(Equal)연산자, 두 값이 동일한 경우 true를 리턴한다.
두 입력 값의 타입이 같지 않은 경우 형변환하여 비교한다
>>> 1 == 1;
true
>>> 1 == “1”;
true
>>> 1 == “2”;
false
>>> undefined == null
true
>>> NaN == NaN
false
=== 동치연산자(타입까지 비교), 두 값이 동일하고 타입까지 일치하는 경우에만 true를 리턴한다. 정확한 비교를 하고자 할 때에는 == 를 사용하는 것보다 안전하다 >>> 1 === 1;
true
>>> 1 === “1”;
false
>>> undefined === null;
false
!= NOT Equal연산자. 두 개의 입력값이 같지 않은 경우 true를 리턴한다, 타입이 다른 경우 형변환을 수행한다 >>> 1 != 1
false
>>> 1 != “1”
false
>>> 1 != “2”
true
!== NOT Equal연산자(타입까지비교), 형 변환을 수행하지 않고 값을 비교하여 값이 같지 않으면 true를 리턴한다. >>> 1 !== 1
false
>>> 1 !== “1”
true
>>> 1 !== “2”
true
> ~보다 크다 연산자 >>> 10 > 10
false
>>> “44” > 1000
false
>>> Infinity > 0
true
>= ~와 같거나 크다 연산자 >>> 30 >= 30
true
>>> 1 >= 2
false
< ~보다 작다 연산자 >>> 30 < 30
false
>>> 1 < 2
true
<= ~와 같거나 작다 연산자 >>> 1 <= 1
true

===, !== 를 제외하면 비교 시점에 형 변환이 일어나므로 이 점에 주의하여 코드를 작성해야 합니다.

 

기타 연산자로는
typeof ( 앞의 강좌에서 설명했듯이 데이타 유형을 나타내는 연산자), delete ( 메모리에서 변수/항목을 제거하는 연산자) , new (함수객체를 생성함)
등이 존재합니다. 이 외에도 몇몇 연산자(비트연산자,instance of, in)가 더 존재하지만, 이 정도만 알면 기본적인 코딩에는 별 무리가 없습니다. 나중에 새롭게 등장하는 연산자는 부연 설명을 하도록 하겠습니다.

이상으로 연산자 강좌를 마치고, 다음 강좌에서는 배열에 대해 간단히 알아보도록 하겠습니다.

Posted by 꽃광

지난 강좌에서는 연산자가 무엇을 의미하는 지와 연산자 중에서 산술연산자에는 어떤 것이 있는지 알아보았습니다. 오늘 강좌에서는 남은 연산자에 대해 학습하기 앞서, 자바스크립트에 어떤 기본 데이타 유형이 있는지 먼저 알아보도록 하겠습니다. ^^ ( 기본 데이타 유형을 알면 나머지 연산자에 대한 설명도 자연스럽게 이루어지기 때문에 부득이 연산자 강좌 중간에 들어가게 되었습니다.)

자바스크립트에는 5가지 기본 데이타 유형이 존재합니다.
Number, String, Boolean, Undefined, Null

위의 5가지 기본 데이타 유형이 존재합니다. 그럼 각각에 대해 알아보도록 하겠습니다.
(아래 예제에서 연산자 하나가 소개되었네요..^^ typeof 연산자는 뒤이어 입력한 값의 데이타 유형을 보여주는 연산자입니다.)

1. Number
자바스크립트에서는 정수형,  실수형 구분 없이 숫자로 이루어진 값은 모두 Number입니다.
eg. 3.0, 100, 3.11111, 10e5 모두 결과 데이타 유형은 Number입니다. 

 

참고로 10e5 는 지수표현으로 10 * 10의 5제곱을 의미합니다. 즉 1,000,000 이죠

 
위의 표기는 8진수형태로 숫자를 표현하는 방법입니다. 055 = 8*5 + 5를 의미하기 때문에 값을 출력해보면 45가 되죠.

 
위의 표기는 16진수 형태로 숫자를 표현하는 방법입니다 0xff = 16*15(f의 숫자값) + 15 = 255 가 됩니다.

Number에는 조금 더 독특한 형태의 값도 존재합니다.
바로 무한대 값인데, Infinity 라는 값을 지닙니다.
 
자바스크립트에서 다룰 수 있는 가장 큰 수는 1.7976931348623157e+308 이기 때문에 위에서처럼 1e309는 MAX값을 초과하여 Infinity(무한대)가 됩니다.

그럼 Infinity간의 연산은 어떤 결과를 보여줄까요?
 
NaN 이라는 결과값이 보이시죠? NaN은 Not a Number 라는 의미이며 NaN의 데이타 유형도 Number 타입입니다.
 
위와 같이 숫자와 문자의 연산이라던지, NaN과 일반 숫자의 연산결과도 NaN이 됩니다.


2. String
자바스크립트에서 모든 문자정보의 데이타는 String 유형입니다. (java나 c처럼, 문자와 문자열을 구분하는 것이랑은 다르죠?^^) , string유형은 작은따옴표 또는 큰타옴표로 데이타를 표현합니다.
eg. ‘3’, “333”, “aaa”, “123abb”



추가로 앞 선 강좌에서 설명한 연산자 중 '+'는 문자열에서 사용하면 문자열을 연결시키는 역할을 수행하게 됩니다.
따라서 
>>> "abc" + "def"
abcdef 
가 출력이 됩니다. (은근슬쩍, 연산자에서 놓친 부분을 이렇게 집어넣네요.^^) 

3. Boolean
true/false 값을 가지는 연산자입니다. 제어문에서 주로 사용됩니다.


뒤에 문법시간에 다시 설명하겠지만, 형 변환이 이루어지는 경우 다음 값들을 제외하고는 모두 true가 됩니다.
"", null, undefined, 0, NaN, false

4. Undefined
자바스크립트에 존재하는 독특한 형태의 데이타 유형입니다. 값이 셋팅되지 않은 변수는 undefined 값이 됩니다.

물론 아예 선언되지 않은 변수에 대해 타입을 조사해도 undefined 입니다

5. Null
마지막으로 살펴볼 기본 데이타 유형입니다. Null유형은 값으로 null 만을 취합니다. 이 데이타 유형이 갖는 의미는 “값이 없다, 비어있다, 아무것도 없다”라는 의미를 지닙니다. Null 데이타 유형은 typeof 로 출력하면 Object 가 출력이 됩니다. 약간 이상하긴 하지만, Null 도 하나의 기본 데이타 유형이라는 점은 기억하기 바랍니다.


 

위에서 설명한 다섯 가지에 해당하지 않는 데이타 유형은 모두 객체(Object)라고 보면 됩니다. 객체에 대해서는 이 후 강좌에서 더욱 상세히 설명할 예정입니다.

Posted by 꽃광

이번 강좌에서는 연산자에 대해 진행해 보려고 합니다.
연산자(Operator)는 하나 또는 두 개의 값(변수)을 취해 연산(operation)을 수행하고 결과(return)를 만들어냅니다.

말로 설명하니 어렵죠? 예를 들어 쉽게 설명하도록 하겠습니다.(>>>기호는 firebug의 콘솔창을 의미합니다.)
 

>>> 1+2
3
+ 는 연산자(Operator) 입니다.
연산(operation)은 더하기 입니다.
인풋 값은 1과 2입니다. ( 인풋값으로는 변수도 가능합니다.)
결과 값은 3입니다.

이해되시죠, 수학시간에 배운 4칙연산(+,-,*,/)등이 바로 연산자인 것입니다.
그럼 이제 본격적으로 자바스크립트의 연산자에 대해 알아보도록 하겠습니다.

우선 산술연산자에 대해 알아보도록 하겠습니다. 산술연산자는 주어진 값(변수)들에 대해서 수식 계산을 하는 연산자입니다.


연산자 심볼 연산
+ 더하기 >>>1+2
3
- 빼기 >>>3 - 2
1
* 곱하기 >>> 35*3
105
/ 나누기 >>> 6 / 4
1.5
% 나머지 구하기 >>> 6 % 3
2
>>> 6.2 % 4
2.2
++ 1만큼 증가 //++표시가 뒤에 붙은 경우 연산을 먼저 수행하고 a의 값을 증가시킨다
>>> var a=123; var b = a++;
>>> b;
123
>>> a;
124
//++표시가 앞에 붙은 경우 a의 값을 증가시킨 뒤 연산을 수행한다
>>> var a=123; var b = ++a;
>>> b;
124
>>> a;
124
-- 1만큼 감소 // -- 표시가 뒤에 붙은 경우 연산을 먼저 수행하고 a의 값을 감소시킨다.
>>> var a=123; var b = a--;
>>> b;
123
>>> a;
122

// –- 표시가 앞에 붙은 경우 a의 값을 감소시킨 뒤 연산을 수행한다.
>>> var a=123; var b = –-a;
>>> b;
122;
>>> a;
122

산술 연산자 중 헷갈릴 수 있는 부분은 ++, -- 와 같은 연산자인데, 앞에 붙느냐 뒤에 붙느냐에 따라서 연산의 우선 순위가 달라지므로 주의하셔야 합니다.

위에서 언급한 연산들은 다음과 같은 방식으로 축약도 가능합니다.(C,Java 와 같은 언어와 유사합니다.)
>>> var a=5;
>>> a += 3; // a = a+3과 동일한 표현
8
>>> a -= 3; // a = a-3과 동일한 표현
5
>>> a *= 2 // a = a*2와 동일한 표현
10

산술 연산자에 대해 간략히 설명드렸습니다. 혹시 이해가 안되시면 댓글로 질문부탁드립니다.^^;
이번 강좌에서 모든 연산자에 대해 설명을 진행하려고 하였으나, 진행하기 전에 개념적으로 이해해야 할 부분이 있어서, 그 부분을 짚고 넘어간 뒤에 마저 설명하도록 하겠습니다. 
Posted by 꽃광

자, 이번 시간에는 변수에 대해 알아보도록 하겠습니다.

변수란 영어 단어에서 알 수 있듯이 vary[다양하게 하다] + able[할 수 있는]의 합성어입니다. 변수의 가장 큰 특징은 그 값이 할당된 뒤에 변할 수 있다는 것을 의미합니다. 이와 반대되는 의미는 상수입니다. 상수는 값이 한 번 초기화되면 변할 수 없다는 특성을 가지고 있습니다. 간단한 예를 한 번 들어볼까요?

만약 a 라는 이름의 상수가 있다고 가정해 봅시다.
var a = 3;
a가 상수라면 a는 3이라는 값이 한번 설정된 이후에는 그 값을 변경할 수 없습니다.

따라서, 저 문장 뒤에 a = 10; 이런 문장을 실행하면 오류가 발생합니다.
변수는 그 의미대로 값이 변할 수 있기 때문에 a=10; 을 해도 정상적으로 실행되며, a의 값은 3에서 10으로 변경됩니다.

강좌 제목이 변수인데, 왜 상수 얘기를 하는지 의아해 하시는 분이 있을 것 같습니다. 그 이유는 자바스크립트에서는 상수의 개념이 존재하지 않기 때문입니다. 자바스크립트에서 선언되는 모든 값들은 변수입니다. 하지만 상수의 개념을 이해하는 것은 대단히 중요하기 때문에 꼭 이해하시고 넘어가시기 바랍니다. (자바스크립트에서도 상수와 비슷한 효과를 내기 위해 변수명을 모두 대문자로 표기하여 변수지만 상수의 의미로 사용된다는 것을 명시하기도 합니다. eg. var MY_CONSTANT = “이것은 상수”; )

자, 그럼 본격적으로 자바스크립트 변수의 개념/특징에 대해 알아보도록 하겠습니다.

변수를 선언하는 법을 알아보도록 하겠습니다.
자바스크립트에서 변수는 var 키워드와 함께 선언합니다. (참고로 아래문자의 // 표시는 이 뒤 문장은 주석이라는 뜻을 나타냅니다.)

var test;  //test라는 변수를 선언합니다. 
자바스크립트는 다른 프로그램 언어와 달리, var 키워드로 모든 변수를 선언합니다. (java나 c와 같은 언어의 경험이 있는 분들이라면 아시겠지만, 이런 언어에서는 숫자형, 문자형 각각 다르게[eg.char, double, int 등] 변수를 선언하죠..)

따라서 위에서 선언된 test 에는 숫자, 문자 등 아무 값이나 담을 수 있습니다.
test = 3; test = "String", test = 1.2; 모두 가능합니다.

변수는 대소문자를 구별합니다. (>>> 표시는 firebug의 명령프롬프트에서 입력한 값을 의미합니다.)

>>> var a = "lower";
>>> var A = "upper";
>>> a;
"lower"
>>> A;
"upper"
변수의 이름에는 문자/숫자/_(언더바) 입력이 가능합니다. 단 변수의 시작은 문자 또는 _(언더바) 가 되어야 합니다. 그리고 이미 예약되어있는 키워드는 변수명으로 사용이 불가 합니다.

var abcd2_name;   // OK
var 2_nameffdFFa; // NOT OK
var _adfjalfd;         // OK
var case;             // NOT OK , case는 예약어임


자바스크립트에 변수에 대한 강좌는 여기까지입니다. 어렵지는 않으셨죠? ^^ ( 혹시나 설명이 부족한 부분은 말씀해 주시면 추가로 보완하겠습니다. )

오늘 강좌를 요약하면 다음과 같습니다.
1. 자바스크립에는 상수개념이 없다. 하지만 대문자로 변수를 선언함으로써 관례적으로 상수처럼 사용한다.
2. 자바스크립트의 변수는 var 키워드와 함께 선언되며 문자/숫자 상관없이 입력가능하다.
3. 변수는 대소문자를 구별하고 변수는 문자, _(언더바) 로 시작된다.
4. 변수의 시작을 예약어, 숫자로 하는 경우에는 문법 오류가 발생한다.

다음 시간에는 연산자에 대해 알아보도록 하겠습니다.

Posted by 꽃광

본격적인 학습에 들어가기에 앞서, 이번 강좌에서는 자바스크립트를 테스트 할 수 있는 환경을 구축하는 법에 대해 알아보도록 하겠습니다. 물론 환경을 구축하는 방법에는 여러 가지가 존재하기 때문에, 반드시 본 강좌내용대로 할 필요는 없습니다. ^^ (이미 웹에 친숙하신 분들이라면 각자에게 맞는 방법을 선택하시면 됩니다)

우선 자바스크립트를 테스트하기 위해서는 자바스크립트를 실행해 볼 수 있는 실행환경(보통 브라우저)과 코딩을 할 수 있는 에디트 환경이 필요합니다.
본 강좌에서는 브라우저 : 파이어폭스, 코딩/실행/디버그환경 : 파이어버그로 진행하려고 합니다.

파이어폭스는 모질라 재단에서 무료로 배포하는 브라우저(현재 5.0까지 출시)입니다. 다음 경로에서 다운로드 가능합니다.
http://www.mozilla.or.kr/ko/

다운 후 실행파일을 클릭하면 쉽게 설치가 완료됩니다.

그 다음 설치할 것은 파이어버그입니다. 이름에서 알 수 있듯이 파이어폭스 브라우저에서 동작하는 디버깅을 돕는 확장 플러그인입니다. 설치방법은 다음과 같습니다.

1. 파이어폭스 메뉴의 부가기능 선택
2. 검색에서 firebug 입력
3. 검색된 부가기능 설치
4. 파이어폭스 재구동

참 쉽죠잉?^^ (웹사이트를 통해서 직접설치하셔도 무방합니다.)

설치가 완료되면 하단에 다음과 같은 아이콘이 보일 것입니다. (사용자 테마에 따라 위치가 다를 수 있음)

가장 우측에 있는 버튼이 파이어버그를 실행하는 버튼입니다.
빈 웹페이지를 열고 해당버튼을 클릭해 봅니다.

다음과 같은 실행창을 볼 수 있을 것입니다.

다양한 기능이 있지만 여기에서는 Javascript를 테스트 하는 환경만 살펴보도록 하겠습니다.

위의 메뉴중 콘솔버튼을 누르면 위와 같은 화면을 볼 수 있습니다.
>>> 보이시죠?, 이 곳에 명령어를 입력하면 바로바로 그 실행결과를 볼 수 있습니다.

한 번 테스트해볼까요?

3+5; 를 입력해 보았습니다. 바로 8이라는 결과가 뜨죠? 별도의 에디트창에서 자바스크립트를 입력하고 이를 브라우저에서 실행하는 절차 없이 간단하게 코드를 테스트해 볼 수 있습니다.

여기서 의문이 생깁니다.. 그럼 여러 줄 입력해야 하는 코드는 어떻게 실행하죠?

명령어 입력창의 우측에 있는 위로된 화살표 버튼을 누르면, 여러 줄을 입력할 수 있는 창이 뜹니다.

보이시죠? 이처럼 여러 줄의 문장도 한 번에 실행해 볼 수 있습니다.

자, 그럼 이제 본격적인 Javascript의 세계에 입문하기 위한 기본이 갖추어졌습니다. 다음 시간에는 javascript의 기본 개념 중 변수에 대해 설명해 보는 시간을 갖도록 하겠습니다.

Posted by 꽃광
자바스크립트에 대한 강의를 시작해보려고합니다. 뭐 물론 저도 완전히 초짜입니다. ^^; 이것저것 자료를 찾아가며 본 블로깅을 할 계획입니다.(주 내용은 Object-Oriented Javascript , Javascript: The Definitive Guide) 책을 참고하였습니다. - 번역서가 없는 게 아쉬울 따름) 잘 부탁드립니다. (누군가에게 설명하려다 보면 제 스스로도 이해도가 높아지는 것 같아서요, 사실 지식전달의 목적보다는 글로써봄으로써 제 이해력을 높이는게 더 큰 의도입니다.^^;), 잘못된 정보는 댓글로 말씀해주시면 정정하도록 하겠습니다.

블로그의 내용은 프로그래밍 경험이 없는 분들도 어느정도 이해할 수 있게 써보려고 하지만, 혹시 이해가 안되는 부분이 있을 수도 있으니, 그런 때엔 댓글 달아주시면 내용 보완하도록 하겠습니다.

강의내용은
자바스크립의 역사, 문법, 주요개념 등에 대한 설명이 되겠습니다. 자유로운 마음으로 시작하는 만큼 여러분들의 댓글이나 제 마음에 의해 내용은 변경될 수 있습니다.

자 그럼 시작하겠습니다.

최초의 Web은 정적인 HTML문서만을 표현하였습니다. HTML을 통해 정보를 표현하고 정보간의 Link(연결)를 하는 것이면 Web의 기능을 다하는 것이라고 생각했습니다. 

웹을 사용하는 이용자가 많아지고 규모가 커짐에 따라 웹 마스터들은 웹이 좀 더 다양한 기능(예.폼 밸리데이션)을 제공하면 좋겠다고 생각했습니다. 니즈에 맞추어 이런 기능을 구현하는 방법이 등장했습니다. java applet과 live script가 그러한 것을 가능하게 해주는 기술입니다. 자바 애플릿은 확산에 실패했고 live script 홀로 살아 남았는데, 이것이 추후 자바스크립트(Netscape에서 개발)라는 이름으로 변경되었습니다. ( 서버 Language인 Java와는 사실 아무런 관계가 없습니다. )

웹이 폭발적으로 성장하면서 Netscape진영(Netscape Navigator)과 Microsoft진영(Internet Explorer)간에 브라우저 1차대전(약 1996~2001년 사이)이 벌어지게 됩니다. 각각의 브라우저는 제각기 다른 기능을 Javascript(MS는 jScript라는 이름으로 개발)에 추가함으로써 비표준 기능들을 양산하게 됩니다. 이러한 비표준은 웹개발자를 괴롭게 하였습니다. 어느 한쪽에서 작동하는 자바스크립트 코드가 다른 쪽에서 작동하지 않는일이 비일비재하게 되었습니다.

이러한 문제 외에도 한가지 문제가 더 생겨났습니다. 그것은 바로 웹 개발자들이 자바스크립트의 기능을 활용하기 위해 웹사이트에 이런저런 기능들을 덕지덕지 붙인 것입니다. 사용성에 근거하지 않은 무분별한 기능들은 오히려 사용자가 원활하게 웹서핑을 하는 것을 방해하게 만들었습니다.

이 시기를 즈음하여 대다수의 사람들은 자바스크립트를 단지 웹을 꾸미는 역할을 수행하는 장식에 불과하다는 생각을 갖게 되었습니다.(오늘날까지도 국내의 많은 IT 관계자들이 자바스크립트를 이렇게 생각하고 있다는 것은 참 씁슬한 일입니다.)

1차 브라우저 대전이 끝난 뒤 승자는 MS가 되었습니다. 대부분의 브라우저 점유율을 IE가 차지하게 되면서 자바스크립트 관련 기술은 정체되었습니다.(발전의 필요성을 못느낀 것이기도 하겠지요..) 하지만 이런 정체된 시기를 기회로, 표준제정이 중요하다는 인식을 다같이 하게되었고, 자바스크립트 관련 기술도 ECMA-262라는 표준에 근거하는 형태로 안정을 찾게되었습니다.

표준화된 자바스크립트 기술은 이제는 IE뿐만 아니라 파이어폭스, 크롬, 사파리, 오페라 등 다양한 브라우저에서 큰 호환성 제약없이 사용할 수 있게 되었습니다.

오늘날 자바스크립트가 각광받는 이유도 이러한 표준이 존재했기 때문이 아닐까 생각을 해봅니다.

다음 시간에는 본격적으로 자바스크립트를 학습하기에 앞서, 기본적인 자바스크립트 테스트환경을 갖추는 법에 대해 살펴보도록 하겠습니다.

 
Posted by 꽃광