진짜 배열을 만들기위한 from 메소드

Javascript의 from 메소드

진짜 배열로 바꾸기 위해 from을 사용한다!!!

일단 실습을 위해 배열의 각 요소에 느낌표(!)를 더하는 함수를 만들어보자

1
2
3
4
5
6
7
8
9
10
11
function addMark() {
let newData = [];

for (let i=0; i<arguments.length; i++) {
newData.push(arguments[i] + "i");
}

console.log(newData);
}

addMark(1, 2, 3, 4, 5);

이 예제코드에는 처음보는 arguments라는 객체가 있다. arguments는 진짜 배열은 아니지만 마치 배열인 것 처럼 쓰인다. 위의 코드에서 addMark라는 함수를 생성할때 몇개의 인자를 필요로하는지 명시하지 않았다. 하지만 코드는 제대로 작동하게 되는데 arguments 객체가 내부적으로 특수한 변수를 만들어 사용했기 때문에 가변인자에 대해서 대응할 수 있었던 것이다.

arguments 객체를 배열처럼 사용할 수 있다면

1
2
3
let newData = arguments.map(function(value) {
return value + "!";
});

위와 같은 코드도 가능하다. 하지만 실제로 위와 같이 바꾼다면 에러가 나게된다.

그 이유는 무엇일까?

arguments는 마치 배열처럼 행동할 뿐 진짜 배열은 아니기 때문이다. 그래서 진짜 배열로 바꾸어 주면 map 메소드가 제대로 실행되게 되는데 이 때에 from 메소드를 이용한다.

1
2
3
4
let newArray = Array.from(arguments);
let newData = newArray.map(function(value) {
return value + "!";
});
Share

자바스크립트의 반복문 - for

자바스크립트에서 사용되는 for문에 대해서 알아보자

  1. for
    가장 일반적으로 사용되는 for문이다. 배열의 크기가 가변적이더라도 대응할 수 있다.

    1
    2
    3
    4
    const data = ['a', 'b', 'c', 'd'];
    for (let i = 0; i < data.length; i++) {
    console.log(data[i]);
    }
  2. forEach
    Array가 제공하고 있는 forEach 메소드와 callback 함수를 통해서 배열을 순회할 수 있다. 이 때에 콜백함수의 인자로는 순회하고 있는 요소가 들어가게 된다.

    1
    2
    3
    4
    const data = ['a', 'b', 'c', 'd'];
    data.forEach(function(value) {
    console.log(value);
    });
  3. for in
    파이썬처럼 for in 함수도 있다. 객체의 프로퍼티에 루프를 실행하게 된다. Array에서는 사용하지 않는 걸 추천하며, 그 이유는 다음과 같다. 원래 object를 위해서 만들어졌기 때문이기도 하며 Array.prototype.getIndex = function() {} 처럼 prototype에 직접적으로 새로 생성한 프로퍼티가 있을때 의도치 않게 같이 순회하기 때문이다. 또한 배열의 경우 값(value)를 가져오는 게 아니라 인덱스(index)를 가져오게 됨을 주의하자!

    1
    2
    3
    4
    const data = ['a', 'b', 'c', 'd'];
    for (let idx in data) {
    console.log(data[idx]); // 인덱스를 가져오기 때문에 이렇게 순회해야 값을 출력한다.
    }
  4. for of
    es6에서 새로 생긴 반복문이다. for in과는 다르게 컬렉션의 요소를 순회하는 반복문이다. 배열을 순회할때 알맞으며 문자열 각각의 문자들을 반복할때도 사용한다. for in과의 차이점으로는 idx가 아닌 value(값)을 가져오는 것이다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    const data = ['a', 'b', 'c', 'd'];
    for (let value in data) {
    console.log(value);
    }

    const test_str = "abcdefg";
    for (let char in test_str) {
    console.log(char);
    }
Share

centos7에서 java8 버전 이상 설치하기

centos7 에서 java8 버전 이상 설치하기

지금까지 도커를 통해 로컬에서 ELK 스택을 연습했다. 실제 알리미 서버에 적용해보기 위해서 시도하고 있는데 우분투가 아닌 centos7이라서 설치하는 방법들이 조금은 다른 것 같다. 그래서 처음부터 정리하려고 한다!

java8 이상 설치하기

엘라스틱서치는 자바8 이상을 필요로한다. 그러므로 자바를 설치하자!

1
wget --no-check-certificate --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/10.0.1+10/fb4372174a714e6b8c52526dc134031e/jdk-10.0.1_linux-x64_bin.tar.gz

위 의 명령은 자바10을 설치한다. 만약 다른 버전의 자바를 설치하고 싶다면 오라클 자바 다운로드 페이지에서 원하는 버전의 파일의 경로를 획득한 뒤 주소만 바꿔서 사용하자.

설치 디렉토리는 자유지만 그냥 이렇게했다.

1
2
3
mkdir /usr/local/java
mv jdk-8u112-linux-x64.tar.gz /usr/local/java
tar xvzf jdk-8u112-linux-x64.tar.gz

명령어를 등록한다.

1
2
3
4
5
6
7
alternatives --install /usr/bin/java java /usr/local/java/jdk-10.0.1/bin/java 1
alternatives --install /usr/bin/java javac /usr/local/java/jdk-10.0.1/bin/javac 1
alternatives --install /usr/bin/java javaws /usr/local/java/jdk-10.0.1/bin/javaws 1

alternatives --set java /usr/local/java/jdk-10.0.1/bin/java
alternatives --set javac /usr/local/java/jdk-10.0.1/bin/javac
alternatives --set javaws /usr/local/java/jdk-10.0.1/bin/javaws

자바10을 다운로드 받았기 때문에 위와 같이 설정해주었다.

다음으로 환경변수를 설정해주어야한다.

1
2
3
# in ~/.zshrc

export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")

마찬가지로 각자 해당하는 쉘의 conf을 수정해야한다. (나의 경우 zsh을 사용중이기 때문에 .zshrc를 수정했다)

마지막으로 자바 설치가 제대로 됐는지 확인한다.

1
2
3
4
java -version
# java version "10.0.1" 2018-04-17
# Java(TM) SE Runtime Environment 18.3 (build 10.0.1+10)
# Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10.0.1+10, mixed mode)
Share