728x90
반응형
728x90
반응형

함수예고(함수=수납상자)

nightDayHandler(){} 함수를 정의함으로써 긴 코드의 길이를 줄일 수 있습니다.


함수

BASIC

코드가 반복되어야 하는 경우 반복문을 처리해 사용하면 되지만 연속적으로 반복해야 하는 경우가 아니라면 반복문을 사용할 수 없게 됩니다. 이때 함수를 사용해 해결할 수 있습니다.

<h1>Function</h1>

 <h2>Basic</h2>

 <ul>

      <script>

        function two(){

          document.write('<li>2-1</li>');

          document.write('<li>2-2</li>');

        }

        document.write('<li>1</li>');

        two();

        document.write('<li>3</li>');

        two();

      </script>

</ul>

Parameter & Argument 함수 입력부분이 파라미터


<h2>Parameter & Argument</h2>

    <script>

      function onePlusOne(){

        document.write(1+1+'<br>');

      }

      onePlusOne();

      function sum(left, right){  //left, right를 매개변수 parameter

        document.write(left+right+'<br>');

      }

      sum(2,3); //5 2,3을 인자 argument라 합니다.

      sum(3,4); // 7

    </script>

Return 함수 출력부분은 리턴

<h2>Return</h2>

    <script>

      function sum2(left, right){

        return left+right;

      }

      document.write(sum2(2,3)+'<br>');

      document.write('<div style="color:red">'+sum2(2,3)+'</div>');

      document.write('<div style="font-size:3rem;">'+sum2(2,3)+'</div>');

    </script>

 

함수의 활용

함수를 호출할 때 인자로 this를 주면 nightDayHandler(self)함수 내에 포함되어 있는 input태그 자체가 인자로 함수에 전달됩니다. 함수는 self라는 파라미터로 인자로 전달받게 되고 self라는 값은 함수를 호출한 input태그가 됩니다. 따라서 클릭을 함으로 value night day로 변경이 됩니다. 

WEB

  1. HTML
  2. CSS
  3. JavaScript

WEB

  1. HTML
  2. CSS
  3. JavaScript

객체예고

객체는 변수와 함수를 정리정돈하기 위한 도구

function LinksSetColor(color){ //a태그 전체의 색을 변경

    var alist = document.querySelectorAll('a');

    var i = 0;

    while(i < alist.length){

      alist[i].style.color = color;

      i = i + 1;

    }

  }

  function BodySetColor(color){ //바디태그의 글씨색을 변경

    document.querySelector('body').style.color = color;

  }

  function BodySetBackgroundColor(color){ //바디태그의 배경색을 변경

    document.querySelector('body').style.backgroundColor = color;

  }

  function nightDayHandler(self){

    var target = document.querySelector('body');

    if(self.value === 'night'){

      Body.setBackgroundColor('black');

      Body.setColor('white');

      self.value = 'day';

      Links.setColor('powderblue');

    } else {

      Body.setBackgroundColor('white');

      Body.setColor('black');

      self.value = 'night';

      Links.setColor('blue');

    }

}

객체를 만들지 않았기 때문에 함수는 동작하지 않습니다.

 

객체(object)

객체의 쓰기와 읽기

<h1>Object</h1>

    <h2>Create</h2>

    <script>

      var coworkers = {

        "programmer":"egoing",

        "designer":"leezche"

      };

      document.write("programmer : "+coworkers.programmer+"<br>");

      document.write("designer : "+coworkers.designer+"<br>");

      coworkers.bookkeeper = "duru";

      document.write("bookkeeper : "+coworkers.bookkeeper+"<br>");

      coworkers["data scientist"] = "taeho";

      document.write("data scientist : "+coworkers["data scientist"]+"<br>");

    </script>

객체와 반복문

<h2>Iterate</h2>

<script>

    for(var key in coworkers) {

      document.write(key+' : '+coworkers[key]+'<br>');

    }

</script>

프로퍼티와 메소드(자바스크립트에서 객체는 함수도 담을 수 있습니다.)

<h2>Property & Method</h2>

    <script>

      coworkers.showAll = function(){

        for(var key in this) {

          document.write(key+' : '+this[key]+'<br>');

        }

      }

      coworkers.showAll();

    </script>

showAll함수 안에서 소속된 객체를 가리키는 약속된 기호를 this 

객체의 소속된 변수에 값으로 함수를 만들 수 있습니다.

객체의 소속된 함수를 메소드, 객체의 소속된 변수를 프로퍼티 


체 활용

WEB

  1. HTML
  2. CSS
  3. JavaScript

JavaScript

WEB

  1. HTML
  2. CSS
  3. JavaScript

JavaScript

파일로 쪼개서 정리 정돈하기

