JS에서, <script> 블록에서는 주석을 자바와 같이 // 와 /**/ 를 이용한다.





document.write()의 경우는 기존의 HTML 문서를 지우고 새 HTML 빈 문서에 테스트를 할 때 쓰인다.


document.write("<h1>안녕 헤드라인!</h1>") 과 같이 쓰면 기존의 화면이 지워지고


안녕 헤드라인! h1 태그가 화면에 보여진다.


주로 테스트 할 때 사용하는 키워드이다.






inner HTML은 바디에 생성한 개체들의 내용을 읽거나 바꿀 때 사용한다.





console.log의 경우는 자바 이클립스에서 실행하면 코드 아래쪽의 실행창과 비슷하며


원하는 문구를 출력할 수 있고 오류같은 메시지도 볼 수 있다. f12의 개발자 모드 하단에서 찾을 수 있다.




다음은 예제이다.




javaScript02.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script>
	//한줄 주석입니다.
	/*
		여러줄 주석입니다.
	*/
	function start(){
		alert("문서가 로딩완료되었습니다.");
	}
	
</script>
<style>
	.area {
		width:300px;
		height:100px;
		border:1px solid black;
	}
</style>
</head>
<!-- <body onload="start();"> -->
<body>
	<h1>자바스크립트의 데이터 입/출력</h1>
	
	<script>
		// 웹페이지의 모든 내용이 로딘된 후에 실행되면, 로딩된 데이터를 지우고 출력하기 때문에
		// 주로 테스트 용도로만 사용한다.
		document.write("<h1>document.write()로 출력함</h1>");
	</script>
	
	<h3>inner HTML로 요소의 내용 변경하기</h3>
	
	<div id="area1" class="area">자바스크립트에서 태그 앨리먼트의 값을 읽어가거나,
	값을 변경할 때 inner HTML 속성을 사용한다.</div>
	<br>
	<button onclick="checkvalue();">innerHTML 확인</button>
	<script type="text/javascript">
		// text/javascript는 생략가능
		function checkvalue(){
			var area1 = document.getElementById("area1");
			alert(area1.innerHTML);
			console.log(area1.innerHTML);
			console.log(area1);
			
			area1.innerHTML = "innerHTML 속성으로 값 변경함";
		}
	</script>
	<hr>
	<h3>console.log()로 개발자 도구 콘솔 화면에 출력하기</h3>
	<p>개발자 도구 콘솔 화면에 출력을 하고자 할 때 사용하며,
	디버깅 할 때 주로 사용한다.</p>
	<button onclick="printConsole();">콘솔에 내용 출력</button>
	<script>
		function printConsole(){
			var num1 = 3;
			var num2 = 4;
			var sum = num1 + num2;
			
			window.console.log(sum);
			// window는 생략가능
		}
	</script>
	
	<hr>
	
	<h3>window.confirm()을 이용한 데이터 입력</h3>
	<p>어떤 질문에 대해 "예/아니오"의 결과를 얻을 때 사용한다.</p>
	<p>확인 버튼과 취소 버튼이 나타나며, 확인 버튼을 클릭시 true.
	취소 버튼을 클릭시 false를 리턴한다.</p>
	<button onclick="checkgender();">성별 확인하기</button>
	<div id="area2" class="area"></div>
	<script type="text/javascript">
		function checkgender() {
			var result = confirm("남자면 확인, 여자면 취소 버튼을 눌러주세요");
			
			console.log(result);
			
			var gender = "";
			
			if(result == true){
				gender = "남자";
			}else{
				gender = "여자";
			}
			
			console.log(gender);
			
			var area2 = document.getElementById("area2");
			area2.innerHTML += "당신은 " + gender + "입니다.<br>";
		}
	</script>
	
	<hr>
	
	<h3>window.prompt()를 이용한 데이터 입력</h3>
	<p>텍스트필드와 확인/취소 버튼이 있는 대화상자를 출력하고,
	입력한 메세지 내용을 리턴값으로 돌려받는다.</p>
	<button onclick="testPrompt();">이름 입력</button>
	<div id="area3" class="area"></div>
	<script>
		function testPrompt() {
			var result = window.prompt("당신의 이름은 무엇인가요?");
			
			var area3 = document.getElementById("area3");
			
			area3.innerHTML += "앗! 당신이 " + result + "군요! 반가워요!";
			
			
			
		}
	</script>
	
