자바스크립트에서 문자열 내에 더블 쿼테이션("), 싱글 쿼테이션('), 세미콜론(;), 앰퍼센드(&) 같은 문자들을 사용하면 예기치 않은 문제들이 종종 발생한다. 이런 문자를 사용하고 싶을 때에는 백슬래쉬(\)를 그 문자 앞에 붙여 주면 된다. 다음은 그 예이다. 이 코드를 복사하여 위에 나와 있는 소스 창에 붙여 넣기 한 후 실행해 보기 바란다.
지역 변수(local variable) : 중괄호({와 })가 있는 명령어 즉, 함수, if...else 문 등에서 var 선언문과 함께 선언된 변수를 일컫는다. 함수나 if...else문이 끝나고 나면 그 변수는 자동 소멸된다. 아래 예에서 변수 varLocal은 지역 변수로, 함수가 끝나면 그 변수는 메모리에서 사라진다.
function newFunction()
{
var varLocal = 5;
...
}
전역 변수(global variable) : 중괄호({와 })가 있는 명령어 즉, 함수, if...else 문 등에서 var 선언문 없이 선언된 변수 또는 중괄호 밖에서 선언된 모든 변수를 자바스크립트에서 전역 변수라고 한다. 아래 예에서, varLocal1, varLocal2는 지역 변수이고, varGlobal1, varGlobal2, varGlobal3은 전역 변수이다.
<script language="xxjavascript">
varGlobal1 = 5;
function newFunction()
{
var varLocal1 = 5;
varGlobal2 = 5;
...
}
if (someCondition == 1)
{
var varLocal2 = 5;
varGlobal3 = 5;
}
</script>
이 개념을 확실히 알기 위해 다음 예를 한번 살펴보도록 하자. 1. 다음 예에서 strMsg는 함수 밖에서도 선언되었고 같은 이름으로 함수 안에서도 선언되었다. 그렇다면 함수 안에서 alert!문으로 strMsg를 출력하면 어떤 값을 나타낼까? "hello"가 나타날까? 아니면 "Daniel"이 나타날까? 함수 안에서는 지역 변수가 우선하므로 함수 안에서 strMsg를 참조하게 되면 지역 변수의 값인 "Daniel"이 사용된다. 즉, 같은 이름이라도 지역 변수와 전역 변수는 다른 메모리를 사용하는 것이다. 하지만 이 함수가 끝나면 지역 변수는 메모리에서 사라지고 함수 밖에서 strMsg란 이름을 참조하면 전역 변수의 값인 "hello"가 사용된다. 즉, 아래 예에서 newFunction()을 호출한 다음 alert!(strMsg)를 하면 "hello"가 출력되는 것이다. 2. 다음으로, 함수 안에서 var를 이용하여 변수를 선언하면 그 변수는 그 함수 안에서만 사용할 수 있는 지역 변수가 된다. 하지만 함수 안에서도 var 없이 변수를 선언하면 전역 변수가 되므로 함수가 끝난 다음에도 그 변수를 사용할 수 있다. 아래 예에서 함수 newFunction()을 호출한 다음 alert!(strGlobal), alert!(strLocal)을 순차적으로 호출해 보면 strGlobal 값은 나타나지만 alert!(strLocal)을 만나는 순간 에러가 발생할 것이다. 왜냐하면 그 변수는 함수가 끝나면서 이미 메모리에서 사라졌기 때문이다.
아래 스크립트의 결과는 차례대로 "Daniel", "hello", "전역변수입니다!"를 출력한 후 에러가 발생할 것이다.
<script language="xxjavascript">
strMsg = "hello"
function newFunction()
{
var strMsg = "Daniel";
var strLocal = "지역변수입니다!";
strGlobal = "전역변수입니다!";
alert!(strMsg);
}
</script>
<form>
<input type="button" value="이 버튼을 클릭하세요!" [안내]태그제한으로등록되지않습니다-xxonClick="newFunction();alert!(strMsg);alert!(strGlobal);alert!(strLocal);">
</form>
변수에 할당된 값은 어떤 데이터 타입을 가진다. 하지만 자바스크립트에서는 정확한 데이터 타입 체크를 하지 않는다. 즉, 어떤 변수를 선언할 때 그 데이터 타입을 굳이 선언하지 않아도 된다는 뜻이다. 왜냐하면 변수에 저장된 값에 맞게 적절한 데이터 타입으로 자동 변경되기 때문이다. 변수에 저장된 값에 따라 연산이 틀려질 수도 있다. 자바스크립트는 내부적으로 대략 다음과 같은 데이터 타입을 관리한다:
Number : 3 또는 7.987과 같이 정수 또는 소수점 등을 표현할 수 있다. 정수는 10진수, 8진수, 16진수 모두 가능하다.
Boolean : True 또는 False의 값을 가질 수 있다. 0이나 1로 대체할 수 있는 값이 아닌 특수한 값이다. 조건식에서 사용된다. 0으로 평가되면 false, 0이외의 어떤 값으로 평가되면 true의 값을 가진다.
String : "Hello World"와 같이 싱글 쿼테이션(') 또는 더블 쿼테이션(")으로 감싸진 문자들의 집합을 의미한다. 만일 더블 쿼테이션 안에서 또 다시 더블 쿼테이션을 사용해야할 경우 더블 쿼테이션 대신 싱글 쿼테이션을 사용하도록 한다.
Object : myDate = new Date();와 같이 어떤 개체가 생성된 다음 그 레퍼런스를 가진다.
Null : 이것은 0이 아니다. 전혀 값이 없다는 뜻이다.
Undefined : 변수가 생성된 이후 어던 초기 값을 갖지 않은 상태를 의미한다.
다음과 같은 예를 보면 자바스크립트에서 데이터 타입이 자동으로 어떻게 변하는지 알 수 있을 것이다.
논리 연산자는 조건식에서 여러 개의 조건을 묶어주는 역할을 한다. 예를 들어 (total>100) AND (cityTax=true)와 같은 조건식을 표현하고 싶을 것이다. 이 연산자는 두 개의 값을 취하여 그 결과를 true 또는 false로 반환한다. 논리 연산자는 다음과 같다:
위 예에서 함수 이름은 myfunction이다. 함수 이름은 변수 이름을 만들어 주는 것과 같이 만들어 주면 된다.
만일 함수를 호출하는 쪽에서 이 함수에 어떤 값을 넘겨주고 싶다면 그 갯수만큼 함수 이름 옆 괄호 안에 써주면 된다(위 예에서 parameter1, parameter2, ........ 부분). 그 이름은 변수 이름을 만들어 주는 것과 같이 만들어 주면 되고 함수 안에서 사용할 때도 변수 처럼 사용하면 된다.
함수는 <head> 태그 안에 위치시키는 것이 좋다.
만일 함수 안에서의 결과를 함수를 호출한 쪽에 반환하려면 return이란 키워드를 사용한다. 예를 들어 두 수의 합을 함수에서 구한 후 그 결과를 함수를 호출한 쪽에 반환하기 위한 예는 다음과 같다:
SWITCH문은 실행될 코드가 많이 있고 그 중 하나를 선별해야할 때 사용한다. 흔히 switch 다음에 나오는 (조건)에는 변수가 많이 사용되며 이 변수의 값을 읽은 후 case에 있는 각 값들과 비교를 한 후 적절한 코드를 실행시킨다. 여기서 주의해야할 것은 case 에 원하는 코드를 다 작성한 다음 break를 꼭 넣어야 한다는 것이다. 그렇지 않으면 현재 수행된 case의 바로 다음에 나오는 case에 있는 코드들도 실행되게 되어 있다. switch문에 대한 사용 방법은 다음과 같다:
switch (조건)
{
case 값1:
(조건)이 값1과 같으면 수행될 코드;
break;
case 값2:
(조건)이 값2와 같으면 수행될 코드;
break;
.....
.....
case 값n:
(조건)이 값n과 같으면 수행될 코드;
break;
default:
(조건)과 같은 값이 없을 경우 수행될 코드;
}
사용 예:
<SCRIPT LANGUAGE="xxJavaScript">
<!--
i = 1;
while(i < 8) {
switch(i) {
case 1 :
document.write("변수 값 : 1<BR>");
break;
case 2 :
document.write("변수 값 : 2<BR>");
break;
case 3 :
document.write("변수 값 : 3<BR>");
break;
default :
document.write("변수 값이 1, 2, 3이 아닙니다<BR>");
}
i++;
}
// -->
</SCRIPT>
for문은 어떤 조건이 만족될 때까지 자바스크립트 코드 블록을 반복시킨다. 보통 반복될 횟수가 정해져 있을 때 for문을 사용한다. for문에 대한 문법은 다음과 같다:
for (초기값 설정조건증감식) {
문장;
.......
}
"초기값 설정"은 제일 처음 단 한 번만 실행된다. 보통 이 값은 반복 횟수를 결정짓는 카운터에 해당하는 변수를 초기화 시킬 때 사용한다. "조건" 부분에는 자바스크립트 문장을 반복시킬지 말지를 결정하는 조건식이 들어간다. "증감식"에는 카운터 변수가 얼마큼씩 증가하거나 감소할지를 적어준다. 예를 들어, 1부터 10까지의 제곱을 구하는 스크립트를 작성한다면 다음과 같다:
do...while문도 while문과 동일하다. 먼저 do...while문의 문법을 먼저 살펴 보고 while문과의 차이점을 살펴 보자:
do {
문장;
.......
} while (조건)
do...while문과 while문의 차이점은 do...while문은 자바스크립트 문장을 무조건 한 번 수행하고 나서 반복 조건식을 조사하는 반면, while문은 조건식을 일단 조사한 후 자바스크립트 문장을 실행시킬지 말지를 결정한다는 것이다. 또한 while문은 모든 자바스크립트 버전에서 지원하지만 do...while문은 넷스케이프 및 익스플로러 4 이상에서 지원한다. 앞에서 살펴본 예제, 1부터 10까지의 제곱을 구하는 스크립트를 do...while문을 이용하여 작성한다면 다음과 같다:
<script language="xxjavascript">
<!--
i=1;
do {
document.write(i + "*" + i + " = " + i*i + "<br>");
i++;
} while (i<11)
//-->
</script>
break와 continue는 반복문의 흐름을 변경시킬 수 있는 문장이다. 이 두 문장은 반복문 안에서 사용된다. break와 continue의 차이점은 다음과 같다:
break : 반복문 실행을 중단하고 반복문이 다 끝나고 나오는 문장으로 흐름을 이동시키는 역할을 한다.
continue : 반복문이 실행되다가 continue를 만나면 continue 이후의 문장은 실행시키지 않고 반복문의 제일 처음으로 그 흐름을 이동시키는 역할을 한다.
다음 예는 앞에서 나온 예에서 i가 3일 때 continue를 실행시키고, i가 5일 때 break를 실행시키는 예이다:
<script language="xxjavascript">
<!--
for (i=1i<11i++) {
if (i == 3)
continue; // i가 3일 때는 아래 문장들이 실행 안된다.
if (i == 5)
break; // i가 5일 때 반복문은 중단된다.
document.write(i + "*" + i + " = " + i*i + "<br>");
}
alert!("반복문이 끝났습니다!!");
//-->
</script>
새로운 객체에 메쏘드를 하나 추가하는 것도 간단하다. 예를 들어 사운드를 통해 짓는 소리를 내는 woof라는 함수를 이미 만들어 놨다고 하면 다음과 같은 방식으로 이 객체의 메쏘드를 만드렁 낼 수 있다:
myPetDog.woof=woof;
객체 템플릿을 이용하여 생성하는 방법:
때때로 객체의 템플릿(template) 또는 프로토타입(prototype)을 만들어 놓은 후 마치 스탬프 찍듯 그 틀에 맞는 객체를 생성하고 싶을 때가 있다. 이 틀 또는 템플릿은 실제 객체의 인스턴스는 아니지만 객체의 구조를 정의하고 있는 부분이다. 이 템플릿을 사용하면 필요할 때마다 객체에 대한 인스턴스를 빨리 생성해낼 수 있다. 위에서 살펴본 예제를 이용하여 petDog이란 템플릿용 객체를 만들어 보자. 이를 위해 먼저 petDog 객체의 구조를 정의한 함수를 다음과 같이 만들어야 한다:
지정한 문자 반환. 예를 들어 substr(5, 3)은 5번째 문자로부터 3문자를 가지고 온다.
4.0
4.0
substring()
지정한 문자 반환. 예를 들어 substring(5, 3)은 3번째와 5번째 사이에 있는 문자를 가지고 온다.
2.0
3.0
sup()
문자열에 <sup> 태그를 단 형태로 반환: <sup>문자열</sup>
2.0
3.0
toLowerCase()
문자열을 소문자 형태로 반환
2.0
3.0
toUpperCase()
문자열을 대문자 형태로 반환
2.0
3.0
Array 객체
메쏘드
설명
NN
IE
length
배열에 있는 요소의 갯수를 반환
3.0
4.0
concat()
두 배열을 연결시켜 하나의 배열로 반환
4.0
4.0
join()
배열에 있는 모든 요소를 하나로 합쳐 하나의 문자열로 반환
3.0
4.0
reverse()
배열의 내용을 뒤집어서 반환
3.0
4.0
slice()
배열의 특정 부분을 반환
4.0
4.0
sort()
정렬된 배열 반환
3.0
4.0
Date 객체
메쏘드
NN
설명
IE
Date()
Date 객체 반환
2.0
3.0
getDate()
Date 객체의 날짜 반환 (1-31 사이의 값)
2.0
3.0
getDay()
Date 객체의 요일에 해당하는 숫자 값 반환 (0-6 사이의 값. 0=일요일, 1=월요일, ...)
2.0
3.0
getMonth()
Date 객체의 "월" 반환 (0-11 사이의 값. 0=1월, 1=2월, ...)
2.0
3.0
getFullYear()
Date 객체의 연도 반환 (4자리 숫자)
4.0
4.0
getYear()
Date 객체의 연도 반환 (낮은 브라우저에서는 두 자리수 연도 반환) getFullYear를 사용하는 것이 더 바람직함.
2.0
3.0
getHours()
Date 객체의 시간 반환 (0-23 사이의 값)
2.0
3.0
getMinutes()
Date 객체의 분 반환 (0-59 사이의 값)
2.0
3.0
getSeconds()
Date 객체의 초 반환 (0-59 사이의 값)
2.0
3.0
getMilliseconds()
Date 객체의 밀리세컨드 값 반환 (0-999 사이의 값)
4.0
4.0
getTime()
1970.1.1 자정 이후의 밀리세컨드 값 반환
2.0
3.0
getTimezoneOffset()
사용자 컴퓨터와 GMT 사이의 시간 차이 반환
2.0
3.0
getUTCDate()
Date 객체의 날짜를 UTC 형태로 반환
4.0
4.0
getUTCDay()
Date 객체의 요일 값을 UTC 형태로 반환
4.0
4.0
getUTCMonth()
Date 객체의 월 값을 UTC 형태로 반환
4.0
4.0
getUTCFullYear()
Date 객체의 년도를 UTC 형태로 반환
4.0
4.0
getUTCHourc()
Date 객체의 시간을 UTC 형태로 반환
4.0
4.0
getUTCMinutes()
Date 객체의 분을 UTC 형태로 반환
4.0
4.0
getUTCSeconds()
Date 객체의 초를 UTC 형태로 반환
4.0
4.0
getUTCMilliseconds()
Date 객체의 밀리세컨드를 UTC 형태로 반환
4.0
4.0
parse()
1970년 1월 1일 자정 이후의 밀리세컨를 갖고 있는 문자열로된 데이트 값 반환
2.0
3.0
setDate()
Date 객체에 날짜 설정 (1-31 사이의 값)
2.0
3.0
setFullYear()
Date 객체에 연도 설정
4.0
4.0
setHours()
Date 객체에 시간 설정 (0-23 사이의 값)
2.0
3.0
setMilliseconds()
Date 객체에 밀리세컨드 설정 (0-999 사이의 값)
4.0
4.0
setMinutes()
Date 객체에 분 설정 (0-59 사이의 값)
2.0
3.0
setMonth()
Date 객체에 월 설정 (0-11사이의 값. 0=1월, 1=2월)
2.0
3.0
setSeconds()
Date 객체에 초 설정 (0-59 사이의 값)
2.0
3.0
setTime()
1970.1.1 이후의 밀리세컨드 설정
2.0
3.0
setYear()
Date 객체에 연도 설정 (00-99 사이의 값)
2.0
3.0
setUTCDate()
Date 객체에 날짜를 UTC 형태로 설정
4.0
4.0
setUTCDay()
Date 객체에 요일을 UTC 형태로 설정
4.0
4.0
setUTCMonth()
Date 객체에 월을 UTC 형태로 설정
4.0
4.0
setUTCFullYear()
Date 객체에 년도를 UTC 형태로 설정
4.0
4.0
setUTCHour()
Date 객체에 시간을 UTC 형태로 설정
4.0
4.0
setUTCMinutes()
Date 객체에 분을 UTC 형태로 설정
4.0
4.0
setUTCSeconds()
Date 객체에 초를 UTC 형태로 설정
4.0
4.0
setUTCMilliseconds()
Date 객체에 밀리세컨드를 UTC 형태로 설정
4.0
4.0
toGMTString()
Date객체를 문자열 형태로 반환 (GMT)
2.0
3.0
toLocaleString()
Date객체를 문자열 형태로 반환 (로컬 시간)
2.0
3.0
toString()
Date객체를 문자열 형태로 반환
2.0
4.0
Math 객체
속성
설명
NN
IE
E
오일러 상수, 자연 로그의 밑으로 사용
2.0
3.0
LN2
밑이 e인 2의 자연 로그
2.0
3.0
LN10
밑이 e인 10의 자연 로그
2.0
3.0
LOG2E
밑이 2인 E의 로그
2.0
3.0
LOG10E
밑이 10인 E의 로그
2.0
3.0
PI
파이(PI) 값 반환
2.0
3.0
SQRT1_2
1/2의 제곱근
2.0
3.0
SQRT2
2의 제곱근
2.0
3.0
메쏘드
설명
NN
IE
abs(x)
x의 절대 값 반환
2.0
3.0
acos(x)
x의 arccosine 값 반환
2.0
3.0
asin(x)
x의 arcsine 값 반환
2.0
3.0
atan(x)
x의 arctangent 값 반환
2.0
3.0
atan2(x,y)
x 축에서 어떤 지점까지의 각도 반환
2.0
3.0
ceil(x)
x보다 크거나 같은 가장 가까운 정수 값 반환
2.0
3.0
cos(x)
x의 cosine 값 반환
2.0
3.0
exp(x)
x의 exponent 값 반환
2.0
3.0
floor(x)
x보다 작거나 같은 가장 가까운 정수 값 반환
2.0
3.0
log(x)
x의 자연 로그 값 반환
2.0
3.0
max(x,y)
x와 y 중 큰 값 반환
2.0
3.0
min(x,y)
x와 y 중 작은 값 반환
2.0
3.0
pow(x,y)
x의 y승 반환
2.0
3.0
random()
0과 1 사이의 난수 값 반환
2.0
3.0
round(x)
x와 가장 가까운 정수로 반올림
2.0
3.0
sin(x)
x의 sine 값 반환
2.0
3.0
sqrt(x)
x의 제곱근 반환
2.0
3.0
tan(x)
x의 tangent 값 반환
2.0
3.0
▼ 명령어 사용법
명령어 사용법
Jar에 대해서
1. jar파일이란 : jar파일은 archive파일이다. 즉 여러개의 파일을 하나의 파일로 묶는 jar명령을 사용하여 생성된다.
이 파일은 winzip에서 열어 볼 수 있으며, winzip에서 열어보면 여러개의 파일들이 디렉토리 정보를 가진채
들어 있다. (아무 jar파일을 직접 클릭해 열어 보시라)
2. zip 파일과 다른 점 : winzip과 다른점은 압축되어 있을수도 있고, 그냥...하나로 묶어놓은 파일일수 도 있다.
그래서 jar 파일을 archive파일이라 볼수 있다. 이렇게 archive파일로 묶는 이유는 자바로 개발한 여러
클래스 파일들 또는 패키지 파일이 있을때, 이를 하나로 묶어두면, 그 클래스들을 참조하기도 편하고,
다운 받기도 쉽다.(애플릿의 경우 더욱 그러함)
3. jar명령 사용하기
(1) 명령구문 : jar {ctxu}[vfm0M] [jar-file] [manifest-file] [-C dir] files ...
(2) {ctxu} 중의 하나는 맨 앞에 나와야할 필수 옵션이다.
: c (새로운 archive파일을 생성한다)
: t list table of contents for archive
: x (다음에 지정한 파일들을 archive파일로 부터 압축을 푼다)
: u (기존 archive파일에 들어있는 파일을 수정한다.)
(3) [vfm0M]은 {ctxu} 중의 하나다음에 오는 옵션이다.
: v (명령화면창으로 진행사항에 관한 메시지를 출력한다.) : 웬만하면 써주면...좋음..
: f (archive될 파일이름을 지정한다.) : 그래도 생성될 파일의 이름은 써줘야겠죠...?
: m (정보를 manifest파일로 부터 포함한다.)
: 0 (저장만 하고, zip으로 압축하진 않는다.)
- 클래스파일을 압축하면 곤란하죠...class파일의 경우는 꼭..써줘야죠..
: M (추가되는 엔트리에 대한 manifest 파일을 생성하지 않는다.)
(4) -C (지정된 디렉토리로 바꾸고, 다음 파일을 포함한다.)
: 어떤 파일이 디렉토리이면 순환되면서 처리된다.
(5) manifest file이름과 archive파일 이름은 순서대로 지정되어야 한다.
(6) manifest file : 뭐...대단한 파일인줄 알았는데, 열어보면 내용이 다음과 같습니다.
: m옵션을 주어 지정하는데 뭐....중요한건 아닌거 같으니까...이런게 있다는것만 아셔도 될듯..
<내용>
Manifest-Version: 1.0
Created-By: 1.2.2 (Sun Microsystems Inc.)
4. 사용예
예) jar cvf new.jar 1.class 2.class
: c옵션이 사용되었으므로 일단은 1.class, 2.class를 묶으려고 시도할 것이다.
(생성시는 반드시 f옵션을 줘야함, 안주면 어케 될까?...함해봐요...컴에서 삑삑...소리가 나올것임..-.-; 왜그런지는 아시겠죠?)
: v옵션이 사용되었으므로 진행상황 메시지가...줄줄 나올것이다. (이건 안해도 됨)
: f옵션은 c옵션사용시 생성될 파일명을 지정(반드시 해주어야 지정된 이름으로 파일이 생성된다.)
예) jar cvf new.jar -C test/ .
: -C옵션을 주면 현 디렉토리 아래의 test디렉토리에 있는 모든 파일을 new.jar로 묶어준다.
예) jar cvf new.jar -C /test .
: 위의 것이랑 비슷하지만... test디렉토리 뿐 아니라 현디렉토리에 있는 파일도 new.jar로 묶어준다.
예) jar ufv0 new.jar test
: u옵션은 test디렉토리 밑의 파일들을 new.jar에 추가한다는 의미...(test디렉토리에 파일이 있어야겠죠..?)
: 0옵션은 압축하지 말고 추가하라는 의미(클래스 파일의 경우는 이 옵션을 써줘야함)
: f와 v는 아시겠죠...?