2016년 7월 26일 화요일

02day Javascript

객체

  • 사용자 정의 객체(JSON)
    • 객체를 정의하는 문법
    • 데이터를 전송하는 규약으로 발전함
      • https://developers.google.com/maps/documentation/geocoding/intro?hl=ko

  • 내장 객체
    • 기본 객체
      • 자료형과 연관된 객체
      • String etc...
    • BOM(browser Object Model)
      • 브라우저 제어와 연관된 객체
    • DOM(Document Object Model)
      • HTML 태그와 연관된 객체
    • 외부 객체
      • 기본적인 객체가 아니라 추가된 객체

1
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
    //객체
    var product1 = {}; //내용없는 객체
    var product2 = {   //멤버변수, 값이 있는 객체
            name: '7D 건조 망고',
            type: '당절임',
            components: '망고, 설탕, 기타',
            region: '필리핀'
    };
    //객체 사용  (생성과 동시에 초기화를 시킴 : 자바와 다르게 new가 없어도 됨)
    console.log(typeof(product2));
    console.log(product2.name);    //속성을 사용
    console.log(product2['type']); //배열과 유사하게 사용
    
    product2.name = '3D 건조 딸기';
    console.log(product2.name);    //속성을 사용
    
    var product3 = product2;  //객체를 할당 //값이 아니라 참조변수형태로 복사됨
    console.log(product3.name);
    product2.name = '3D 건조 메론'; //원래의 값을 바꾸면 참조된 객체의 값도 바뀜
    console.log(product3.name);
    product3.name = '3D 건조 바나나';
    console.log(product2.name);
</script>
</head>
<body>

</body>
</html>


2
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
    //객체
    var product1 = {};
    var product2 = {   //메서드가 있는 객체
            name: '7D 건조 망고',
            type: '당절임',
            components: '망고, 설탕, 기타',
            region: '필리핀',
            eat: function(){
                console.log('맛있게 먹는다');
            },
            test: function(){
                console.log('테스트 한다');
            }
            
    };
    
    product2.eat();  //객체 메서드 사용
    product2.test();
    
    
</script>
</head>
<body>

</body>
</html>


3
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
    //객체
    var product1 = {};
    var product2 = {
            name: '7D 건조 망고',
            type: '당절임',
            components: '망고, 설탕, 기타',
            region: '필리핀',
            eat: function(){
                console.log(this.name + '를 먹는다');  //내부 메서드에서 자신의 객체를 부름
            },
            test: function(){
                console.log('테스트 한다');
            }
            
    };
    
    product2.eat();
    
    
</script>
</head>
<body>

</body>
</html>


4
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
    //객체
    var product = {
            name: '7D 건조 망고',
            type: '당절임',
            components: '망고, 설탕, 기타',
            region: '필리핀',
            eat: function(){
                console.log(this.name + '를 먹는다'); 
            },
            test: function(){
                console.log('테스트 한다');
            }
            
    };
    
    //객체의 구성요소를 확인하고 싶을 때
    var output = '';
    for(var key in product){
        output += '* '+ key + ' : ' + product[key] + '\n';
    };
    console.log(output);
</script>
</head>
<body>

</body>
</html>


5
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
    //in 객체내부 member(=key) 확인하는 키워드
    var student = {
            name: '홍길동',
            kor: 92,
            mat: 98,
            eng: 96,
            sci: 98
    };
    console.log('name' in student);  //name을 문자열 안에 써야함
    console.log('홍길동' in student);  //값은 검색안됨
    console.log('age' in student);
</script>
</head>
<body>

</body>
</html>


6
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
    //with 키워드 : 객체명을 적지 않고 멤버변수들을 사용하도록 함
    var student = {
            name: '홍길동',
            kor: 92,
            mat: 98,
            eng: 96,
            sci: 98
    };
    var output = '';
    
    with(student){
        output += '이름 : ' + name + '\n';
        output += '국어 : ' + kor + '\n';
        output += '수학 : ' + mat + '\n';
        output += '영어 : ' + eng + '\n';
        output += '과학 : ' + sci + '\n';
    };
    console.log(output);
</script>
</head>
<body>

</body>
</html>