</body>
</html>


먼저 폴더 구조를 설명





view 폴더를 만들고 저번과 같이 html 파일 생성


web 아래에 js 폴더를 만들고 다음과 같이 생성한다.












다음과 같은 화면을 구현한다.







다음 화면으로 넘어가는 코드







index.html


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>New JS</title>
</head>
<body>
	<h1>안녕!</h1>
	<ol>
		<li>
			<a href="views/javaScript01.html">자바스크립트 개요</a>
		</li>
	</ol>
</body>
</html>



javaScript01.html


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="../js/sample.js"></script>
</head>
<body>
	<h1>자바스크립트 개요</h1>
	
	<dl>
		<dt>스크립트 언어란?</dt>
		<dd>기본 프로그램의 동작을 사용자의 요구에 맞게 수행되도록 하는 용도로 사용된다.<br>
		짧은 소스 코드 파일로 빠르게 상호작용 하도록 고안되었다.</dd>
	</dl>
	<dl>
		<dt>자바스크립트</dt>
		<dd>웹 브라우저에서 많이 사용하는 인터프리터 방식의
		객체 지향 프로그래밍 언어이다.<br>
		ECMA 스크립트 표준을 따르는 웹 기술이다.</dd>
	</dl>
	<dl>
		<dt>자바스크립트 사용법</dt>
		<dd>
			<ol>
				<li>태그에 직접 간단한 소스코드를 작성해서 실행되게 하는 방법(인라인)</li>
				<li>script 태그 영역에 작성해서 실행되게 하는 방법</li>
				<li>별도의 js 파일로 작성해 가져다 사용하는 방법</li>
			</ol>
		</dd>
	</dl>
	<dl>
		<dt>단, 소스는 함수 단위로 작성하고 이벤트 속성을 사용해서 구동되게 한다.</dt>
		<dd>이벤트 속성은 태그마다 차이가 있음<br>
		on이벤트명 = "실행할 함수 명([전달값])"</dd>
	</dl>
	
	<hr>
	
	<h2>1. 태그에 직접 자바스크립트 코드를 작성해서 실행하게 되는 경우</h2>
	<button onclick="alert('버튼 클릭 확인')">클릭하세요!</button>
	
	<hr>
	
	<h2>2. script 태그 안에 함수 단위로 소스 작성하고,
	태그에서  on이벤트명="함수명();"으로 사용하는 경우</h2>
	<button onclick="testfn();">함수 실행 확인용 버튼</button>
	<script>
		function testfn(){
			window.alert('testfn()함수 실행됨...');
		}
	</script>
	
	<br>
	
	<h2>3. 별도로 작성된 자바스크립트 함수 사용 테스트</h2>
	<button onclick="samp();">samp() 실행</button>
	
</body>
</html>



sample.js



/*
 * 별도로 작성된 자바 스크립트 샘플
 */
function samp(){
	window.alert('samp 함수 실행');
}


구글 검색창에 톰캣을 검색하여 홈페이지로 들어간다.






http://tomcat.apache.org/


메인화면에서 좌측에 다운로드 하위에 Tomcat 버전이 있다.


그 중 8버전을 사용한다.








Tomcat 8의 8.5.34 버전, 그리고 자기 운영체제 환경에 맞춰서 32bit or 64비트를 다운로드 해준다.


다운로드 하고 압축파일을 마음에 드는 위치에 압축 해제만 한다면 끝이다.


톰캣은 따로 설치없이 그대로 사용하게 된다.