수정하고자 하는 코드를 변경하면 코드가 실행되지만 여러 개의 코드가 있는 경우 각각의 코드를 변경하는 것이 쉬운 작업은 아닙니다.

.js파일로 따로 공통된 코드를 정의하여 <script src=”colors.js”></script> 구현하면 쉽게 처리할 수 있습니다. js파일 내에는 <script>태그가 들어가면 안됩니다.

.js파일에 따로 코드를 분류를 하게 되면 유지보수가 수월해집니다.

코드의 명확성이 높아지고 가독성이 높아지게 됩니다. 여러 개의 파일로 쪼개는 것이 파일을 정리정돈하는 방법입니다.

*웹 페이지에 다운로드된 파일은 컴퓨터에 저장되어 다음 접속 시에는 저장된 파일을 읽어 네트워크를 통하지 않게 합니다. 서버입장에서 비용을 절감하는 효과를 얻습니다. 사용자 입장에서 네트워크 트래픽을 절감하고 빠르게 웹 페이지를 볼 수 있는 효과가 있습니다.

 

라이브러리와 프레임워크(서로 협력하는 모델)

라이브러리는 재사용하기 쉽도록 정리정돈 되어있는 소프트웨어. (만들어진 것을 쓰는 것)

프레임워크는 만들고자 하는 것이 있을 때 무엇이냐에 따라 게임, , 채팅 등

만들고자 하는 부분에 공통부분을 프레임워크 개성에 따라 다른 부분만 수정할 수 있도록 하는 것.

라이브러리(jQuery)

CDN(Content Delivery Network): 직접 라이브러리를 다운로드 받아 프로젝트 포함시켜 업로드하고 서비스하려면 비용이 듭니다. 많은 라이브러리가 CDN을 통해 자신들의 서버에 파일을 보관해 우리는 그것을 <script src=”.js”>를 통해 가져가는 방식으로 사용료까지 내줌으로 편한 작업입니다.
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>

var Links = {

   setColor:function(color){

$('a').css('color', color);

   }

 }


UI(User Interface) vs API(Application Programming Interface)

UI : 사용자가 조작 장치를 이용해 웹 애플리케이션을 사용하고 있는 것

 API : 경고창이 실행되는 것은 웹 브라우저를 만드는 사람이 경고창을 미리 만든 것, 조작 장치 alert API라고 합니다.

사용자는 UI, 프로그래머는 UI+API를 모두 사용, 자신만의 응용프로그램을 만들 수 있다.

 

수업을 마치며

Cookie 개인화된 서비스를 제공, offline web application 인터넷이 끊겨도 동작하고자 하는 앱

webRTC 화상통신, webGL 3차원 그래픽, webVR 가상현실


출처 : 생활코딩 강의

728x90
반응형
728x90
반응형

표준 내장 객체의 확장

표준 내장 객체(Standard Buit-in Object)는 자바스크립트가 기본적으로 가지고 있는 객체들을 의미합니다. 내장 객체가 중요한 이유는 프로그래밍을 하는 데 기본적으로 필요한 도구이기 때문입니다. 자바스크립트가 갖는 내장 객체입니다.

Object, Function, Array, String, Boolean, Number, Math, Date, RegExp

자바스크립트가 동작하는 호스트환경이 제공하는 API는 많이 있습니다. 사용자가 직접 정의한 객체는 표준 내장 객체와 대비되는 개념입니다.



var arr = new Array('seoul','new york','ladarkh','pusan', 'Tsukuba');

function getRandomValueFromArray(arr){

    var index = Math.floor(arr.length*Math.random()); //floor는 정수로 변환

    return arr[index]; //랜덤한 인덱스의 값을 리턴합니다.

}

console.log(getRandomValueFromArray(arr));

배열이 갖는 특정한 값을 랜덤하게 획득하는 기능을 모든 객체가 가질 수 있도록 코드를 변경해보겠습니다.

Array.prototype.rand = function(){

    var index = Math.floor(this.length*Math.random()); //배열 객체가 갖는 랜덤 메소드 안에서

    return this[index];                                       //this는 배열을 가리킵니다.

}

var arr = new Array('seoul','new york','ladarkh','pusan', 'Tsukuba');

console.log(arr.rand());

배열에 내장된 메소드인 것처럼 기능을 사용할 수 있습니다.

rand라는 메소드가 배열에 소속되어 있는 것이 분명해집니다. 훨씬 더 코드의 가독성이 높아집니다. rand의 메소드는 인자를 받지 않기 때문에 사용자가 신경 쓸 부분이 덜어집니다.

 

Object

Object는 데이터를 저장하는 그릇, 컨테이너라고 합니다.

Object가 갖는 역할은 객체를 prototype을 이용해 상속할 수 있습니다.

Object의 속성은 모든 객체의 property가 됩니다. 즉 모든 객체들의 부모입니다.