7
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<script type="text/javascript">
    //동적추가 : 객체를 만들고나서 객체안의 멤버를 추가 할 수 있음
    var student = {};
    student.name = '홍길동';  //멤버변수 추가
    student.hobby = '악기';
    student.spec = '프로그래밍';
    student.hope = '생명과학자';
    student.toString = function(){  //메서드 추가
        var output = '';
        for(var key in this){
            if(key != 'toString'){  //자신 toString 메서드를 제외하고 멤버를 출력함
                output += '* '+ key + ' : '+this[key]+'\n';
            }
        }
        return output;
    }
    
    console.log(student.toString());
    
    //동적 제거  --따로 함수를 제공함
    delete(student.hope);
    console.log(student.toString());
    
</script>
</body>
</html>


8
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<script type="text/javascript">
    //생성자 함수 : new 키워드를 사용해 객체를 생성할 수 있도록 하는 함수
    function Student(name,kor,mat,eng,sci){
        //함수안에 클래스의 동적생성과 초기화가 들어가 있음
        this.name = name;
        this.kor = kor;
        this.mat = mat;
        this.eng = eng;
        this.sci = sci;
        
        this.getSum = function(){
            return this.kor + this.mat + this.eng + this.sci;
        };
        this.getAvg = function(){
            return this.getSum()/4;  //객체안의 다른 메서드 호출
        }
    }    
    
    //객체생성과 사용
    var stu1 = new Student('홍길동',96,98,92,98); 
    console.log(typeof(stu1));
    console.log(stu1.name + ' : '+ stu1.kor);
    console.log(stu1.getSum());
    console.log(stu1.getAvg());
</script>

</body>
</html>


9
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<script type="text/javascript">
    function Student(name,kor,mat,eng,sci){
        this.name = name;
        this.kor = kor;
        this.mat = mat;
        this.eng = eng;
        this.sci = sci;
    }    
    //프로토타입 -- 자바에서 static멤버와 비슷한 역할을 함
    //객체가 공통으로 소유하기때문에 생성할 때마다 만들지 않음
    Student.prototype.getSum = function(){
        return this.kor + this.mat + this.eng + this.sci;
    };
    Student.prototype.getAvg = function(){
        return this.getSum()/4;
    };
    Student.prototype.toString = function(){
        return this.name + '\t'+this.getSum() + '\t' + this.getAvg();
    };

    
    //객체생성과 사용
    var stu1 = new Student('홍길동',96,98,92,98); 
    console.log(stu1.toString());
    var stu1 = new Student('박문수',80,98,92,98); 
    console.log(stu1.toString());
</script>

</body>
</html>


10
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<script type="text/javascript">
    function Student(name){
        this.name = name;
    }
    var stu = new Student('박문수');
    
    //객체의 클래스를 확인
    console.log(stu instanceof Student); //true
    console.log(stu instanceof Number);
    console.log(stu instanceof String);
    console.log(stu instanceof Object);  //true 상속
</script>

</body>
</html>


11
/*캡슐화: 접근제어자가 있지만 의미는 약함*/
/*상속: 라이브러리를 만들지 않는 이상 쓸일이 거의 없음
        base 속성에 생성자 함수 Rectangle을 넣고 실행한 것 */


12

<html>
<head>

<title>Insert title here</title>
</head>
<body>

<script type="text/javascript">
 //object 내장객체에 hasOwnProperty( ) 메서드와 propertyIsEnumerable( ) 메서드
 var object = {property : 273};

 var output1 = '';
 output1 += object.hasOwnProperty('property') + '\n';  //속성이 있는지 검사
 output1 += object.hasOwnProperty('constructor') + '\n';
 output1 += object.propertyIsEnumerable('property') + '\n'; //반복문으로 열거할 수 있는지 검사
 output1 += object.propertyIsEnumerable('constructor') + '\n';
 console.log(output1);
 
 var output2= '';
 for(var key in object){
  output2 +='* '+ key + ' : '+ object[key]+ '\n';  //constructor는 열거할 수 없어서 출력 안됨
 }
 console.log(output2);
</script>

</body>
</html>


13
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<script type="text/javascript">
    //toString() 메서드 -- 객체를 문자열로 변환
    var object = new Object();
    console.log(object);
    console.log(object.toString());
</script>
</body>
</html>


14
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<script type="text/javascript">
    //Number 객체: 숫자를 표현하는 객체
    var numberFromLiteral = 273;
    var numberFromConstructor = new Number(273);
    
    console.log(numberFromLiteral);
    console.log(numberFromConstructor);
    
</script>
</body>
</html>


