변수 타입 구분이 없다, 변수명이 틀려도 NO 에러!
Java Script의 Syntax는 파이썬 만큼 추상적이진 않은 듯,
프로토 개발에 QT가 빠를까 Java Script가 빠를까? 여튼, 낫 베드,
필자는 C++에 익숙한 개발자이다. 틈틈이 C, JAVA, C#를 접해보긴 했지만, C++에 가장 많은 시간을 할애했다.
근래에 지인의 요청에, 무엇에 특화된 계산기를 작성해야 할 일이 있었는데, 어떤 언어로 쉽게 빠르게 개발이 가능 할까를 고민하다 JavaScript로 선택하게 됐고, C++에 익숙한 사람 입장에서 Java Script를 시작할 때 기본으로 알아야 할 사항에 대해 정리하고자 한다.
목차
1. JavaScript 기본 코드단락은 어떻게 될까?
컴파일이 필요한 C++과는 다르게, Java Script는 인터프리터 언어이다. 다시 말해서, 컴파일 없이 Script가 실행되는 언어이다.
크게 코드 파트는 UI를 담당하는 HTML의 <body></body>영역, 그리고 <head></head>영역에 Java Script가 들어가게 된다. Java Script가 로직 영역이 되겠다.
간단하게 HTML 한 페이지에 Java Script 앱을 작성하게 된다면, 구조는 아래와 같다.
<html>
<head>
<script type="text/javascript">
// logic : javascript area
</script>
<body>
<!-- UI : body area -->
<table border="1" >
<thead>
<th>
<td>menu</td>
</th>
</thead>
<tbody>
<tr>
<td>value</td>
</tr>
</tbody>
</table>
</body>
</html>
2. Java Script기본 문법은 어떻게 될까?
코드를 작성할 위치는 <head> </head>사이에 <script type=”text/javascript” …. 로 시작해, </sciprt>의 사이 영역이 되겠다.
주석은 어떻게 넣을까?
C++과 동일하다. 싱글라인 은 //로 시작하고 멀티 블럭은 /* */로 감싸면 된다.
<script type="text/javascript">
// it is sigle line comment
/*
here is multi block comment
*/
</script>
함수 어떻게 만들고 변수타입은 무엇이 있을까? 로그는?
함수는 function으로 시작하고 함수 Parameter는 타입이 없고, 이름만 넣는다.
function func_plus_both(number1, number2)
{
return number1 + number2;
}
function func_do_something()
{
let number3 = func_plus_both(1, 2);
// below can be seen on chrome developer mode, Ctrl + Shit + I
console.log('number3: ' + number3 );
// below will show modalless popup window ? but, disable for this example, try it, if you have time
// alert('number3: ' + number3)
}
변수 타입은 적어도 그만 안 적어도 그만이다. 타입을 선언하지 않는다 해서 웹브라우저로 실행할 때 크롬이 죽거나 그러진 않는다. 다만 내가 원하는 동작이 일어나지 않을 뿐이다.
그래도 var, let, const 3가지의 변수 타입이 있긴 한듯하다.
const는 C++의 const 와 유사하게 한번 선언하면 변경 불가 한 타입인 듯 한다. var와 let의 차이는 아직 찾아보지 못했고, let이 인기가 좋다 어디서 본 듯 하니, 일다 let을 쓰도록 한다.
- var
- let
- const
로그는 위 예제에서 보듯, console.log()나 alert()로 출력 가능하다.
크롬의 개발자 모드(Ctrl + Shit + I) console 창에서 console.log() 내용을 볼 수 있다. alert()는 팝업창이 뜬다.
얼핏 예전에 보기로는 Java Script는 변수 타입 개념이 자세하게 없어서 디버깅에 어려움이 있다 본 듯 한다. 그래서 Type Script의 대안이 있고, Type Script로 코드의 신뢰성 검증을 하고 Java Script로 export하는 개념이라 본 듯 하다. 관심이 있으면 찾아보길 바란다.
배열은 어떻게 선언하고, 루프는 어떻게 돌릴까?
문론, function안에서 배열을 선언해 사용 할 수 도 있지만, 어떤 함수에서도 접근 가능한 배열은 C++의 전역변수와 비슷한 개념으로 배열을 선언해 사용 가능하다.
var arrSomething = [
{
val1: "50000",
val2: "4500"
},
{
val1: "60000",
val2: "5000"
}
]
function func_print_something()
{
for(int i = 0; i < arrSomething.length; i++)
{
console.log('arr, ' + i + ': ' + arrSomething[0].val1);
}
}
C++에 익숙한 입장에서는, 구조체나 클래스를 선언하지 않고, 자료형과 배열을 한번에 선언 가능하니 편한 것 같기도 하다.
3. UI와 로직은 어떻게 바인딩 할까?
앞서 설명 했듯이, 한 HTML 페이지 안에서 UI는 <body></body> 영역, 그리고 로직은 <head></head>의 Java Script가 되겠다.
텍스트 입력(input)은 어떻게 받을까?
텍스트 입력을 받는 input을 예로 들겠다. Java Script에서 Component instance를 얻을 수 있는 매개를 id로 선언한다. 그리고 Java Script에서 텍스트 입력 변화를 감지 할 수 있는 Callback 함수는 oninput으로 선언한다.
<html>
<head>
<script type="text/javascript">
funtion oninput_something()
{
let something = document.getElementById('id_somehting').value;
console.log('something: ' + something );
}
</script>
</head>
<body>
<input type="number" id="id_somehting" oninput="oninput_something()" />
</body>
</html>
텍스트를 입력(input)받아 계산 값을 텍스트 박스에 업데이트 해볼까?
intput으로 텍스를 입력받아, span으로 선언한 필드에 입력된 값 +1을 해서 업데이트 하는 내용이다.
입력된 값이 숫자인지를 체크하기 위해 isNaN를 써서 필터링 하고, 값을 더할 때 parseInt를 사용해 숫자로 변환후 1을 더한다.
<html>
<head>
<script type="text/javascript">
function is_valid_number(val)
{
return !isNaN(parseFloat(val));
}
funtion oninput_something()
{
let something = document.getElementById('id_somehting').value;
console.log('something: ' + something );
let result = document.getElementsByClassName("id_span_cal_result")[0];
if(is_valid_number(something ) == true)
{
result.innerText = parseInt(something ) + 1;
}
else
{
result.innerText = "please input number only! man!";
}
}
</script>
</head>
<body>
<input type="number" id="id_somehting" oninput="oninput_something()" />
<span class="id_span_cal_result"></span>
</body>
</html>
누구를 위한 부가적인 누더기 코드인지는 모르겠지만, 타입이 없으니 변수 타입이 명확한 언어 대비 체크가 더 필요한 듯 싶다. parseInt()는 Java Script가 개발된 이후에 Needs에 의해 추가된 API가 아닐까 생각해 본다.
4. 유틸리티 함수 챙겨가세요?
여튼, 지인의 부탁으로 Java Script 코드를 작성하면서, 생긴 유틸리티 함수 공유한다. 뭐 드릴 건 없고 필요하면, 챙겨 가세요?
function is_valid_number(val)
{
return !isNaN(parseFloat(val));
}
function toNumberComma(val)
{
return val.toString().replace(/\B(?<!\.\d*)(?=(\d{3})+(?!\d))/g, ",");
}
체크박스(checkbox) 관련 구현이 필요하면 아래도 챙겨가길 바란다.
<script type="text/javascript">
function isChecked(id_)
{
return document.getElementById(id_).checked;
}
function setChecked(id_, checked_)
{
document.getElementById(id_).checked = checked_;
}
function onclick_check_something()
{
/*
if(isChecked("id_check_something") == true)
{
}
*/
// setChecked("id_check_something", false);
}
</script>
...
<input type="checkbox" id="id_check_something" onclick="onclick_check_something()" checked="checked" >
[잉여타임즈] surplstimes@gmail.com