개발환경 설정







이클립스에서 새로운 Workspace를 마음에 드는 위치로 설정한다.


워크스페이스를 변경하면 설정도 새로 해야한다.





다음으로는 유니코드 설정변경


먼저 화면에 보이는 창들을 전부 끄자. 그리고 사용할 뷰만 띄울것이다.


상단 메뉴바의 window - show view - console, navigator, servers 를 눌러 화면의 뷰를 띄우자











다음과 같이 뜨면 된다.







다시 상단 메뉴바의 window - preferences를 누르고


설정창을 열자


설정창에서 다음 스크린샷의 검정색 박스와 같이 전부 UTF-8로 변경하자.









이와같이 설정을 마치면 편집기 설정은 끝


다음으로는 톰캣, 서버 설정


이클립스 화면의 좌측 하단 Servers 탭을 보면 서버가 없다, 추가해주세요 라는 문구가 있다.


문구를 클릭하거나 빈 공간에 우측 클릭 - new - server로 생성하자.








나오는 창을 사진의 검정 박스로 표시한 부분을 알맞게 설정하여 진행하자.


Browse 하여 경로 지정하는 부분은 이 게시글 맨 위에서 받은 Tomcat 압축파일을 해제한 위치이다.








아까 서버를 생성하라던 문구가 사라지고 톰캣 서버가 잡혔다.


한번 시작 버튼을 눌러서 가동해보자.






잘 따라왔다면 위와 같이 서버 가동 완료시간과 함께 정상 Start가 됫다고 출력된다.


서버가 정상 실행되는 것이 확인 됫다면 화면 좌측 하단의 Servers에서 빨간색 네모 버튼을 눌러 서버를 정지





다시 화면 좌측 하단의 Servers에서 서버를 더블클릭하면 위와같은 화면이 나온다.


그 중 검정색 네모 박스에 맞춰서 설정을 바꿔주자.


Port는 8080으로 되어있을 텐데 바꾸는 이유는 예전에 DB의 포트를 8080으로 설정했기 때문에 다른거로 바꾼다.


8765 말고 마음에 드는것으로 설정하여도 상관없다.






다음으로는 HTML 파일을 생성하여 정말 간단한 메인 페이지를 만드는 방법


먼저 Servers 폴더가 하나 있는 좌측의 Navigator 창에 우클릭 - Dynamic web Project를 누른다.





이와 같은 창이 뜨고 마음에 드는 이름을 입력하고 Finish를 누르지 말고 Next를 누르자.






디폴트 경로를 꼭 이와같이 바꾸자. 그리고 Next






위의 이름은 기본값으로 설정되어 있을텐데 앞에서 입력했던 프로젝트 이름과 동일하면 나중에


파일을 직접 찾을 때 헷깔리는 일이 있을 수 있다.


고로 다른것으로 바꿔주자.


또한 아래의 체크박스도 체크해주고 Finish를 누른다.





위와 같이 경로가 잘 잡혀있다.






다음으로는 WEB-INF 폴더에 우클릭을 해도 HTML 파일 생성을 찾을 수 없는데 옵션을 수정하여 만들어 보자.


화면 상단 메뉴의 Window - Perspective - Customize Perspective






그리고 Short cut의 좌측 항목의  Web이 네모네모로 설정이 되어있는데


체크박스를 두번 누르면 체크 표시로 변한다.


그리고 OK







다시 WEB-INF에 우클릭을 하고 NEW를 보면 HTML 파일이 생성되어 있는것을 확인 할 수 있다.







index.html이라고 File name을 변경하자


index가 공통적으로 사용하는 화면의 메인페이지이기 때문에 index로 설정한다.









간단하게 문서를  수정한다.





이제 다음과 같이 Java 프로젝트를 서버에 올리면 된다.







Servers 의 톰캣을 우측클릭하고 Add and Remove를 누른다.









생성한 프로젝트를 add 로 추가하고 Finish를 눌러주면 된다.