15
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<script type="text/javascript">
    //Number객체 메서드 toFixed() : 소수점표시
    var number = 273.5210332;
    
    var output = '';
    output +=number.toFixed(1) +'\n';
    output +=number.toFixed(4);
    console.log(output);
    
    console.log((273.5210332).toFixed(2));
    
</script>
</body>
</html>


16
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<script type="text/javascript">
    //String객체 HTML관련 메서드
    var str1 = "Hello world";
    console.log(str1);
    console.log(str1.bold());
    document.write(str1.bold() + '<br>');  //<b>태그로 감쌈
    document.write(str1.link('http://www.naver.com')); //<a href>태그로 감쌈
</script>
</body>
</html>



17
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<script type="text/javascript">
    //Array객체 메서드
    var arr1 = new Array(10,20,30,40);
    var arr2 = new Array(5,6,7,8);
    
    var arr3 = arr1.concat(arr2);  //concat 배열을 하나로 합침
    console.log(arr3);
    
    var str1 = arr1.join();  //join 배열안의 모든 요소를 문자로 만들어 리턴
    console.log(str1);
    var str2 = arr1.join('|');  //join 구분자 넣어줌
    console.log(str2);
    
    var subarr1 = arr1.pop(); //pop 배열의 마지막 요소를 삭제하고 뽑아냄
    console.log(subarr1);
    console.log(arr1);
    
    var subarr2 = arr1.push(5); //push 데이터를 넣음
    console.log(subarr2);
    console.log(arr1);
    
    var revarr1 = arr1.reverse();  //reverse 배열을 거꾸로
    console.log(revarr1);
    
    var array = [52, 273, 103, 32]; //sort() 정렬함
    array.sort()
    console.log(array);
    array.sort(function(left,right){  //오름차순 정렬
        return left-right;  
    })
    console.log(array);    
    array.sort(function(left,right){  //내림차순 정렬
        return right-left; 
    })
    console.log(array);
    
</script>

</body>
</html>


18
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<script type="text/javascript">
    //Array객체 splice로 특정요소 제거 메서드 만듦
    var array = [52, 273, 103, 32, 274, 129]
    
    Array.prototype.remove = function(index){  //remove메서드 만듦
        this.splice(index,1);
    };
    
    //100보다 큰 요소를 제거
    for (var i= array.length; i>=0; i--){  //인덱스 번호유지위해 뒤에서 부터 지움
        if(array[i]>100){
            array.remove(i);
        }
    };
    console.log(array);
    
</script>

</body>
</html>


19
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<script type="text/javascript">
    //Date 객체
    var date = new Date();
    console.log(date);  //객체를 출력
    console.log(date.toString());
    
    var date2 = new Date(1999,1,1,2,30,0);  //매개변수 넣어서 생성
    console.log(date2.toString());
    
    console.log(date.getFullYear());
    console.log(date.getYear() + 1900);
    console.log(date.getMonth() + 1);  //달은 0부터 시작
    console.log(date.getDate());
    console.log(date.getDay());  //요일  월요일이 1
    
    console.log(date.toLocaleString());  //시간을 한글형식으로 표시
    
    //getTime()은 1970.1.1 기준으로 밀리세컨드를 표기
    var now = new Date();
    var before = new Date('December 9, 1999'); //new Date(1999, 12-1, 9);
    //날짜 간격
    var interval = now.getTime() - before.getTime();
    interval = Math.floor(interval/(1000*60*60*24));
    console.log(interval+'일')
    
</script>

</body>
</html>


20
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<script type="text/javascript">
    //날짜 간격메서드를 프로토타입으로 지정
    Date.prototype.getInterval = function(otherDate){
        var interval;
        if(this>otherDate){
            interval = this.getTime() -otherDate.getTime();
        }else{
            interval = otherDate.getTime() -this.getTime();
        }
        return Math.floor(interval/(1000*60*60*24));
    };
    
    var now = new Date();
    var before = new Date(1999,12-1,9);
    console.log('간격 : '+ now.getInterval(before)+'일');
</script>

</body>
</html>


21
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<script type="text/javascript">
    //배열인지 확인
    console.log(Array.isArray([1,2,3]));
    console.log(Array.isArray({}));
    console.log(Array.isArray(1));
    //배열 탐색
    var array = [1,2,3,4,5,5,4,3,2,1];
    console.log(array.indexOf(4));
    console.log(array.indexOf(8));
    console.log(array.lastIndexOf(4));
    console.log(array.lastIndexOf(8));
</script>

</body>
</html>