Object API 사용법에 대해 알아보겠습니다.

어떤 형태의 메소드가 있고 사용법에 대해 아는 것이 중요합니다.

Object.keys() // 키 값들을 리턴해주는 메소드

Object.prototype.toString() //

Keys()메소드는 배열 안의 인덱스, 키 값을 리스트로 리턴하는 메소드입니다.

toString() 객체가 담고 있는 값이 무엇인지 보기 좋게 출력해주는 메소드입니다.

new Object(); 객체를 생성하고 생성한 객체의 메소드 형태로 사용하는 것, Array Object를 자식이기에 toString() 메소드를 사용할 수 있습니다.

자바스크립트의 공동적인 최초의 조상이기 때문에 prototype이 있는 메소드는 모든 객체들이 상속받고 있는 공통의 기능입니다. 자바스크립트 애플리케이션 내 모든 객체들이 공통적으로 가져야 하는 기능이 있다면 기능은 object prototype객체 수정을 통해 이러한 기능을 만들 수 있습니다.

 

Object 객체를 확장해 모든 기능을 사용하는 방법에 대해 알아보겠습니다.

기능의 원리보다 어떻게 사용되고 어떤 취지에 기능인가에 살펴보고 기능을 구현하는 것이 좋습니다

 
Object.prototype.contain = function(neddle) { //건초 속 바늘 찾기의 의미를 가진 인자
    for(var name in this){
        if(this[name] === neddle){
            return true;
        }
    }
    return false;
}
var o = {'name':'egoing', 'city':'seoul'}
console.log(o.contain('egoing')); //true
var a = ['egoing','leezche','grapittie'];
console.log(a.contain('egoing')); //false
 

Object 확장의 위험에 대해 알아보겠습니다.

확장을 하는 이유는 모든 객체에 영향을 줄 수 있기 때문입니다. 신중해야 하는 이유는 모든 객체에 영향을 주기 때문입니다.

Console.log(o[name]); 시 함수의 값까지 나오게 됩니다.

o object이기 때문에 contain 메소드가 포함됩니다

for(var name in o){                                           for(var name in a){

    console.log(name);  //name, city, contain            console.log(name);  //0, 1, 2 , contain

}                                                                  }

Object의 어떠한 property나 메소드를 추가하는 것은 신중해야 합니다. 공통의 로직에 최소 단위에 적용해야 합니다. Object와 같이 모든 객체에 기능을 넣으면 모든 객체가 영향을 받기 때문에 편리하지만 위험해집니다.

for(var name in o){

    if(o.hasOwnProperty(name)){ //name에 대한 프로퍼티를 갖고 있다면

        console.log(name); 

    }

}

hasOwnProperty는 인자로 전달된 속성의 이름이 객체의 속성인지 여부를 판단합니다. prototype으로 상속 받은 객체라면 false가 됩니다.


출처 : 생활코딩 강의

728x90
반응형
728x90
반응형

생성자와 new

객체지향의 기본 형태 : 변수 + 메소드, 디렉토리의 연관된 파일을 구분하는 것을 객체입니다.

객체는 독립성을 갖게 됩니다. 여러 완제품의 부품으로 사용이 가능하다는 의미입니다.

객체지향프로그래밍의 도달하고자 목표는 좋은 부품의 로직을 만드는 것!

 

var person = {}

person.name = 'egoing';

person.introduce = function(){

    return 'My name is '+this.name;

}

document.write(person.introduce());

=========================================

객체를 만드는 과정에 분산되어 있습니다. 객체를 정의 할 때 값을 셋팅하도록 코드를 바꿔보겠습니다.

var person = {

    'name' : 'egoing',

    'introduce' : function(){

        return 'My name is '+this.name;

    }

}

document.write(person.introduce());


 

생성자

생성자(constructor)는 객체를 만드는 역할을 하는 함수입니다. 자바스크립트에서 함수는 재사용 가능한 로직의 묶음이 아니라 객체를 만드는 창조자라고 할 수 있습니다.

function Person(){}

var p = new Person();

p.name = 'egoing';

p.introduce = function(){

    return 'My name is '+this.name;

}

document.write(p.introduce());

========================================

 

function Person(name){

    this.name = name;

    this.introduce = function(){

        return 'My name is '+this.name;

    }  

}

var p1 = new Person('egoing');

document.write(p1.introduce()+"<br />");

 

var p2 = new Person('leezche');

document.write(p2.introduce());

 

생성자의 특징

일반적인 객체지향 언어에서 생성자는 클래스의 소속입니다. 하지만 자바스크립트에서 객체를 맏는 주체는 함수입니다. 함수에 new를 붙이는 것을 통해서 객체를 만들 수 있다는 점은 자바스크립트에서 함수의 위상을 암시하는 단서이면서 자바스크립트가 추구하는 자유로움을 보여줍니다.