파일을 올리고 아까와 같이 Servers의 재생버튼을 눌러 서버를 실행하자.





인터넷 브라우저를 띄어 "127.0.0.1:[아까 입력한 포트번호]/js"   "localhost:[아까 입력한 포트번호]/js" 둘 중 하나를 입력하여 실행하면


index, 메인 페이지가 정상적으로 뜬다.


127.0.0.1 이나 localhost는 현재 컴퓨터의 자기 자신의 주소를 의미한다.









※ index.html을 사용한 이유






프로젝트의 web.xml을 누르고 나오는 창의 아래쪽에

Design을 Source로 바꾸어서 보면

Welcom-file 블록이 보인다.

첫 번째 띄울 화면의 파일 이름이 무엇인지 여기서 설정하는데

기본값이 index로 되어있기 때문에 이와같이 사용한다.


Emmet 코드는 자동완성으로 만들어지는 HTML 코드이다.


자주 사용하는 코드들이나 div같은 태그를 쓸 때 <>, </>를 일일히 입력하지 않고


div만 치고 아래 나오는 자동완성 리스트를 선택하는 것이다.






위와같이 리스트를 한꺼번에 만들 수 있고







느낌표를 Tab하면 HTML의 기본 틀이 자동완성 된다.




이러한 단축 코드들의 리스트는 아래 사이트에 정리되어 있다.



https://docs.emmet.io/cheat-sheet/



직접 들어가서 확인해 보면 한눈에 들어올 것이다.







페이지를 만들기 위해 만들어진 양식, 라이브러리가 많은데


그 중 하나가 부트스트랩이다. 


https://getbootstrap.com


사용방법은 이 사이트에서 코드 자체를 직접 다운로드 하는 방법이 있고


CDN 방식인 코드를 통해서 불러오는 방법이 있다.


그 중 CDN 방식을 소개한다.




디자이너가 아니고 개발자가 직접 HTML 코드로 만들면 솔직히 말해서 많이 구리다...


그래서 Bootstrap을 이용하여 미리 만들어진 디자인을 이용해서 html문서를 작성하면 된다.


CDN 방식은 head에 link 태그와 script 태그를 이용해서 불러온다.






페이지 메인화면에서 상단 메뉴바에서 Examples를 눌러보면










스크롤을 내려 Custom components를 보면 미리 만들어져 있는 예제 페이지들을 볼 수 있다.
















다시 상단 메뉴의 HOME을 눌러 메인으로 돌아오고 페이지 스크롤을 내려 아래를 보면 다음과 같이 코드들이 있다.








여기서 CDN이라고 적힌 부분의 CSS only와 JS 부분을 복사하여 head에 추가하면 된다.







이와같이 추가하고 꼭 css를 먼저 쓰고 js를 써야한다. 불러오는 순서와 연관되어 있다.









이제 상단 메뉴바의 Documentation을 눌러보자.






위와 같은 페이지가 뜨는데


여기서 원하는 기능들을 불러올 수 있다.


예를들어 왼쪽 리스트의 Jumbotron을 가져오고 싶다면 눌러보자.






위와 같이 예시가 하나 나오고 아래에는 그에 대한 코드가 나온다.


이 코드를 복사하여 body에 붙여넣기 하면 예시와 똑같이 나온다.







기본 제공되는 HTML 코드와 Bootstrap을 이용한 예시를 한번 비교해보자.



<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <!--Bootstrap css-->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
    <!--Bootstrap js-->
    <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>    
    <!--css가 무조건 위에 있어야 함, 먼저 로딩되고 js 코드가 필요하기 때문이다.-->
</head>
<body>
    <h1>HTML이 제공하는 기본 헤더1 태그</h1>
    <div class="jumbotron">
        <h1 class="display-4">Hello, world!</h1>
        <p class="lead">This is a simple hero unit, a simple jumbotron-style component for calling extra attention to featured content or information.</p>
        <hr class="my-4">
        <p>It uses utility classes for typography and spacing to space content out within the larger container.</p>
        <a class="btn btn-primary btn-lg" href="#" role="button">Learn more</a>
    </div>