22
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<script type="text/javascript">
    //for문의 빈도가 높기 때문에 함수로 만들어둠 -- 데이터를 하나씩 읽음
    var array = [1,2,3,4];
    array.forEach(function(element, index, array) {
        console.log(element);
        console.log(index);
        console.log(array);
    });
    
    // 배열의 요소 합
    var sum = 0;
    array.forEach(function(element, index, array) {
        sum +=element;
    });
    console.log('합계 : '+ sum);
    
    //filter : forEach를 내장하고 있음
    array = array.filter(function(element,index,array){
        return element <=2;
    });
    console.log(array);
</script>

</body>
</html>


23
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<script type="text/javascript">
    //array 객체 map() : 기존의 배열에 새로운 규칙을 적용하여 배열을 만듦
    var array = [1,2,3,4,5,6,7,8,9,10];
    var output =array.map(function(element){
        return element * element;
    });
    console.log(output);
</script>

</body>
</html>


24
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<script type="text/javascript">
    var object = {
            name: '홍길동',
            gender: 'Male'
    };
    
    //JSON 객체 stringify() 객체를 문자열로 반환
    var str = JSON.stringify(object);
    console.log(str);
    console.log(typeof(str));
    //parse() JSON 문자열을 객체로 반환  //eval과 비슷한 기능
    var object2 = JSON.parse(str);
    console.log(object2.name);
    console.log(typeof(object2));
</script>

</body>
</html>


25
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
    table{border: 1px solid black; border-collapse: collapse;}
    td{border: 1px solid black;}
</style>
</head>
<body>

<script type="text/javascript">

document.write('<h2>로또번호</h2>');
document.write('<table>');
for (var i=1; i<6;i++){
    document.write('<tr>');
    document.write('<td>'+i+'번째 </td>');
    //배열을 생성하고 중복되지 않게 1~45 랜덤값을 넣는다
    var array = new Array();
    while(array.length<=5){
        var cast = Math.ceil(Math.random()*45);
        if(array.indexOf(cast)==-1){
            array.push(cast);    
        }
    }
    //배열 요소를 추출하여 태이블로 만듦
    for(var j=0;j<6;j++){
        document.write('<td>'+array[j]+'</td>');
    }
    document.write('</tr>');
}
document.write('</table>');
</script>

</body>
</html>


2016년 7월 25일 월요일

01day Javascript

client program
  • URL
  • html/css/javascript => rendering

server program
  • tomcat
    • 실제 서비스 :  window +(JDK) + tomcat
      : standalone 방식
      : 리부팅 tomcat 자동실행 스크립트 --설정 안하면 AS하러 가야함
    • 개발용  서버: 개발용 IDE +tomcat
      : 이클립스 등등에서 tomcat을 실행
      : 이클립스는 서버설정을 복사해서 가지고옴
      : 이클립스를 거치지 않고 실서버를 실행하면 다른 설정을 따름
    • 서비스와 개발용 서버를 동시에 띄울 수 없음

1. 개발용 서버 설정
서버 정의하기 -- 이클립스 버전에 따라서 톰캣지원 버전이 다름
톰캣 conf파일이 이클립스 server파일에 복사됨
두가지가 다른 설정을 따르므로 이클립스에서 서버를 실행한 뒤 브라우저상에서
test.html 파일을 열수 없음 ( 실 서버를 실행해야 함)

프로젝트를 만들떄 dynamic web project로 만들어야함
이 프로젝트 이름이 웹브라우저 상에서 주소에 포함됨
html 문서를 만들때 기본 템플릿을 지원함
설정이 EUK-KR로 되어있기 때문에 기본설정을 UTF-8로 바꿔줘야함
UTF-8로 바꿈



2. 저장위치
http://localhost : 컴퓨터
http://localhost:8080 : tomcat

  • WebEx01/ex01.html
    • C:\java\workspace\WebEx01\WebContent\ex01.html (실제 디렉토리)
  • WebEx01/dir1/ex02.html
    • C:\java\workspace\WebEx01\WebContent\dir\ex01.html 


3.
HTML
  • 문서의 틀
CSS
  • 문서의 디자인
Javascript
  • 동적효과
    • 디자인/ 기능
    • 점점 확대 되는 추세
  • 유럽 컴퓨터 제조 협회(European Computer Manufacturer’s Association)는 자바스크립트를 ECMAScript라는 이름으로 표준화
  • V8 자바스크립트 엔진(V8 JavaScript Engine)은 구글에서 개발된 오픈 소스 JIT 가상 머신형식의 자바스크립트 엔진이며 구글 크롬 브라우저와 안드로이드 브라우저에 탑재되어 있다.
