본문 바로가기
Research/Javascript

Javascript_function

by RIEM 2022. 3. 20.

Function

Function은 실행 가능한 코드의 집합체다. 한 마디로 행동들을 묶어놓은 패키지라고 보면 된다. 알약 캡슐처럼 이런저런 우리 몸에 어떤 영향을 미치는 영양소들이 하나의 캡슐 안에 들어있고 그 캡슐을 우리가 필요할 때마다 먹는다고 생각하면 된다.


기본 구조> input

function sayHello() {

    console.log("sayHello")

}

 

sayHello()

> output

 

파이썬과 크게 다르지 않아서 이해하기가 쉽다.

 

이제 함수에 파라미터(입력변수)를 넣어서 실행해보자.

function sayHello(nameOfPerson) {

    console.log(nameOfPerson)

}

 

sayHello("thisBag");

sayHello("thatBag");

sayHello("thoseBag");





위 함수에서는 파라미터 1개를 넣었다. 그럼 파라미터 2개를 넣어보자.

function sayHello(nameOfPerson, age) {

    console.log(nameOfPerson, age)

}

 

sayHello("John", 20);

 

 

 

파라미터 2개를 넣으니 ‘John 20’이라는 결과물이 도출되었다. 파라미터 사이에 스페이스 1칸이 들어갔다.

 

Function을 객체Object에 넣기

const player = {

    name = "John",

    sayHello = function (otherName) {

        console.log("Hi", otherName + ", Good to see you again"),

    },

};

 

console.log(player.name);

player.sayHello("Suji");

 

function을 객체에 넣으면 위와 같다. sayHello라는 키에 function을 대입한다. 직관적으로 이해할 수 있다. player 객체에 sayHellow 메소드를 사용하면 해당 function이 실행된다. 한번 확인해보자.

 

문제 발생

그런데 ‘}’ 때문에 문법 오류가 발생했다. 어디가 문제가 생긴 것일까?

 

const player = {

    name = "John",

    sayHello = function (otherName) {

        console.log("Hi", otherName + ", Good to see you again"),

    },

};

 

console.log(player.name);

player.sayHello("Suji");


문제 원인

  1. Object 내 name, sayHello를 정의해줄 때 ‘:’가 아닌 ‘=’를 썼다. 
  2. function 내 console.log 구문이 끝난 후 무의미한 ‘,’가 들어가있다.


해결

const player = {

    name : "John",

    sayHello : function (otherName) {

        console.log("Hi", otherName + ", Good to see you again")

    }

}

 

console.log(player.name);

player.sayHello("Suji");

 


인사이트

  • JS에서 Object 내 property와 method를 정의하기 위해 ‘:’를 쓴다
  • ‘=’는 Object 선언 시 사용한다
  • 불필요한 ‘,’는 넣지 않는다

 

클린 코드

const calculator = {

    add : function(a, b){

        console.log(a + b);

    },

    minus : function(a, b){

        console.log(a - b);

    },

    multiple : function(a, b){

        console.log(a * b);

    },

    divide : function(a, b){

        console.log(a / b);

    },

    power : function(a, b){

        console.log(a ** b);

    },

};

 

위 코드를 좀 더 간결하게 정리할 수는 없을까? 선배님들께 피드백을 요청하여 아래와 같이 수정을 했다.

 

//version 2

const calculator = {

    add(a, b) { console.log(a + b)},

    minus(a, b) { console.log(a - b)},

    multiple(a, b) { console.log(a * b)},

    divide(a, b) { console.log(a / b)},

    power(a, b) { console.log(a ** b)},

};

 

calculator.add(10, 2);

calculator.minus(10, 2);

calculator.multiple(10, 2);

calculator.divide(10, 2);

calculator.power(10, 2);

 

methodName : function(a, b)가 -> methdName(a, b)로 줄여졌다.

 

//version 3

 

const calculator = {

    add: (a, b) => a + b,

    minus: (a, b) => a - b,

    multiple: (a, b) => a * b,

    divide: (a, b) => a / b,

    multiple: (a, b) => a ** b,

};

 

console.log(calculator.add(2, 10));

console.log(calculator.minus(2, 10));

console.log(calculator.multiple(2, 10));

console.log(calculator.divide(2, 10));

console.log(calculator.multiple(2, 10));

 

이렇게도 줄일 수 있다고 한다.

add : function(a, b) {a + b}가 아예 add: (a,b) => a + b 로 바뀌어버렸다.

function 함수가 사라지고 ‘{}’도 =>로 바뀌었다. 개인적으로 세 번째의 코드가 가독성이 좋다고 생각하지만 현업에서 이런 방식으로 코드를 작성하는지 잘 모르겠다. 

 

Return

 

const age = 50;

 

function calculatorKrAge(internationalAge) {

    return internationalAge + 2;

}

 

const krAge = calculatorKrAge(age);

console.log(krAge);

 

한국 나이를 계산하는 calculatorKrAge() 함수의 결과값을 krAge 변수에 대입하고, 해당 변수를 출력하고 싶다. 하지만 이 경우 calculatorKrAge()의 결과 값이 console.log()가 아닌 return으로 반환해주어야 값들이 각 변수들에 대입되어 결과적으로 호출할 수 있다. 기존에 사용했던 console.log와 alert는 단순 출력 함수이기 때문에 값을 다루기 위해선 return해야 한다.

 

위 calculator 코드에 return을 적용하면 아래와 같이 나타난다.

//version 4

const calculator = {

    add(a, b) { return a + b},

    minus(a, b) { return a - b},

    multiple(a, b) { return a * b},

    divide(a, b) { return a / b},

    multiple(a, b) { return a ** b}

}


'Research > Javascript' 카테고리의 다른 글

jquery_ready() 메소드로 페이지 로딩 즉시 함수 실행시키기  (0) 2022.11.21
Javascript_Conditionals  (0) 2022.03.20
Javascript_Object  (0) 2022.03.20
Javascript_array  (0) 2022.03.20
Javascript_데이터 타입  (0) 2022.03.20

댓글