</body>
</html>



위와 같이 문서를 작성하였고 간단하게 h1태그를 사용하였다.


결과는 아래와 같다.










h1 태그를 보면 매우 구리다.


이와같이 Bootstrap에 잘 디자인 된 코드들이 많으므로 유용하게 갖다 쓰자.






https://startbootstrap.com/


위 사이트는 완성된 페이지 코드들을 공유하고 있다.





JS에서 데이터 타입을 구분하기 위해선


코드를 읽어보는 수 밖에 없다.


왜냐하면 선언 자체를 var로 전부 통일하여 사용하고


그 후에 들어오는 값에 따라서 자동으로 잡히게 되어있기 때문이다.






콘솔은 JS에서 가장 간단한 디버깅 도구이다.


여태껏 출력을 위해 사용한 그 console이다.


이번에는 console. 하고 뒤에 붙는 메소드들과 그의 사용법, 


그리고 body에 있는 요소(ex buttone, li, div 등) 을 가져오는 방법을 함께 알아보자



<html>
    <head>
        <meta charset="UTF-8">
        <title>Java Script</title>
        <link rel="icon" href="img/favicon.ico">
        <style>
            /*css 주석*/
        </style>
        <!--스크립트를 여기에 넣어도 되지만 페이지가 느려지는 등 원인으로 바디 아래에 넣음-->
    </head>
    <body>
        <button>버튼</button>
    </body>
    <script>
        var str = "문자열";
        var obj = {key : "value"};
        var arr = [1, 2, 3, 4, 5];
        // Object의 경우 key는 막 써도 문자열로 잡히는데
        // 뒤의 value값은 ""를 꼭 사용해야 문자로 인식 된다.
        // 만약 쓰지 않으면 변수값으로 인식된다.

        // 로그 레벨
        console.log("Log");
        console.info("Info");
        console.warn("Warn");
        console.error("Error");

        // 어떠한 자료구조든지 표현 가능
        console.log(str);
        console.log(obj);
        console.log(arr);

        // 문자열과 함께 표현도 가능
        console.log("문자열 : " + str);
        console.log("객체 : " + obj); // 객체는 문자열과 함께 사용 x
        console.log("배열 : " + arr);

        // 만약 문자열과 객체와 함께 사용하고 싶다면...
        console.log("객체", obj);
        console.log("배열", arr);
        // 콤마를 사용해도 상관없다.

        //////////////////////////////////////////// 바디의 요소 가져오기

        // 태그는 여러개 일 수 있기 때문에 배열로 가져온다.
        var btn = document.getElementsByTagName("button");
        console.log(btn);
        // 이벤트(이벤트 객체가 매개변수로 들어온다.)
        btn[0].addEventListener("click", function(e){
            console.log("click", e);
        })


        
    </script>
</html>






get하고 자동완성을 누르면 다양한 방법으로 요소를 가져올 수 있다.






또한 가져온 값을 출력(console.log(btn); 구문)하면 위와 같이 배열 오브젝트 형태로 값이 들어오는데


key - value 형식으로


요소의 속성들이 쭈우우욱 들어있다, 정말 많이 있는데


이 요소들을 제대로 컨트롤 할 줄 안다면 JS는 정말 잘하는 숙련자라고 볼 수 있다.




그리고 이벤트를 구현 할 때 이벤트 객체가 매개변수로 들어오게 되는데


이 매개변수는 정말 다양한 정보를 담고 들어온다.


다음 사진을 확인해보자











위와같이 파란색 박스의 펼치기를 눌러보면 이벤트 객체가 담고있는 정보가 주르륵 나온다.


이 정보도 매우 유용하게 쓸 수 있고 어떤 정보가 담겨있는지는 직접 콘솔에 띄어  확인해보자.