자바스크립트 해석 엔진 -브라우저
  • 클라이언트 자바스크립트
    • 기존의 자바스크립트
    • 브라우저 없이 쓸수 있음
    • => framework (이미 짜둔것을 활용) : jQuery , D3.js(빅데이터용 자바스크립트)
    • 웹은 애플리케이션의 모습에 점점 가까워짐
      • 대표적인 예는 구글문서 작성 도구
      • 구글 웹스토어의 게임 : 브라우서상에서 javascript로 게임을 짬
  • 서버 자바스크립트
    • node.js
    • 현대 웹언어를 대표함(cafe24에서 호스팅제공), 데이터베이스와 연동됨



4. Javascript
<script>자바스크립트 기술 </script>

  • <head>~</head> : 선언의 의미
  • <body>~</body> : 실행의 의미
  • 외부파일로 독립시키는 것도 가능함
*문자열 : ""/ ' '  상관없음
*document.write("출력내용");
*document.write('출력내용');

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<script type="text/javascript">
    document.write('Hello JS');
</script>
</body>
</html>

/**
 * 
 */
document.write('Hello JS');

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<script type="text/javascript" src="default.js"></script>
<script type="text/javascript">
    document.write('Hello JS');
</script>
</body>
</html>



5
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<script type="text/javascript">
    //document.write('Hello JS');
    document.write('Hello JS<br/>')  //document.write 출력 결과는 HTML이다
    document.write('<b>Hello JS</b><br/>');
</script>
</body>
</html>


6
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
    td {border: 1px solid red;}  /* 스크립트 안에있는 html 코드에 css적용 가능함 */
</style>
</head>
<body>
<script type="text/javascript">
    document.write('<table>')  
    document.write('<tr>')  
    document.write('        <td>Hello JS</td>');
    document.write('        <td>Hello JS</td>');
    document.write('</tr>')  
    document.write('</table>') 
</script>
</body>
</html>


7
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<script type="text/javascript">
    //디버깅 용 -- 윈도우 창에 출력되지는 않지만 개발자도우에 console에서 볼 수 있음
    console.log('Hello JS');
</script>
</body>
</html>


8
자료
제어문

  • 메서드 -> 함수 (클래스 밖의 메서드) : function
  • 클래스(JSON - Javascript object notation 클래스를 선언 할 때 사용함)
    • 메서드

변수선언

  • var (varient) : 가변형 (자동적으로 데이터형을 정하는 타입)

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<script type="text/javascript">
    //변수 선언 var 지워도 상관없음
    var num1 = 10;
    num2 = 20;
    
    console.log(num1);
    console.log(num2);
</script>
</body>
</html>

9
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<script type="text/javascript">
    //자료형을 볼때 typeof 사용 ---함수가 아니고 연산자임
    console.log(typeof ('String'));
    console.log(typeof (273));
    console.log(typeof (true));
    console.log(typeof (function(){}));
    console.log(typeof ({}));
    console.log(typeof (alpha));
</script>
</body>
</html>


10
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<script type="text/javascript">
    //변수의 재선언이 가능함
    var var1 = "Hello JS1";
    var var1 = "Hello JS2";
    var var1 = "Hello JS3";
    
    console.log(var1);
</script>
</body>
</html>


11. 형변환 : 함수를 사용
숫자로 형변환

  • Number()
  • parseInt()
문자로 형변환
  • String()
  • ""+

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<script type="text/javascript">
    //형변환
    var num1 = Number('123abc');
    console.log(typeof(num1));
    console.log(num1);  //Number는 알파벳문자를 숫자로 바꿀 수 없음
    
    var num2 = parseInt('123abc');
    console.log(typeof(num2));
    console.log(num2);  //parseInt는 문자를 제외하고 숫자로 바꿈
    
</script>
</body>
</html>

**NaN(Not a Number) 값 출력 : 숫자가 아닌 값 입력 시
**Nan은 자료형 숫자이나 자바스크립트로 나타낼 수 없는 숫자 (ex 복소수)


12
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<script type="text/javascript">
    //형변환 Boolean
    //아래 다섯 가지를 제외한 모든 경우 true로 변환
    console.log(Boolean(0));
    console.log(Boolean(NaN));
    console.log(Boolean(''));
    console.log(Boolean(null));
    console.log(Boolean(undefined));
