본문 바로가기

programming/Gukbi

국비 교육 54일차 - JavaScript

728x90
반응형

내가 처음 배운 언어인 자바스크립트를 드디어 수업시간에 배우게 됐다. 그걸 떠나서 자바에서 파생된 언어이기 때문에 자바와 문법이 유사한 부분이 많다. 그래서 당연히 어렵진 않았는데, 변수 사용방법은 이제서야 좀 제대로 머리속에 정리 된거 같다. 

 

<!-- 
	Front-End : 브라우저에 보여주는 부분
		HTML , CSS = 퍼블리셔 
		JavaScript = Front-End
		 1. JavaScript
		 2. 라이브러리 (JQuery, NodeJs(서버사이드), VueJs, ReactJs, TypeScript)
		 			 ======					  =====
		 			 Ajax					  Spring
		 = JavaScript 기본
		  = 외부 스크립트 (재사용:여러파일에 사용) => 확장자 .js
		  = 내부 스크립트 (한개의 파일만 제어) 
		 = JavaScript 특징
		  = 객체기반의 스크립트 언어
		  = 동적이며 타입을 명시하지 않는다 
		  		   =============== 데이터형을 사용하지 않는다 (자동 인식) 
		  		   var : 불명확 (지역변수의 사용 범위가 명확하지 않다) 
		  		   	====> ESMA5.0
		  		   	====> ESMA6.0 => VueJs, ReactJs => 6.0이상
		  		   let : 변수의 사용범위가 명확함
		  		   const : 상수형변수
		  		   
		  		   예)
		  		   	 자바: 정수선언
		  		   	 	  int(long) 변수명=값
		  		   	 	  문자열
		  		   	 	  String 변수명=값
		  		   	 자바스크립트
		  		   	 	  var(let) 변수명=값 	var a=10; var a="Hello"
		  		   	 	  					const a=10;
		  = 인터프리터 (한줄씩 읽어서 출력하는 방식)
		  = 객체지향 프로그램(class사용), 함수형 프로그햄
		    
		 = 자바스크립트가 하는 역할
		  = HTML의 내용, 속성, 스타일을 변경 => selector (css)
		    ========================= DOM
		    = 사용자의 입력값 읽기
		    = 경고
		    = 이미지 변경
		    = 찾은 내용 보여주기
		    = 화면안에서 처리 
		    = 자바 : 데이터 관리 => 데이터 전송
		 = 자바스크립트의 문법 : 자바와 비슷
		  	1. 대소문자 구분
		  	2. 문장 종료 후 ; 사용
		  	3. {} 사용밥
		  	
		 = 처리후 결과값 출력
		 	1. alert() => 다이얼로그창 (모달)
		 	   다이얼로그창 : 모달(다이얼로그창이 사라지기전까지 다른 프로그램 사용이 안된다), 모달레스
		 	2. innerHTML : 태그와 태그 사이에 결과값을 출력할 때 사용 (Ajax)
		 	3. console.log() : dos에 출력
		 	4. document.write() : 브라우저에 출력
		 = 자바스크립트에서 지원하는 데이터형
		 	숫자(Number) var num=10, var num=10.5
		 	문자열(String) var name="Jeno"; var name='jeno';
		 	불린(boolean) var bCheck=true, false;
		 	undefined : var a; => 초기값이 없는 경우 
		 = 문자열 결합 (+)
		 	10+Hello => 10Hello
		 	"2"+"3"  => "23" (X) => 5 => 숫자형 문자열 연산처리 => 숫자형 형변환
		 = 연산자
		 	= 단항연산자
		 		++, --
		 		!
		 		(type) => (int)10.5 => Number("6")
		 							   Boolean(0) => false
		 							   Boolean(1) => true
		 	= 이항연산자
		 	= 삼항연산자
		 		조건 ? 값 : 값
		 			 ==   ==
		 			 true false
		 = 제어문
		  = 조건문
		  = 반복제어문 
		  	= continue/break
		 = 배열
		 	[값, 값, 값...] => 값의 데이터형이 다를 수도 있다
		 	Array(값, 값, 값...)
		 = 객체표현법
		 	{키:값, 키:값...} => JSON
		 = 함수
		 = 라이브러리 사용
 -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script>