위의 캡쳐는 펼쳤을 때 정보가 너무 많아 전부 캡쳐하지 못했다.


간단한 영어 단어로 이루어져 있으므로 의미 그대로 받아들이면 된다.













java에서 for문을 사용할 때 ArrayList라던지 값을 한번에 빼는 방법으로


향상된 for문을 사용하여 간편하게 값을 빼냈다.


하지만 아쉽게도 JS에는 향상된 for문이 없고


for each라는 구문이 있다.


forEach는 함수를 인자로 받아 반복할 구문을 실행한다.


그 함수는 두가지의 매개변수가 들어가는데 item(배열의 항목), idx(인덱스, 항목 번호)를 받는다.


이 두가지 매개변수로 반복문을 실행한다.


예제를 확인해보자



<html>
    <head>
        <meta charset="UTF-8">
        <title>반복문</title>
        <link rel="icon" href="img/favicon.ico">
        <style>
            /*css 주석*/
        </style>
        <!--스크립트를 여기에 넣어도 되지만 페이지가 느려지는 등 원인으로 바디 아래에 넣음-->
    </head>
    <body>
        <!--html 주석-->
    </body>
    <script>
        var num = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

        // for 문으로 개별 값 출력
        for(var i = 0; i < num.length; i++){
            console.log(num[i]);
        }

        // For Each 문으로 개별값 출력
        // 배열.forEach(실행 함수 구문);
        num.forEach(function(item, idx){  // 익명함수 활용
            console.log(idx + ", " + item);
        });

        num.forEach(printNum);
        function printNum(item, idx){   // 일반 함수 활용
            console.log("[" + idx + "] " + item);
        }
    </script>
</html>



Shallow Copy는 A가 B에 대입을 하고


A의 값을 바꿨을 때 B의 값도 따라서 변경이 된다.


이 현상은 대입 할 때 A의 값을 그대로 넣는게 아니고


값을 참조하는 것이기 때문이다.


C언어에서 포인터를 배운 사람은 이해가 갈 것이다.



처음 접하는 사람은 이게 무슨 소리인가 하는데


예를 들자면


A의 값이 "한식이, 두식이, 석삼"이 있을 때


각각의 값의 주소가 1번지 2번지 3번지라고 치자


이럴 때 B에게 대입을 하면 "한식이, 두식이, 석삼"을 받는것이 아니고


1번지, 2번지, 3번지를 받아 그 위치에 있는 값을 참조하라는 것이다.


이 문제를 해결하기 위한 방법으로 값을 하나하나 씩 대입하면 된다.


예제를 한번 확인해보자.



<html>
    <head>
        <meta charset="UTF-8">
        <title>배열 통 카피</title>
        <link rel="icon" href="img/favicon.ico">
        <style>
            /*css 주석*/
        </style>
        <!--스크립트를 여기에 넣어도 되지만 페이지가 느려지는 등 원인으로 바디 아래에 넣음-->
    </head>
    <body>
        <!--html 주석-->
    </body>
    <script>
        
        var num = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

        function shallowCopy(){
            var copyNum = num;
            console.log("num : " + num);
            console.log("copyNum : " + copyNum);
            num[0] = 50;
            console.log("num : " + num);
            console.log("copyNum : " + copyNum);
        }
        shallowCopy();
        // 위 코드를 동작하면 num을 나중에 바꾸는데 copy엔 값도 안넣었지만
        // copy도 따라서 변경된다. 이 현상을 shallow copy현상이라고 한다.

        function copyArr(){
            var copy = [];
            // 배열간 복사를 위해서는 값을 하나씩 전달 해야 한다.
            for(var i = 0; i < num.length; i++){
                copy[i] = num[i];
            }
            copy[0] = 99;
            console.log("copy : " + copy);
            console.log("num : " + num);
        }

        copyArr();

    </script>
</html>





콘솔의 결과가 다음과 같이 나온다.