</script>
</body>
</html>


13
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<script type="text/javascript">
    //비교연산자
    console.log('' == false);
    console.log('' == 0);
    console.log(0 == false);
    console.log('273' == 273);
    
    //일치 연산자 ===는 값,자료형 일치여부를 둘다 검사
    console.log('' === false);
    console.log('' === 0);
    console.log(0 === false);
    console.log('273' === 273);
</script>
</body>
</html>


14
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<script type="text/javascript">
    //조건문
    var hakjum = 85;
    if (hakjum >= 90){
        console.log('A');
    }else if(hakjum >= 80){
        console.log('B');
    }else if(hakjum >= 70){
        console.log('C');
    }else if(hakjum >= 60){
        console.log('D');
    }else{
        console.log('F');
    }
</script>
</body>
</html>


15
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
    /*css꾸미기*/
    table{border: 1px solid black; border-collapse: collapse;}
    td{border: 1px solid black;}
</style>
</head>
<body>
<script type="text/javascript">
    //반복문 구구단
    document.write("<table>");
    for(var i=1; i<10; i++){
        document.write("<tr>");
        for(var j=1;j<10;j++){
            document.write("<td>"+i+"X"+j+"="+i*j+"</td>");
        }
        document.write("</tr>");
    }
    document.write("</table>");

</script>
</body>
</html>


16
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<script type="text/javascript">
    //배열
    var arr = [10,20,30,40];
    //배열 데이터 확인 for
    for(var i=0;i<arr.length;i++){
        console.log(arr[i]);
    }
    //향상된 for in
    for(var i in arr){
        console.log(arr[i]);
    }

</script>
</body>
</html>


17
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
    //함수 선언부
    function fun1(){
        console.log('Hello Function');
    }
    function fun2(data1, data2){  //매개변수 있음
        console.log("data1 :" + data1);
        console.log("data2 :" + data2);
    }
</script>
</head>
<body>
<script type="text/javascript">
    //함수 실행부
    fun1();
    fun1();
    
    fun2(10,20);
    fun2(10);  //매개변수 없어도 실행이 됨
    fun2();    //매개변수 없어도 실행이 됨 →오버로딩이 안됨
</script>
</body>
</html>


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
    //함수 선언부
    function fun2(data1, data2){
        if(data1 == undefined || data2 == undefined){  //undefined 검사
            console.log("입력 데이터가 없습니다.");
        }else{
            console.log("data1 :" + data1);
            console.log("data2 :" + data2);
        }
    }
    //리턴이 있는 함수 (자바와 달리 자료형태를 앞에 기술하지 않음)
    function fun3(data1, data2){
        return data1+ data2;
    }
</script>
</head>
<body>
<script type="text/javascript">
    
    fun2(10,20);
    fun2(10);
    fun2();
    //리턴함수 실행
    var return1 = fun3(10,50);
    console.log(return1);
</script>
</body>
</html>


18
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
    //선언함수 : 일반적 함수 선언
    function fun1(){
        console.log('Hello function');
    }
    //익명함수
    var fun2 = function(){
        console.log('Hello function');
    }
</script>
</head>
<body>
<script type="text/javascript">
    fun1();
    fun2();
    
    console.log(typeof(fun1))
    console.log(typeof(fun2))
    
    var fun3 = fun1; //함수 할당이 가능함
    fun3();
    var fun4 = fun2; //함수 형태 변수는 다른함수의 인자, 리턴으로 사용가능
    fun4();
</script>
</body>
</html>


19
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
    var callback = function(){
        console.log("함수 호출");
    }
    var callTenTimes = function(call1){ //함수를 매개변수로 받을 수 있음
        for(var i =0; i<10; i++){
            call1();
        }
    }
</script>
</head>
<body>
<script type="text/javascript">
    callTenTimes(callback);      
</script>
</body>
</html>


20
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
    var rFunction = function(){  //함수를 리턴하는 함수
        return function(){
            console.log("call function");
        }
    }
</script>
</head>
<body>
<script type="text/javascript">
    //함수리턴함수의 실행
    var res = rFunction();
    res();
    //짧은 코드
    rFunction()();
</script>
</body>
</html>


21
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
    //매개변수를 쓰지 않아도 배열로 들어감
    var sumAll = function(){
        //argument : 베열 데이터
        console.log(arguments.length);
        for(var i in arguments){
            console.log("데이터 : " + arguments[i]);
        }
    }