// 주석처리
/*
 *  여러줄 주석
 	변수 선언, 출력
 */
 // 메인 
 window.onload=function(){
	var a =10; // 정수(int)
	// 콘솔에 출력
	console.log("a="+a);
	
	var b=10.5; //실수(double)
	console.log("b="+b);
	
	var c="Hello JavaScript!!"; // 문자열 선언
	console.log=("c="+c);
	
	/* let d=["a", "b", 10, 20, 10.5];
	console.log("d="+d); */
	
	let e={namel:"홍길동", sex:"남자", age:30}; // 객체 표현법 (JSON)
	console.log(e);
	
	// 상수형 변수 (const는 값을 변경할 수 없다) => final
	const k=100;
	console.log(k);
	
	console.log(typeof 10);
	
}
</script>
</head>
<body>

</body>
</html>

 내가 처음에 자바스크립트를 배우고 자바를 배워서 데이터형을 좀 불편하게 생각했었는데 오늘 다시 그게 기억 났다. 

js에서는 그냥 var만 써주면 알아서 데이터형을 읽어왔었기 때문에 별 생각없이 그냥 썼던 기억이 있다. 

 

 

여튼 다시 정리를 해보면 

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
window.onload=function(){
	var kor=80;
	var eng=70;
	var math=88;
	var total=kor+eng+math;
	var avg=total/3.0;
	
	console.log("국어점수:"+kor)
	console.log("영어점수:"+eng)
	console.log("수학점수:"+math)
	console.log("총점:"+total)
	console.log("평균:"+avg);
	
	var score='A';
	if(avg>=90)
		score='A';
	else if(avg>=80)
		score='B';
	else if(avg>=70)
		score='C';
	else if(avg>=60)
		score='D';
	else
		score='F';
	
	console.log("학점:"+score);
	
	// 자동 지정 변수 : var을 사용하지 말고 => let(scope가 명확)
	var a=100;
	if(a===100)
	{
	   var b=200;// 사용범위가 명확하지 않기때문에 나중에 문제가 발생할 수 있다	
	   let c=300;// 블록을 벗어나면 사라진다 (권장)
	}// b가 사라져야 한다 
	console.log("b="+b);
	console.log("c="+c);// 사용이 불가능 
}
</script>
</head>
<body>

</body>
</html>

 var는 자동 지정 변수이고,  지역변수 처럼 사라지지 않는다. let은 지역변수로만 사용이 가능하다.

const는 상수변수이기 때문에 한 번 사용하면 다시 사용할 수 없는 특징을 갖는다. 

 

조건문도 마찬가지로 사용할 수 있다. 문법은 비슷한데 js는 프론트에서 사용할 목적으로 만들어진 언어이기 때문에 html 태그들을 어떻게 제어할 것인지에 초점을 두고 살펴봐야 한다. 

 

<!-- 
	제어문
	 조건문 
	  = 단일 조건문
	  if(조건)
	  {
	  	처리 => 조건이 true일 경우에 처리
	  }
	  
	  = 선택 조건문 (true일 경우, false일 경우를 나눠서 처리)
	  if(조건)
	  {
	  	조건 : true일때 처리 
	  }
	  else
	  {
	  	조건 : false일때 처리 
	  }
	  
	  = 다중 조건문 (여러개의 조건중에 해당되는 조건 1개만 수행)
	  if(조건)
	  {
	  	조건 : true일때 처리 ==> 종료
	  }
	  else if(조건)
	  {
	  	조건 : true일때 처리 ==> 종료
	  }
	  else if(조건)
	  {
	  	조건 : true일때 처리 ==> 종료
	  }
	  else
	  {
	  	해당 조건이 없는 경우에 처리하는 문장 ==> 종료
	  }
 -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
window.onload=function(){
	var count=1; //SELECT COUNT(*) FROM member WHERE id='admin';
	if(count===0)
	{
		console.log("ID를 사용할 수 있습니다!!")
	}
	if(count!=0)
	{
		console.log("이미 사용중인 ID입니다!! \n 다시 입력하세요!!")
	}
}