두번째의 결과는 하나하나 씩 대입하여 참조 형식으로 들어가지 않았다.


이 현상은 자기도 모르게 아무 생각없이 대입하여 나오는 실수로


값이 예상과 다르게 나온다면 꼭 의심해보고 주의하여야 한다.


js에서 배열방에 사용할 수 있는 다양한 메소드를 알아보자.


splice는 특정 번호의 방, R 부터 N개의 데이터를 지우고 R번호 부터 데이터를 집어 넣을 수 있다.


slice는 N1번 부터 N2번 까지의 데이터를 반환한다.


split은 java에서 사용하던 split과 똑같이 요소를 특정 단어로 나눠준다.


sort는 정렬기능


reverse는 역정렬


delete는 삭제하여 empty로 비워둠


concat, 배열 합치기


valueOf 배열의 값 반환


join, 배열의 값을 반환할 때 구분자를 추가하여 반환


정렬의 경우 5~10개 까지는 안정적으로 작동한다.


splice의 경우 무슨말인지 모를 수 있는데 예제를 실행하여 결과를 확인해보자



<html>
    <head>
        <meta charset="UTF-8">
        <title>배열 함수</title>
        <link rel="icon" href="img/favicon.ico">
        <style>
            /*css 주석*/
        </style>
        <!--스크립트를 여기에 넣어도 되지만 페이지가 느려지는 등 원인으로 바디 아래에 넣음-->
    </head>
    <body>
        <button onclick="spliceDel()">spliceDel</button>
        <button onclick="spliceAdd()">spliceAdd</button>
        <button onclick="sliceEx()">sliceEx</button>
        <button onclick="splitEx()">splitEx</button>

        <br/><br/><br/>

        <button onclick="sortEx()">sortEx</button>
        <button onclick="reverseEx()">reverseEx</button>
        <button onclick="numberSort()">numberSort</button>

        <br/><br/><br/>

        <button onclick="delEx()">delEx</button>
        <button onclick="concatEx()">concatEx</button>
    </body>
    <script>
        var arr = ["마", "가", "다", "바", "나", "라"]
        /////////////////////////////////////////////// 정말 자주 쓰이는

        // splice를 이용한 요소 삭제
        function spliceDel(){
            console.log(arr);
            arr.splice(2, 2); // 2번 인덱스 포함 2개 삭제
            console.log(arr);
        }

        // splice를 이용한 요소 추가
        function spliceAdd(){
            console.log(arr);
            // 2번 인덱스부터 지울 갯수 0개, 추가할 값...
            arr.splice(2, 0, "C", "D");
            // arr.splice(2, 2, "C", "D"); 지울 갯수를 지정하여 교체형식 지우고 추가 형식도 가능
            console.log(arr);
        }

        //범위 자르기(원본데이터는 보존된다.)
        function sliceEx(){
            numArr = [0,1,2,3,4,5];
            console.log(numArr);
            //1번인덱스 부터 보여주고, 3번부터 버림
            var newArr = numArr.slice(1,3);            
            console.log(newArr);
            console.log(numArr);
        }

        //특정한 구분자로 자르기
        function splitEx(){
            var txt = "D:/img/girlgroup/twice.jpg";
            var depth = txt.split("/");
            console.log(depth);
            //twice.jpg 출력 하기
            console.log(depth[3]);
            console.log(depth[depth.length-1]);
        }

        /////////////////////////////////////////////// 자주 쓰이는

        // 배열 정렬(문자열)
        function sortEx(){
            arr.sort();
            console.log(arr);
        }

        // 배열 역정렬(문자열)
        function reverseEx(){
            arr.reverse();
            console.log(arr);
        }

        // 숫자 정렬(커스터마이징)
        var num = [3, 2, 4, 1, 5];
        function numberSort(){
            // a-b의 값이 -1이라면 바꾼다
            num.sort(function(a, b){return a-b});
            // 역정렬은 return b-a로 주면 된다.
            console.log(num);
        }

        /////////////////////////////////////////////// 잘 안쓰는
        
        // delete, 특정 인덱스를 삭제, 공간을 empty로 비워둠
        function delEx(){
            delete arr[2];
            console.log(arr);
            arr[2] = "new";
            console.log(arr);
        }
        // empty로 비워두면 접근 시 오류가 나기 때문에 쓰는걸 권장하지 않음, 주의가 필요

        // concat, 두개의 배열을 합쳐서 새로운 배열 생성
        function concatEx(){
            var arr1 = [1, 2, 3, 4, 5];
            var arr2 = ['a', 'b', 'c', 'd', 'e'];
            // arr.concat(arr1, arr2);
            var newArr = arr1.concat(arr2);
            console.log(newArr);
        }
        // 쓸 일이 있어 보이지만 구지 쓰지 않는 기능

        /////////////////////////////////////////////// 진짜 안쓰는

        // valueOf
        console.log(arr.valueOf()); // = console.log(arr);
        // 과거 콘솔이 없던 시절에 쓰던 기능

        //join
        console.log(arr.join("@")); // 항목 별 구분자 추가

    </script>