</script>
</head>
<body>
<script type="text/javascript">
    sumAll(1);
    sumAll(1,2,3);
</script>
</body>
</html>


22
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
    function outer(){
        function inner1(){
            console.log('inner1() 호출')
        }
        function inner2(){
            console.log('inner2() 호출')
        }
        inner1();
        inner2();
    }
</script>
</head>
<body>
<script type="text/javascript">
    outer();
</script>
</body>
</html>


23
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<script type="text/javascript">
    //내장함수 - Window 객체 메서드 - 함수접근 가능
    //alert('경고창');
    confirm('확인창');
</script>
</body>
</html>


24
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<script type="text/javascript">
    //인코딩 함수
    var str = '스타워즈';
    var eStr = encodeURIComponent(str);
    
    console.log(eStr);
    console.log(decodeURIComponent(eStr));  //디코딩
    
</script>
</body>
</html>


25
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<script type="text/javascript">
    //eval 함수  --문자열을 해석해서 실행
    var expr = "2 + 3";
    console.log(expr);
    console.log(eval(expr));
    
    var expr2 = "";
    expr2 += "var num =10;";
    expr2 += "alert(num);";
    
    eval(expr2);
    
    
</script>

</body>
</html>


01day java practice

1.움직이는 버튼 만들기

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JButton;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Timer;
import java.util.TimerTask;

public class Test2 extends JFrame {

    JButton btnNewButton;
    
    private JPanel contentPane;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Test2 frame = new Test2();
                    frame.setVisible(true);                
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public Test2() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);
        
        btnNewButton = new JButton("New button");
        btnNewButton.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseEntered(MouseEvent e) {
                int x = (int)(Math.random()*300);
                int y = (int)(Math.random()*200);
                System.out.println(x+"//"+y);
                Timer timer = new Timer(true);
                timer.scheduleAtFixedRate(new TimerTask() {
                    //execute this every 10 ms
                    @Override
                    public void run() {
                        if(btnNewButton.getX() == x & btnNewButton.getY() == y) {
                            this.cancel();
                        }else if(btnNewButton.getX()<x){
                            btnNewButton.setLocation(btnNewButton.getX() + 1, btnNewButton.getY());
                        }else if(btnNewButton.getX()>x){
                            btnNewButton.setLocation(btnNewButton.getX() - 1, btnNewButton.getY());
                        }else if(btnNewButton.getY()<y){
                            btnNewButton.setLocation(btnNewButton.getX(), btnNewButton.getY()+1);
                        }else if(btnNewButton.getY()>y){
                            btnNewButton.setLocation(btnNewButton.getX(), btnNewButton.getY()-1);
                        }
                    }
                }, 0, 1);
            }
        });
        btnNewButton.setBounds(100, 100, 113, 36);
        contentPane.add(btnNewButton);
    }
}


2.인스턴스 생성될 때 마다 시리얼넘버 부여
public class Test1 {
    static int count;
    int serialNo;
    {
        count++;
        serialNo=count;
    }
    
    public static void main(String[] args) {
        Test1 t1 = new Test1();
        Test1 t2 = new Test1();
        Test1 t3 = new Test1();
        Test1 t4 = new Test1();
        System.out.println(t1.serialNo);
        System.out.println(t2.serialNo);
        System.out.println(t3.serialNo);
        System.out.println(t4.serialNo);
    }
}


3. 변수 초기화 순서
public class Test1 {
 static int cv =1;  //스태틱 변수   ----1 번째: 클래스가 메모리에 로딩될 떄 수행됨
 int iv =1;         //인스턴스 변수 ----3 번째: 인스턴스를 생성할 때 수행됨
 
 static{ cv=2;}     //스태틱 블럭   ----2 번째: 클래스가 메모리에 로딩될 떄 수행됨
 { iv=2;}           //인스턴스 블럭 ----4 번째: 인스턴스를 생성할 때 수행됨
 
 Test1(){ iv=3; }   //생성자        ----5 번째: 인스턴스를 생성할 때 수행됨
 
 public static void main(String[] args) {
  System.out.println(cv);  //스태틱 변수는 인스턴스 생성하지 않아도 프린트 할 수 있음
  System.out.println(new Test1().iv); //인스턴스 변수는 인스턴스를 생성해야 프린트 가능함
 }
}