function send()
{
	var id=document.getElementById("id");
	var pw=document.getElementById("pwd");
	var idp=document.getElementById("idp");
	var pwp=document.getElementById("pwp");
	
	if(id.value==="")
	{
		idp.innerHTML="id를 입력하세요";
	}
	else 
	{
		idp.innerHTML="";
	}
	if(pw.value==="")
	{
		pwp.innerHTML="pwd를 입력하세요";
	}
	else 
	{
		pwp.innerHTML="";
	}
}
</script>
</head>
<body>
	<form method=post name=frm>
	ID:<input type=text id=id size=15><br>
	<span id="idp" style="color:red"></span><br>
	PW:<input type=password id=pwd size=15><br>
	<span id="pwp" style="color:red"></span><br>
	<input type=button value="로그인" onclick="send()">
	</form>
</body>
</html>

저 코드를 실행하면 이렇게 뜬다. id와 pwd에 값을 채우지 않고 그냥 로그인 버튼을 누르면 send()라는 함수가 실행되면서 빨간글씨로 필요한 정보들을 입력해달라고 요청이 들어온다. 

 

일단 js는 여기까지 하고.. 영화 프로젝트를 마저 좀 수정을 해야겠다. 

 

강사님이 고쳐두신거 다운받아서 넣으라고 했는데 그러기 싫어서 오늘 수업 끝나고 혼자 고쳐놔야지 하고 생각했었다.

다 완성했다. 

 

사실 오늘 영화 뉴스때문에 xml로 파싱하는 법을 따라해보긴 했는데 말그대로 따라했을뿐 뭔가를 제대로 배우고 이해해서 코드를 쓴게 아니라... 일단은 

 

package com.sist.news;
// http://newssearch.naver.com/search.naver?where=rss&query=영화
import java.util.*;

//import javax.xml.bind.JAXBContext;
//import javax.xml.bind.Unmarshaller;

import java.net.*;
/*
 *   XML , JSON , CSV => 읽어 온다 
 *   기본 => 오라클 
 *   
 *   XML : 스프링은 XML기반 (어노테이션)
 */
import javax.xml.parsers.*;
import org.w3c.dom.*;
public class NewsManager {
   public static void main(String[] args) {
	  NewsManager m=new NewsManager();
	  m.newsListData();
   }
   public List<Item> newsListData()
   {
	   List<Item> list=new ArrayList<Item>();
	   try
	   {
		   String fd="영화";
		   String strUrl="http://newssearch.naver.com/search.naver?where=rss&query="
				         +URLEncoder.encode(fd, "UTF-8");
			/*
			 * JAXBContext jb=JAXBContext.newInstance(Rss.class); System.out.println(jb);
			 * Unmarshaller un=jb.createUnmarshaller(); Rss rss=(Rss)un.unmarshal(new
			 * URL(strUrl)); System.out.println(rss); list=rss.getChannel().getItem();
			 * System.out.println(list);
			 */
		   DocumentBuilderFactory dbf=DocumentBuilderFactory.newDefaultInstance();
		   DocumentBuilder db=dbf.newDocumentBuilder();
		   Document doc=db.parse(strUrl);
		   //System.out.println(doc);
		   Element root=doc.getDocumentElement(); // 전체 태그(rss)
		   System.out.println(root.getTagName());
		   Element channel=(Element)root.getElementsByTagName("channel").item(0);
		   System.out.println(channel.getTagName());
		   
		   NodeList nList=channel.getElementsByTagName("item");
		   for(int i=2;i<50;i++)
		   {  
			   
			   nList=channel.getElementsByTagName("title");
			   String title=nList.item(i).getFirstChild().getNodeValue();
			  
			   nList=channel.getElementsByTagName("description");
			   String description=nList.item(i).getFirstChild().getNodeValue();
			   
			   nList=channel.getElementsByTagName("link");
			   String link=nList.item(i).getFirstChild().getNodeValue();
			   
			   nList=channel.getElementsByTagName("author");
			   String author=nList.item(i).getFirstChild().getNodeValue();
			   //System.out.println(title);
			   
			   Item item=new Item();
			   item.setTitle(title);
			   item.setDescription(description);
			   item.setLink(link);
			   item.setAuthor(author);
			   list.add(item);
		   }
	   }catch(Exception ex){ex.printStackTrace();}
	   return list;
   }
}

 

이 코드를 얼른 이해할 수 있는 날이 와야할텐데.. 걱정이 크다 

728x90
반응형