출처 : 생활코딩 강의

728x90
반응형
728x90
반응형

값으로서의 함수와 콜백(함수의 용도)

자바스크립트에서도 함수는 객체입니다. , 함수 자체가 값이 될 수 있습니다.

var a = function(){ } a라는 변수에 함수가 담길 수 있습니다.


객체의 속성 값으로 담겨진 함수를 메소드(method)라고 부릅니다.

 

함수는 인자로 전달될 수 있고 리턴값(반환값)으로도 사용 가능합니다.

 

함수는 배열의 값으로 사용할 수 있습니다.

var process = [

    function(input){ return input + 10;},   //input[0] = 11

    function(input){ return input * input;}, //input[1] = 121

    function(input){ return input / 2;}    //input[2] = 60.5

];

var input = 1;

for(var i = 0; i < process.length; i++){

    input = process[i](input);

}

alert(input);

 

콜백

function sortNumber(a,b){

    // 위의 예제와 비교해서 a b의 순서를 바꾸면 정렬순서가 반대가 됩니다.

    return b-a;

}

var numbers = [20, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1];

alert(numbers.sort(sortNumber)); // array, [20,10,9,8,7,6,5,4,3,2,1]

콜백함수란 ? sort 기본적인 동작 방법을 변경할 수 있습니다. 즉 값으로서 함수를 사용할 수 있기 때문에 오리지널 함수의 동작방법을 값을 전달하는 것을 통해 완전히 바꿀 수 있는 것입니다.

콜백이 가능한 이유는 자바스크립트에서 함수가 값이기 때문에 콜백이 가능합니다.


비동기 처리


콜백은 비동기처리에서도 유용하게 사용됩니다. 시간이 오래 걸리는 작업이 있을 때 이 작업이 완료된 후에 처리해야 할 일을 콜백으로 지정하면 해당 작업이 끝났을 때 미리 등록한 작업을 실행하도록 할 수 있습니다. 다음 코드는 일반적인 환경에서는 작동하지 않고 서버 환경에서만 동작합니다.

대표적인 예로 AJAX(Asynchronous Javascript And XML) : 자바스크립트를 이용해 html코드를 이용해 화면에 출력

클릭 시 웹 페이지가 변경되지 않고 서버와 웹 브라우저가 내부적으로 조용히 통신하는 기법

Ajax는 웹이 단순히 문서에서 벗어나 이런 동작을 할 수 있는 애플리케이션으로 발전하게 한 단서입니다.


클로저

클로저(closure)는 내부함수가 외부함수의 맥락(context)에 접근할 수 있는 것입니다. 클로저는 자바스크립트를 이용한 고난이도의 테크닉을 구사하는데 필수적인 개념으로 활용됩니다.



function outter(){

    function inner(){

        var title = 'coding everybody';

        alert(title);

    }

    inner(); //'coding everybody' 출력

}

outter(); //'coding everybody' 출력

내부함수에서 외부함수의 지역변수에 접근 가능한 것이 클로저입니다.

function outter(){

    var title = 'coding everybody'; 

    return function(){       

        alert(title);

    }

}

var inner = outter();

inner(); //'coding everybody' 출력

외부함수의 지역변수에 접근 할 수 있는데 외부함수의 실행이 끝나서 외부함수가 소멸된 이후에도 내부함수가 외부함수의 변수에 접근 할 수 있습니다. 이러한 메커니즘을 클로저라고 합니다. 결과는 경고창으로 coding everybody를 출력할 것입니다.

 

private variable

객체 안의 함수가 있는 상태, 첫 번째 매개변수는 title, 매개변수는 함수 안에서 지역변수로 사용

get_title 메소드를 호출하면 title을 리턴합니다.

set_title 메소드는 _title title값을 변경합니다.

function factory_movie(title){

    return {

        get_title : function (){

            return title;

        },

        set_title : function(_title){

            title = _title

        }

    }

}

ghost = factory_movie('Ghost in the shell');

matrix = factory_movie('Matrix');


alert(ghost.get_title()); //'Ghost in the shell'

alert(matrix.get_title());//'Matrix'


ghost.set_title('공각기동대');

alert(ghost.get_title()); //'공각기동대'

alert(matrix.get_title()); //'Matrix'

ghost matrixprivate 변수에 객체를 담았습니다

private변수가 필요한 이유는 소프트웨어의 규모가 커질수록 많은 데이터가 존재하게 됩니다.

그 데이터를 누구나 수정 가능하다면 소프트웨어가 쉽게 망가질 수 있기 때문입니다.


출처 : 생활코딩 강의

728x90
반응형
728x90
반응형

+ Recent posts