</html>



다차원 배열 역시 전의 java와 내용은 같다.


차이점이라면 선언 시 ()괄호를 안쓰고 전부 [] 를 쓴다.


그리고 java가 7차원 까지 지원한다면


js는 2차원까지만 지원한다.


고로 예제에서는 3차원 부분에 값을 넣으려면 [배열 형태]로 값을 넣어주어야 한다.


[0][0][0]와 같은 3차원 형식으로 사용하면 인식이 안된다.



<html>
    <head>
        <meta charset="UTF-8">
        <title>다차원 배열</title>
        <link rel="icon" href="img/favicon.ico">
        <style>
            /*css 주석*/
        </style>
        <!--스크립트를 여기에 넣어도 되지만 페이지가 느려지는 등 원인으로 바디 아래에 넣음-->
    </head>
    <body>
        <!--html 주석-->
    </body>
    <script>
        // 5층 5호
        var royalApart = [
            // 1층 1~5호
            [1, 2, 3, 4, 5],
            // 2층 1~5호
            [11, 12, 13, 14, 15],
            // 3층 1~5호
            [21, 22, 23, 24, 25],
            // 4층 1~5호
            [31, 32, 33, 34, 35],
            // 5층 1~5호
            [41, 42, 43, 44, 45]
        ];
        // 3층 2호의 값
        console.log(royalApart[2][1]);
        // 2층 2호의 값
        console.log(royalApart[1][1]);
        // 4층 4호의 값
        console.log(royalApart[3][3]);

        // 아파트 1층에 5호, 각 호를 추가
        var apart = []; // 아파트(층과 호가 이 안에 들어감)
        var floor = []; // 층(호가 이 안에 들어감)
        var ho = [0, 0, 0]; // 호 수 (이 안에 방이 3개 있다.)
        // 한 층에 5개 호를 넣는다.
        floor.push(ho);
        floor.push(ho);
        floor.push(ho);
        floor.push(ho);
        floor.push(ho);
        apart.push(floor) // 층을 아파트에 추가
        // 배열 구조 확인 하기
        console.log(apart);

        // 0번 아파트 2층의 각 호를 아이들에게 나눠주자.
        // 자바스크립트는 2차원 배열 까지만 지원
        // 3차원 이상 부터는 새로 배열을 만들어 추가 해야 한다.
        console.log(apart[0][2]);
        apart[0][2] = [1, 2, '이'];
        // apart[0][2][0] = "이" 는 제대로 인식이 안된다.
        console.log(apart[0][2]);

        // 나머지 층도 값을 부여
        apart[0][0] = [1, 2, '영']; 
        apart[0][1] = [1, 2, '일']; 
        apart[0][3] = [1, 2, '삼']; 
        apart[0][4] = [1, 2, '사']; 
    </script>
</html>


+ Recent posts