4
//참조변수가 참조하는 방식
class Test0{
 static int cv =1;      //스태틱 변수
 int iv =1;             //인스턴스 변수
 static{ cv=2;}         //스태틱 블럭 
 { iv=2;}               //인스턴스 블럭 
 
 Test0(){ iv=3; }      //생성자 
 
 static void method1(){     //스태틱 메서드
  System.out.println("static method1");
 }
 void method2(){      //인스턴스 메서드
  System.out.println("instance method2");
 }
 void method3(){}
}

class Test0son extends Test0{
 static int cv =100;      //스태틱 변수
 int iv =100;             //인스턴스 변수
 static{ cv=200;}         //스태틱 블럭 
 { iv=200;}               //인스턴스 블럭 
 
 Test0son(){ iv=300; }      //생성자 
 
 static void method1(){     //스태틱 메서드
  System.out.println("static method1 son");
 }
 void method2(){      //인스턴스 메서드
  System.out.println("instance method2 son");
 }
 void method3(){
  System.out.println("super cv= "+super.cv);
  System.out.println("super iv= "+super.iv);
  System.out.print("super method1= ");
  super.method1();
  System.out.print("super method2= ");
  super.method2();
 }
}

public class Test1 {
 
 public static void main(String[] args) {
  Test0.method1();
  Test0son.method1();
  new Test0().method2();
  new Test0son().method2();
  System.out.println(Test0.cv);
  System.out.println(Test0son.cv);
  System.out.println(new Test0().iv);
  System.out.println(new Test0son().iv);
  System.out.println();
  
  Test0 ts0_ts0 = new Test0();
  Test0 ts0_ts0son = new Test0son(); //참조변수를 부모클래스로 설정
  ts0_ts0.method1();
  ts0_ts0son.method1();   //스태틱 메서드는 참조변수를 따름
  ts0_ts0.method2();
  ts0_ts0son.method2();   //인스턴스 메서드는 ★★★★★인스턴스를 따름
  System.out.println(ts0_ts0.cv);
  System.out.println(ts0_ts0son.cv); //스태틱 변수는 참조변수를 따름
  System.out.println(ts0_ts0.iv);
  System.out.println(ts0_ts0son.iv);  //인스턴스 변수는 ★★★★★참조변수를 따름
  System.out.println();
  
  ts0_ts0son.method3();  //부모의 인스턴스 메서드를 부를 수 있음(super 사용)
      //인스턴스 메서드가 부모를 override하지만 super 통해 부를 수 있음
 }
}


5
//형변환으로 숨겨진 변수 불러오기
class Test0{
 static int cv =1;      //스태틱 변수
 int iv =3;             //인스턴스 변수
 
 static void method1(){     //스태틱 메서드
  System.out.println("static method1");
 }
 void method2(){      //인스턴스 메서드
  System.out.println("instance method2");
 }
}

class Test0son extends Test0{  //상속
 static int cv =100;      
 int iv =300;             
 
 static void method1(){     
  System.out.println("static method1 son");
 }
 void method2(){      
  System.out.println("instance method2 son");
 }
}

public class Exam01 {
 
 public static void main(String[] args) {
  Test0son ts1 = new Test0son();
  ts1.method1();
  ((Test0)ts1).method1();  //형변환으로 부모의 스태틱 메서드 부름
  ts1.method2();
  ((Test0)ts1).method2();  //오버라이드 된 부모의 인스턴스메서드를 불러올 수 없음★★★★
  System.out.println(ts1.iv);
  System.out.println(((Test0)ts1).iv); //형변환으로 부모의 인스턴스 변수 부름
  System.out.println(ts1.cv);
  System.out.println(((Test0)ts1).cv); //형변환으로 부모의 스태틱 변수 부름

  Test0 ts0 = new Test0son();
  ts0.method1();
  ((Test0son)ts0).method1();  //형변환을 통해 자식의 스태틱 메서드를 호출 할 수 있음
  ts0.method2();
  ((Test0)ts0).method2();     //오버라이드 된 부모의 인스턴스메서드를 불러올 수 없음
  ((Test0son)ts0).method2();   
  
  System.out.println(ts0.cv);
  System.out.println( ((Test0son)ts0).cv); //형변환으로 자식의 스태틱 변수 부름
  System.out.println(ts0.iv);
  System.out.println( ((Test0son)ts0).iv); //형변환으로 자식의 인스턴스 변수 부름
  System.out.println();
  
 }
}