내장함수란?

  • 내장함수란 함수의 일종으로 js에 기본적으로 생성되있는 함수들을 의미한다. 이러한 내장함수를 활용하여 개발자는 그 기능을 직접 만들지 않아도 함수를 호출하는것만으로도 해당 기능을 사용할 수 있게된다. js가 제공하는 내장함수는 다양하지만 이번시간에는 그중에서 많이 쓰이는 내장함수들에대해 알아보고자 한다.

 

 

 

setTimeout()
  • setTimeout() 함수는 시간을 설정하여 해당 시간뒤에 지정한 함수를 실행하는 함수이다. 시간을 설정할때의 단위는 ms 이며 1초는 1000ms이다.
//함수의 양식
setTimeout(함수,시간);

//함수 사용 예시
setTimeout(function(){
	console.log("hello");
},1000);

 

 

 

 

setInterval()
  • setInterval() 함수는 setTimeout() 과 동일하지만 지정한 시간을 간격으로 무한 반복된다는 점에서 다르다. 시간 단위는 ms로 동일하며 1초는 1000ms 이다.
//함수 양식
setInterval(함수,시간);

//함수 사용 예시
setInterval(function(){
    console.log("hello");
},1000);

//1초 단위로 hello 가 계속 출력

 

 

 

clearInterval()
  • clearInterval() 함수는 setInterval() 함수와 짝꿍이며 setInterval() 함수를 중지하는 함수이다.
//코드 양식
clearInterval(중지할interval값);

//코드 사용 예시
let hello = setInterval(function(){
    console.log("hello");
},1000)

//일정시간뒤에 1번실행되는 코드
setTimeout(function(){
    stopInterval();
},4001)

//interval을 중지시키는 함수
let stopInterval = () => {
    clearInterval(hello);
}


//위 코드의 출력결과

hello
hello
hello

//프로그램 종료

 

 

 

 

parseInt()
  • parseInt() 함수는 문자열을 정수로 변환해주는 함수이다. 사용자에게 값을 입력받을때 
// //함수 양식
parseInt(문자열);

//함수 사용 예시
let number = parseInt("93" + "12");

console.log(number);
// 9312 출력

 

 

 

 

prompt()
  • prompt() 는 사용자로부터 입력값을 받을 수 있도록 해주는 함수이다. 이를 통해 사용자와 상호작용하는 프로그램을 개발할 수 있다.

 

 

 

하지만 prompt() 함수를 사용할때의 주의점은 사용자로부터 받은 입력값은 문자열로 처리된다는 점이다. 예를 들어 사용자로부터 2개의 숫자를 입력받고 서로 더한값을 출력하는 코드를 작성했을때 코드 및 결과는 아래와 같다.

 

let number1 = prompt("첫번째 번호를 입력해주세요");	//12 입력
let number2 = prompt("두번째 번호를 입력해주세요");	//34 입력
document.write("두 숫자를 더한 값: " + (number1+number2));

 

결과

 

 

12와 34를 더한값은 46이다. 하지만 1234가 출력되었다. 이는 산술연산자가 데이터를 문자열로서 처리했기때문이다. 따라서 46이라는 값을 얻으려먼 parseInt() 함수를 이용하여 데이터타입을 변형해주면 된다.

 

let number1 = parseInt(prompt("첫번째 번호를 입력해주세요"));	//12 입력
let number2 = parseInt(prompt("두번째 번호를 입력해주세요"));	//34 입력
document.write("두 숫자를 더한 값: " + (number1+number2));

 

결과

 

 

isNaN()
  • isNaN() 함수는 매개변수로 받은 값이 NaN 값인지 아닌지를 판단해 참 혹은 거짓을 리턴해주는 함수이다. 조건문과 같이 쓰여져 예외처리로도 사용할 수 있다.
let nan_ture = NaN;
let nan_false = 10;

console.log(isNaN(nan_ture));	//true 출력
console.log(isNaN(nan_false));	//false 출력

 

 

 

 

isFinite()
  • isFinite() 함수는 매개변수로 받은값이 무한한값인지 아닌지를 판단해 참 혹은 거짓을 리턴해주는 함수이다.
let finite = 10;
let infinite = Math.pow(2,1024);

console.log(isFinite(finite));		//true 출력
console.log(isFinite(infinite));	//false 출력

 

 

 

 

 

 

eval()
  • eval() 함수는 문자열로 구성된 연산식의 결과값을 반환해주는 함수이다. 
//코드 양식
eval(값);

//코드 사용예시
console.log(eval(10 + 10));	// 20 출력
console.log(eval(10 * 10));	// 100 출력
console.log(eval(10 - 10));	// 0 출력

//코드 응용
let leftNum = parseInt(prompt("좌변을 입력하시오"));
let rightNum = parseInt(prompt("좌변을 입력하시오"));
let cal = prompt("연산기호를 입력하시오");
document.write("결과값: " + eval((leftNum + cal + rightNum)))

 

사용자 입력
결과창

 

 

 

confirm()
  • confirm() 함수는 사용자에게 확인 또는 취소 중 입력값을 받아 참 또는 거짓을 리턴해주는 함수이다.
//코든 양식
confirm(값);

//코드 사용 예시
if(confirm("동의하시겠습니까")){
	document.write("동의하셨습니다.");
}
else{
	document.write("비동의하셨습니다.");
}

확인창
확인을 누른경우(왼쪽사진) 와 취소를 누른경우(오른쪽사진)

 

 

 

 

 

alert()
  • alert() 함수는 매개변수안에있는 문자열을 경고창으로 출력해주는 함수이다. 
//코드 양식
alert(문자열);

//코드 사용 예시
alert("hello");

 

함수란?
  • 함수란 어떠한 기능을 위해 모인 코드의 집합이다. 함수는 여러번 재사용이 가능하고 개발자가 필요한 기능을 만들 수 있다는 점에서 개발에서 빼놓을 수 없는 필수적인 요소중에 하나이다. 이러한 함수를 선언하는 방법에는 여러방법이 있다. 함수에대해 간략히 설명하자면 함수는 자판기이다. 우리는 자판기에서 무언가를 사먹을때 돈을 넣고 물건을 받는다. 이때 돈이 매개변수이고 물건이 리턴값이다. 즉, 함수는 매개변수를 받고 코드를 실행하여 리턴값을 주는 하나의 집합인것이다. 이때 주의할점이 매개변수와 리턴값은 각각 필수적인 요소가 아닌 선택적 요소이다.  

출처: 그림판

 

 

 

 

함수 선언식
  • 함수 선언식은 명시적으로 함수를 선언할 수 있다는 점에서 가장 접근하기 쉽다. 하지만 함수 선언식은 호이스팅 이라는 문제점을 가지고 있기때문에 아래에 나오는 함수 선언방법에 비해서는 덜 사용된다. 호이스팅에대해 간략히 설명하자면 인터프리터가 코드를 실행할때 변수,클래스 등을 맨위로 끌어올리는것을 의미한다. 보통 코드의 유지보수 및 가독성을 위해 호이스팅이 되는 함수선언식은 지양하는 편이다. 함수 선언식의 양식은 아래와 같다.
//함수 선언식의 구조
function 함수이름(매개변수){
	실행코드
    return 리턴값;	//해당 부분은 필수적이지 않음
}

//함수 작성 예시
function hello(){
	console.log("Hello");
}

//매개변수를 사용한 함수의 예시
function hello(name){
	console.log("입력된 이름: " + name);
}


//리턴값을 활용한 경우
function hello(){
	return "hello";
}

let words = hello();



//함수를 호출하는 법
hello();

 

 

 

 

 

 

함수 표현식
  • 함수 표현식은 변수에 함수를 대입하는 모양의 함수 선언방식이다. 이는 호이스팅의 대상이 아니기 때문에 함수의 위치에따라 오류가 발생하기도 한다. 아래는 함수표현식의 예시와 주의점에대한 예제코드이다.
//함수 표현식의 구조
데이터타입 변수명 = function(매개변수){
	실행코드
}

//함수 표현식의 활용 예시
const hello = function(){
	console.log("Hello");
}


//매개변수를 활용한 경우
const hello = function(name) {
	console.log(name);
}


//리턴값을 활용한 경우
const hello = function(){
	return "hello";
}

let words = hello();


//함수 호출방법
hello();



//호이스팅에대한 주의점

//호출이 함수보다 위에 위치할경우
hello();	//오류

const hello = function(){
	console.log("Hello");
}

//호출이 함수보다 아래에 위치할경우

hello();	// "Hello" 출력

 

 

 

 

 

 

화살표 함수
  • 화살표 함수는 함수표현식에서 조금더 간결화한 함수 선언방법이다. 근본적으로 함수표현식과 다르지 않으나 가동석이 떨어지므로 코딩을 처음 접한 사람이 본다면 이게 뭐지 라는 생각이 들것이다. 화살표 함수의 예제는 아래와 같다.
//화살표 함수의 예시
데이터타입 함수이름 = (매개변수) => {
	실행코드;
    return 리턴값;
}

//사용 에시
const hello = () => {
	console.log("hello");
}


//매개변수를 활용한 예시
const hello = (name) => {
	console.log(name);
}


//리턴값을 활용한 예시
const hello = () => {
	return "hello";
}

let words = hello();



//함수 호출 방법
hello();

 

 

위 세가지 방법이 함수를 선언하는 방법은 다 다르지만 함수를 호출하는 방법은 셋모두 동일하다.

내장객체란?
  • 내장객체란 개발자가 따로 객체를 선언하지 않아도 Js에서 기본적으로 제공하는 객체를 의미한다. 이번시간에선 내장객체 중에서 많이 사용되는 객체중에 하나인 Math 객체에대해서 알아보고자 한다.

 

 

Math 객체란?
  • Math 객체는 주로 난수생성, 최대,최소값 구하기 등 숫자와 관련된 역활을 한다. Number객체가 가지고 있는 메소드는 아래와 같다.
Math.max() 최댓값을 반환한다
Math.min() 최소값을 반환한다
Math.random() 0과 1사이의 난를 생성한다
Math.pow(x,y) x 를 y번 제곱하여 반환한다
Math.round() 반올림하여 반환한다
Math.ceil() 올림하여 반환한다
Math.floor() 버림하여 반환한다
Math.sign() 양과 음을 판단하여 해당부호를 반환한다

 

let max = Math.max(10,4,23,4);	// 23 출력
let min = Math.min(10,4,23,4);	// 4 출력
let random = Math.random();	// 0.6186860539712182 출력
let pow = Math.pow(2,5);	// 32 출력
let round = Math.round(10.5);	// 11 출력
let ceil = Math.ceil(10.5);	// 11 출력
let floor = Math.floor(10.5);	// 10 출력
let sign = Math.sign(-10);	// -1 출력


console.log(max,min,random,pow,round,ceil,floor,sign);

//출력결과
23 4 0.6186860539712182 32 11 11 10 -1

 

 

 

 

 

Math.random의 사용
  • Math.random은 난수를 생성한다는 점에 있어 개발에 많이 사용된다. 하지만 Math.random 은 0과 1사이의 난수만을 생성하기 때문에 우리가 원하는 수 범위 안에서의 난수를 얻기 어렵다. 따라서 Math.random은 단독으로 쓰이지 않고 다른 기능과 같이 쓰이는 경우가 많다. 
let let random = Math.random() * 100;
console.log(random);	// 97.99585499423324 출력

random = Math.floor(random);
console.log(random);	// 97 출력

 

보통 사용자가 원하는 범위를 설정하기 위해서 Math.random() * n 을 사용한다. n을 곱할경우 0 ~ n-1 까지의 난수를 생성한다. 위 코드에선 100을 곱했으므로 0 ~ 99 까지의 난수가 생성되고 1 ~ 100까지의 난수를 생성하기 위해서는 괄호로 묶고 +1 을 해주면 된다. 

그리고 Math.random() 을 단독으로 사용할경우 뒤의 긴 소수점까지 출력되므로 보통 Math.floor를 사용하여 소수점을 제거해준다. 따라서 보편적으로 사용되는 Math.random의 모습은 아래와 같다.

 

// 0 ~ n-1 까지의 난수 범위를 설정할 경우
let random = Math.floor(Math.random() * n);

// 1 ~ n 까지의 난수 범위를 설정할 경우
let random = Math.floor(Math.random() * n) + 1;
반복문이란?
  • 반복문은 코딩에서 빼놓을 수 없는 필수적인 요소중에 하나이다. 반복문은 for 를 사용하여 실행코드들을 주어진 조건에 따라 여러번 반복시행할 수 있는 문법이다. 이러한 반복문의 활용으로 코드를 획기적으로 줄일 수 있고 또한 반복문을 잘못사용하면 무한루프 또는 프로그램의 오류로 이어질 수 있기때문에 반복문을 잘활용하는 것은 개발자로서 중요하다. 이제 반복문의 사용법에대해 알아보자.

 

 

반복문의 사용
  • 반복문은 for를 활용하여 초기식, 조건식, 증감식 을 설정하여 개발자가 원하는 만큼의 반복횟수를 설정할 수 있다. for문의 기본 양식은 아래와 같다.
for( 초기식; 조건식; 증감식;){
	실행코드;
}

//예시
for(let i = 0; i < 5; i++){
	console.log("Hello");
}

 

for문은 초기식, 조건식, 증감식을 사용한다. 초기식은 반복문이 실행될때 초기 한번만 실행되며 반복문의 시행횟수를 조절하는 변수에대한 정보가 있다. 조건식은 해당 조건문이 참일경우 반복문안에 있는 코드를 실행하게한다. 마지막으로 증감식은 반복될때마다 실행되며 변수에 변화를 준다.

 

for문의 실행구조

 

조건문의 진행구조에대해 설명하기위해 위의 그림을 첨부해봤다. for문이 처음실행되면 초기식이 실행된다(1). 이후 조건식을 체크하고 조건식이 참일경우 실행코드를 실행한다(2). 실행코드가 완료되면 증감식이 실행된다(3). 이후 다시 조건식을 확인하고 참일경우 다시 실행코드, 증감식 순으로 실행된다. 이후 반복을 계속하다가 조건식이 거짓일경우 실행코드를 실행하지 않고 for문을 빠져나오게된다(5). 

 

이를 인지하고 맨위의 예제코드에서 사용된 for문을 보면 for(let i = 0; i  < 5; i++) 라고 적혀있다. 이를 해석하면 for( i = 0 변수 선언; i 가 5보다 작을때까지 반복; 반복후에 i = i+1(i에 1을 더함);) 이된다. 

 

 

 

이중 for문
  • 이중 for문은 for문 안에 for문을 넣는것이다. 사실 for문안에는 개발자가 원하는 만큼의 for문을 넣을 수 있지만 for문은 중첩되면 중첩될수록 반복횟수가 기하급수적으로 많아진다는점에 있어서 프로그램의 최적화에 문제가 될 수 있다. for문을 중첩해서 사용할때의 주의점은 초기식에서 사용하는 변수가 겹치면 안되다는 것이다. 변수의 선언은 자유지만 보통 i,j,k 를 많이 사용한다.
for(초기식; 증감식; 조건식){
	for(초기식;증감식;조건식){
    	실행코드;
    }
}


// 코드 예시
for(let i = 0; i < 5; i++){
	for(let j = 0; j < i; j++){
    	console.log("i값: " + i + " j 값: " + j);
    }
}

//실행 결과
i값: 1 j 값: 0
i값: 2 j 값: 0
i값: 2 j 값: 1
i값: 3 j 값: 0
i값: 3 j 값: 1
i값: 3 j 값: 2
i값: 4 j 값: 0
i값: 4 j 값: 1
i값: 4 j 값: 2
i값: 4 j 값: 3

 

위 예제코드에선 이중for문의 실행순서를 이해하기 쉽도록 코드가 실행될때의 i값과 j값을 출력하도록 했다. 이러한 이중for문은 이중배열을 다룰때 많이 사용된다. 

 

 

 

 

배열과 for문
  • 배열과 for문은 떼어놓기 어려운 단짝이다. for문을 사용하면 배열을 관리하기 쉬워진다.
let score = [90,80,70,60];

for(let i = 0; i < score.length; i++){
	console.log(score[i]);
}

//실행결과
90
80
70
60

 

for문을 반복문과 함께 사용할때는 보통 조건식에 특정한 숫자보다는 배열의 길이를 나타내는 .length 를 사용하는 경우가 많다. 이는 배열에 사용자에게 입력받은 값이 들어가 있을경우 배열의 길이를 특정짓기 힘들고 배열의 길이보다 더 혹은 덜 반복시행될경우 데이터 오류로 이어질 수 있기 때문이다. 위 코드는 그저 배열안에 있는 정보를 출력한것이고 이를 좀더 응용해보면 배열안에 객체를 저장하고 if문을 통해 배열안에 특정 값만 출력해낼 수 있다. 예제는 아래와 같다.

 

let student = [
	{name:"철수", score:80},
	{name:"영희", score:70},
	{name:"맹구", score:60},
	{name:"짱구", score:90}
];

for(let i = 0; i < student.length; i++){
	if(student[i].score >= 80){
		console.log(student[i].name);
	}
}

//실행결과
철수
짱구

 

위 코드에선 student 배열안에 여러개의 객체를 저장했다. 그리고 for문을 통해 배열을 가져오고 조건문을 통해 객체안에 score의 값이 80이상일경우 해당 객체의 name값을 출력하는 코드를 작성했다. 이런식으로 for문을 활용하여 배열안에 원하는 데이터를 추출할 수 있다. 이제 다양한 문제를 통해 for문을 익혀보자. 

 

 

 

 

 

 

" * " 로 그림 그리기(문제)
  • 1번: for문을 활용하여 아래의 그림을 완성해보시오. process.stdout.write(); 을 활용하면 줄바꿈없이 console 출력이 가능하다.
     

 

 

 

  • 2번: for문을 활용하여 아래의 그림을 완성해보시오.(삼각형 상하반전)

 

 

 

 

  • 3번: for문을 활용하여 아래의 그림을 완성해보시오.(삼각형 좌우반전)

 

 

 

  • 4번:for문을 활용하여 아래의 그림을 완성해보시오.(정삼각형 모형)

 

 

  • 5번:for문을 활용하여 아래의 그림을 완성해보시오.(마름모)

 

 

 

 

 

 

" * "로 그림 그리기(예제코드)
  • 먼저 코딩에있어 정답은 없다. 같은 결과여도 다양한 코드가 존재한다. 아래 코드들은 필자가 부족한 지식으로 작성해본 코드들이다. 이 점 유의하길 바라고 코드를 읽고 이해하는것이 중요하다. 반대로 아래 코드를 보고 어떤 형상의 그림이 나올지 유추해보는것도 큰 도움이 될것이다. 

 

  • 1번문제
for(let i = 0; i < 10; i++){
	for(let j = 0; j < i; j++){
		process.stdout.write("*");
	}
	console.log("");
}

 

 

 

  • 2번 문제
for(let i = 10; i > 0; i--){
	for(let j = i; j > 0; j--){
		process.stdout.write("*");
	}
	console.log("");
}

 

 

 

 

  • 3번 문제
for(let i = 10; i > 0; i--){
	for(let j = i; j > 0; j--){
		process.stdout.write(" ");
	}
	for(let k = 10 - i; k > 0; k--){
		process.stdout.write("*");
	}
	console.log("");
}

 

 

  • 4번 문제
for(let i = 0; i < 10; i++){
	for(let j = 10; j > i; j--){
		process.stdout.write(" ");
	}

	for(let j = 0; j < i-1; j++){
		process.stdout.write("*");
	}

	for(let j = 0; j < i; j++){
		process.stdout.write("*");
	}

	console.log();
}

 

 

  • 5번문제
for(let i = 0; i < 10; i++){
	for(let j = 10; j > i; j--){
		process.stdout.write(" ");
	}

	for(let j = 0; j < i-1; j++){
		process.stdout.write("*");
	}

	for(let j = 0; j < i; j++){
		process.stdout.write("*");
	}

	console.log();
}
for(let i = 0; i < 9; i++){
	for(let j = 0; j-1 <= i; j++){
		process.stdout.write(" ");
	}
	for(let j = 8; j > i; j--){
		process.stdout.write("*");
	}
	for(let j = 7; j > i; j--){
		process.stdout.write("*");
	}
	console.log();
}
조건문이란?
  • 조건문은 프로그래밍에서 빼놓을 수 없는 필수 요소중 하나이다. 조건문을 통해 다양한 상황에서 개발자의 의도대로 프로그램이 실행되도록 코딩할 수 있다. 조건문의 기본구조부터 천천히 알아보도록 하자.

 

 

 

조건문의 기본 구조 및 사용
  • 조건문은 기본적으로 if문이라 불리는 문법을 사용한다. if를 통해 다양한 조건식으로 세워 실행코드를 작성한다. if문의 양식은 아래와 같다.
//필요 조건이 하나일경우
if(조건문){
	실행코드;
}

//필요 조건이 많은 경우
if(조건문){
	실행코드;
}
else if(조건문){
	실행코드;
}
else if(조건문){
	실행코드;
}
else{
	실행코드;
}

 

if문은 주로 else if 와 else 를 사용하여 보다 구체적인 코딩이 가능하다. 여러개의 조건문이 필요한 예제로 성적에따라 다른 결과를 출력하는 프로그램을 만들어본다면 완성된 코드는 아래와 같다.

 

 

let score = 90;

if(score <=100 && score >= 90){
	console.log("A 입니다");
}
else if(score < 90 && score >=70){
	console.log("B 입니다");
}
else if(score < 70 && score >= 40){
	console.log("C 입니다");
}
else if(score < 40 && score >= 0){
	console.log("D 입니다");
}
else{
	console.log("잘못된 점수입니다");
}

//위 코드의 결과로 "A 입니다" 가 출력

 

if문의 기본구조는 if(조건문) 이다. 위 코드에서는 논리연산자인 &&(AND) 연산자를 사용했다. 조건문안의 코드를 풀어보자면 score 의 값이 100과 같거나 이하이고 90과 같거나 클때 true를 반환한다. 위 코드에서는 이러한 코딩을 통해 A~D 까지의 점수등급을 나누었고 마지막으로 0 이하인 점수는 없으므로 else로 예외처리를 해주었다. 하지만 위 코드를 더 간결하게 최적화를 할 수 있다. 최적화를 한 결과는 아래 코드와 같다.

 

 

 

let score = 90;

if(score <=100 && score >= 90){
	console.log("A 입니다");
}
else if(score >=70){
	console.log("B 입니다");
}
else if(score >= 40){
	console.log("C 입니다");
}
else if(score >= 0){
	console.log("D 입니다");
}
else{
	console.log("잘못된 점수입니다");
}

//위 코드의 결과로 "A 입니다" 가 출력

 

위 코드에서 달라진 점은 조건문이 짧아졌다는 점이다. 이러한 코딩이 가능한 경우는 아래의 조건문들을 else if로 연결했기 때문이다. else if문은 if 뒤에 올 수 있으며 if 문이 false 값으로 처리되어 실행되지 못했을경우 else if문의 조건문을 살펴보기 때문이다.

즉, 초기 if문에서 100 ~ 90의 점수대를 조건문으로 세웠기 때문에 다음 else if 문으로  내려오는 값은 무조건 90 이하의 값이 오기 때문이다. 이를 이용하여 조건문을 보다 간결히 세울 수 있다.

그리고 if 문과 else if문에 조건식에 만족하지 않을경우 else 문의 실행코드가 실행되기 때문에 else 문은 주로 오류가 나는 것을 방지하는 예외처리로 사용기도 한다.

연산자란?
  • 연산자는 컴퓨터한테 여러가지 계산을 하기 위해 사용된다. Js에는 여러가지의 연산자들이 많지만 이번엔 그중에서 많이 사용되고 꼭 알아야할 연산자 3부류에대해 알아보도록 하겠다.

 

 

 

산술연산자
  • 산술연산자는 우리가 흔히 쓰는 계산기의 역활을 하는 연산자이다. 산술연사자의 종류는 아래와 같다.
+ 더하기
- 빼기
* 곱하기
/ 나누기
% 나머지

 

살면서 산술기호는 많이 봤을테지만 % 기호는 처음 볼것이다. % 연산은 나눗셈을 한 결과의 몫이 아닌 나머지값이 결과로 출력되는 연산자이다. 

let plus = 6 + 2;	//덧셈
let minus = 6 - 2;	//뺄셈
let multi = 6 * 2;	//곱셈
let divide = 6 / 2;	//나눗셈
let remain = 6 % 2;	//나머지 연산

console.log(plus, minus,multi, divide, remain);
// "8 4 12 3 0" 출력

 

 

산술연산자를 사용할때 매우 주의해야할 점이 있다. 산술연산자는 string 타입의 데이터를 number 타입 데이터와 같이 사용할때 데이터타입의 변환이 일어난다는것이다. 아래의 예제를 통해 알아보자.

let a = 1 + "1";	// "11" 출력
let b = 1 + "만원";	// "1만원" 출력
let c = 1 - "1";	// 0 출력
let d = 10 + "10";	//"1010" 출력
let e = a + 1;		//"111" 출력

console.log(a,b,c,d,e);

 

변수 a 에서는 number 타입 1과 string 타입 1을 더했다. 그 결과 2라는 값이 아니라 11 이라는 string 값이 출력되었다. e 변수에서는 a값에 number 타입의 1을 더했지만 string 타입으로 변환되어 "111" 이 출력되는것을 볼 수 있다.

하지만 또 반면에 변수 c 를 보면 number 타입 1에서 string 타입의 1을 뺀결과 number 타입의 0 이 출력된것을 볼 수 있다.

 

필자가 말한 주의해야할 점은 자동 타입변환이다. 이는 사용하는것에따라 편리할 수 있지만 반면에 코드에서 에러를 내는 주요원인이 될 수 있기 때문에 주의해야한다.

 

 

 

 

 

비교연산자
  • 비교연산자는 두개의 피연산자를 서로 비교하는 연산자이다. 비교연산자의 종류는 아래와 같다.
> 왼쪽 피연산자 값이 더 크면 true 반환
< 오른쪽 피연산자 값이 더 크면 ture 반환
>= 왼쪽 피연산자 값이 더 크거나 같으면 ture 반환
<= 오쪽 피연산자 값이 더 크거나 같으면 ture 반환
== 양쪽 피연산자가 서로 같으면 ture 반환
=== 양쪽 피연산자의 타입과 값이 모두 같으면 true 반환
!= 양쪽 피연산자가 서로 다르면 ture 반환
!== 양쪽 피연산자의 타입 또는 값이  다르면 true 반환

 

let a = 6 > 2;		//true
let b = 6 < 2;		//false
let c = 6 >= 6;		//true
let d = 6 <= 6;		//true
let e = 6 == "6";	//true
let f = 6 === "6";	//false
let g = 6 != "6";	//false
let h = 6 !== "6";	//true

console.log(a,b,c,d,e,f,g,h);
//"true false true true true false true false" 출력

 

상당히 직관적인 > , < 와 같은 비교연산자와 달리 ==, === 와 같은 비교연산자는 이 둘의 차이가 무엇인지 잘 와닿지 않을 수 있다. 이를 위해 예제를 간단히 풀이하자면 위 예제에선 number 타입의 6 과 string 타입의 6 두가지를 비교한것이다. 하지만 == 연산자에선 true 가 반환되고 === 연산자에선 false 연산자가 반환되었다. 이둘의 차이점은 타입변환의 시행 유무에 있다. == 연산자는 타입변환이 일어나 이 둘의 값이 같기 때문에 true 가 반환되고 === 연산자는 타입변환이 일어나지 않아 이 둘의 데이터 타입이 다르기 때문에 false가 반환된것이다. 

 

 

 

 

 

 

논리연산자
  • 논리연산자는 조건에 부합하는지에따라 참과 거짓을 판별하는 연산자이다. 논리연산자의 종류는 아래와 같다.
&& AND 연산자로 양측 피연산값이 모두 true 여야 true 반환
|| OR 연산자로 양측 피연산값 중 하나라도 true 면 true반환

 

//AND 연산자
let a = (6 > 2) && (6 > 5); 	//true
let b = (6 > 2) && (6 > 7);	//false

//OR 연산자
let c = (6 > 7) && (6 > 5);	//true
let d = (6 > 9) && (6 > 10);	//false

console.log(a,b,c,d);
//"true false true false" 출력

 

위 예제에서 a 변수는 (true && ture) 로 양측 피연산값이 모두 true 이기 때문에 AND 연산에서 true가 반환되지만 b 변수에서는 (true && false) 로 우측 피연산값이 false 이므로 false가 반환된다. 

 

c 변수에서는 (false || ture) 로 우측 피연산값이 true 이므로 true 값을 반환한다. 반면에 d 변수에서는  (false || false)로 양측 피연산값이 모두 false 이므로 false 를 반환한다.

객체란?
  • 객체란 다양한 데이터를 하나의 변수에 저장할 수 있는 데이터 타입이다. 이는 배열과 비슷한 느낌을 주지만 전혀 다르다. 배열은 책장이라면 객체는 책장에 배열되는 파일이다. 이 말을 이해하기 위해서 먼저 객체의 생김새부터 알아보자. 객체의 선언과 사용방법은 아래와 같다.
데이터타입(let,var,const) 객체이름 = { key: value };

// 아래는 사용 예시이다.

let object1 = {
    name = "홍길동",
    locate="서울시",
    age=22
}

 

객체의 내부는 키(key) 와 값(value)로 이루어져있다. 이는 사전과 비슷하다고 생각하면 된다. 우리가 사전에 "name" 이라는 영단어를 검색했을때 "이름" 이라는 값을 얻을 수 있듯이, key를 이용하여 value 값에 접근할 수 있다. 다음은 객체안에 있는 데이터에 접근하는 법에대해 알아보자.

 

 

 

 

닷노테이션
  • 닷노테이션은 .(점)을 활용하여 key 값으로 value 값을 가져오는 방식을 말한다. 사용 방법은 아래와 같다.
닷노테이션 코드 양식

객체이름.key

// 아래는 사용 예시이다.

let client = {
    id:"gomboy11",
    pw:"password",
    phone:"010-1234-5678"
}

console.log(client.id);	// gomboy11 출력
console.log(client.pw); // password 출력
console.log(client.phone); // 010-1234-5678 출력

 

위 코드에선 client 라는 이름의 객체를 생성하고 id,pw,phone 이라는 key(키) 값과 그에 맞게 value 값을 선언했다. 이후 닷노테이션 방식을 통해 console.log 로 client 의 value 값을 출력했다.  객체는 "key: value" 의 형태를 가지고  client 객체는 id:"gomboy11" 가 선언되어있으니 id가 keygomboy11이 value 기 때문에 client.id 는 id 의 value 값인 gomboy11이 출력된것이다. 이렇듯 .(점)을 활용하여 key값으로 value 값을 가져오는 방식이 닷노테이션이다.

 

 

 

 

브라켓노테이션
  • 브라켓노테이션은 닷노테이션과 비슷하지만 [](대괄호) 를 사용하여 key값으로 value 값을 가져온다.
브라켓노테이션 코드 양식

객체이름["key"]

// 아래는 사용 예시이다.

let client = {
    id:"gomboy11",
    pw:"password",
    "bank account" : true
}

console.log(client["id"]);	// gomboy11 출력
console.log(client["pw"]);	// password 출력
console.log(client["bank account"]); // true 출력

console.log(client.bank account);   //문법오류
console.log(client."bank account"); //문법오류

 

브라켓노테이션의 기본적인 개념은 닷노테이션과 흡사하다. 객체 이름과 key 값을 통하여 value 값을 가져온다는 기능은 같지만 그 과정에서 차이가 있다 .브라켓노테이션은 [](대괄호)를 사용한다. 위 예제코드를 보면"gomboy11" 이라는 값을 얻기위해 client 라는 객체의 id 라는 키값을 활용하였다. 코딩을 할때 기본적으로 닷노테이션을 압도적으로 많이 사용된다. 하지만 브라켓노테이션이 사용될때는 위 예제코드의 "bank account" 와 같이 key 값이 복수 단어로 이루어져있을때 이를 닷노테이션으로 접근하고자하면 문법오류가 발생한다. 하지만 브라켓노테이션은 키값의 형식에 제약이 적기 때문에 사용이 가능하다. 이점 유의하자.

 

 

 

 

 

객체와 배열의 활용
  • 배열과 객체를 동시에 사용하면 데이터를 추적관리하는데 있어 매우 유용하게 사용할 수 있다. 우리가 전포스팅에서 배열에대해 알아봤을때 우리는 그저 책장에 종이 한장한장씩 넣고 있었다면 객체와 배열을 동시에 활용하면 책장안에 파일을 넣고 종이의 내용별로 각기 다른파일에 담아 추적관리 할 수 있다. 예제를 통해 알아보자.
// 객체만을 사용했을 경우
let client1 = {name:"김씨",age:22};
let client2 = {name:"양씨",age:23};
let client3 = {name:"이씨",age:25};
let client4 = {name:"방씨",age:21};


//객체와 배열을 동시에 사용했을경우
let client = [
	{name:"김씨",age:22},
	{name:"양씨",age:23},
	{name:"이씨",age:25},
	{name:"방씨",age:21}
]

------이해를 돕기위한 자료(실제 데이터값(주소값)은 동일하지 않음)--------
client[0] == client1
client[1] == client2
client[2] == client3
client[3] == client4

// 배열을 사용한 만큼 배열의 index에대한 이해가 있어야한다.

 

배열과 객체를 동시에 사용하는것은 처음엔 이해하기 어려울 수 있다. 하지만 배열은 for문과 밀접한 관계가 있고 반복문을 통해 손쉽게 데이터에 접근할 수 있으니 이는 극복해야할 한가지의 과제라고 생각한다. 위 배열안에 객체가 어떻게 저장되어 있는 이해하기 쉽게 시각적으로 그림을 그려봤다. 

배열안에 객체

 

그저 조금이라도 이해하기 편하도록 시각화하여 그린것이다. 위 사진은 예제코드에 사용한 client 배열의 모습이다. 선언된 client 배열이라는 책장에는 0번째칸, 1번째칸, 2번째 칸, 3번째칸이 있다. 그리고 각 칸에 객체라는 파일을 저장했다.  0번째 index의 객체 즉, 0번째칸에 저장된 파일 안에는 name이라는 key 와 age 라는 key가 있고 각각은 "김씨",22 라는 value 값을 가지고 있는 것이다. 각 데이터에 접근하는 방식은 아래와 같다.

 

let client = [
	{name:"김씨",age:22},
	{name:"양씨",age:23},
	{name:"이씨",age:25},
	{name:"방씨",age:21}
]

console.log(client[0].name); // "김씨" 출력
console.log(client[1].name); // "양씨" 출력
console.log(client[2].name); // "이씨" 출력
console.log(client[3].name); // "방씨" 출력

----반복문을 활용한 예시-----

for(let i = 0; i < client.length; i++){
	console.log(client[i].name);
}  // 출력 값은 8 ~ 11 줄의 코드의 결과값을 합친것이다.

 

client[0] 은 client 배열의 0번째 index 를 의미한다. client[0]에는 객체가 저장되어 있으므로 닷노테이션 방식을 활용할 수 있다. 위 예제에서는 닷노테이션을 활용하여 name 의 value 값을 출력했다. 이처럼 배열과 객체를 사용할때 배열의 몇번째 index에 어떤 데이터가 있는지 정확히 알고 또 정확히 접근할 수 있어야 개발자가 원하는 방향대로 데이터를 추적관리 할 수 있다. 그리고 위 예제코드에서는 단 4개의 데이터만 다뤘기때문에 그냥 일일히 코딩하는것이 간편해보일지 몰라도 다뤄야하는 데이터가 100개가 넘어가면 100줄의 코드를 입력해야한다. 하지만 반복문을 사용한다면 단 3줄로도 해당 문제를 해결할 수 있다. 이처럼 배열과 반복문은 자주 같이 사용된다. 다음 시간에는 이러한 반복문에대해 자세히 다뤄보도록 하겠다.

배열이란?
  • 배열이란 여러개의 데이터를 한번에 저장하고 관리하게 편하게 해주는 기능이다. 배열을 왜 쓰는가 의문이 든다면 아래 예시가 있다.
let name1 = "홍길동";
let name2 = "코난";
let name3 = "나루토";
let name4 = "블리츠";

//위 코드를 배열을 사용하여 저장할경우 아래와 같이 간편하게 저장할 수 있다.

let array1 = ["홍길동", "코난", "나루토", "블리츠"];
const array2 = ["홍길동", "코난", "나루토", "블리츠"];

 

이처럼 다수의 데이터를 한번에 저장할 수 있기때문에 배열은 데이터를 관리,저장하기 편하다는 장점이 있다. 그렇다면 이제 배열에대해 자세히 알아보자.

 

 

 

배열의 선언
  • 배열을 선언하는 법은 다른 변수를 선언하는 방법과 동일하다. 다만 한가지 다른점이 있다면 [](대괄호) 를 이용하여 할당을 해주어야한다는 점이다. 배열의 선언방식은 아래와 같다.
let (배열이름) = ["값"];
const (배열이름) = ["값"];


//예시 코드

let studentScore = [80,90,20,78];
const studentScore = [80,90,20,78];

 

이때 변수 선언을 위해서 var 을 사용해도 되지만 var의 불편한 점들때문에 let을 더 많이 사용한다. 이점 유의하자. 이제 배열의 선언방식을 알아봤으니 배열의 구조에대해 알아보자.

 

 

 

배열의 구조
  • 배열의 구조는 일렬로 정렬되어 있는 책장이라고 생각하면 된다. 배열은 각 칸마다 하나의 값을 저장하고 0번부터 n번까지 번호를 매긴다. 직관적이해를 위해 아래의 사진을 그려왔다.

배열의 구조

배열에 값을 할당하게 되면 왼쪽 0번부터 데이터가 저장되게 된다. 이후에 한칸씩 늘려가면 1번,2번...n번까지 배열에 데이터가 저장된다. 이러한 구조를 알아야 배열을 잘다룰 수 있다. 왜냐하면 배열은 주로 반복문을 통해 많이 다루게 되는데 이때 자신이 원하는 배열의 데이터값을 꺼내기 위해서 배열의 몇번째칸에 데이터가 들어가있는지 파악할 수 있어야한다. 그렇다면 이제 배열의 사용에대해 알아보자.

 

 

 

배열의 사용
  • 배열을 사용하는데 있어 배열에서 제공하는 메소드가 있다. array 라는 이름으로 선언된 배열이 있을때 아래의 표는 이 배열로 사용할 수 있는 메소드의 종류이다.
array.length 배열의 길이
array.push() 배열에 맨끝에 데이터 추가
array.pop 배열 맨끝에 있는 데이터 삭제
array.includes() 배열이 해당 값을 가지고 있는지 검색
array.concat() 두 배열을 합체
array.split() 문자열을 분할하여 배열로 변환
array.join() 배열이 가진값을 문자열처럼 합체

 

 

 

 

 

array.length
  • array.length 는 해당 배열의 길이를 제공하는 메소드이다. 
let name = ["원피스","나루토","코난","홍길동"];

console.log(name.length);  // 4 출력

 

위 코드에선 name 이라는 이름의 배열에 총 4개의 값이 들어가있으므로 .length 메소드를 호출했을때 4라는 값을 반환하게 된다. 이때 혼동하면 안되는 것이 배열의 길이는 4이지만 배열의 마지막 데이터인 "홍길동" 이 들어가있는 자리는 3번이다.  이 메소드는 반복문에서 해당 배열의 길이만큼 반복문을 실행시키는 조건문을 작성할때 많이 사용하게 될것이다. 이 외에도 많은곳에서 사용되는 메소드이다.

 

 

 

 

 

 

array.push()
  • array.push()는 저장할 데이터를 추가하는 메소드이다. 이해를 돕기위해 비유를 하자면 "프링글스 통안에 감자칩을 집어넣는것" 라고 생각하면될것같다. 즉, 기존에 있던 데이터에 데이터를 추가하는것이고 이를 통해 배열의 길이도 증가한다. 
let name = ["루피","나미","샹디","조로"];
name.push("우솝");

console.log(name)  //  "루피 나미 샹디 조로 우솝" 출력

 

위 메소드를 사용하면서 주의해야할점은 배열의 길이가 늘어난다는 것이다. 즉, 처음 배열을 선언할때의 길이는 4이지만 name.push를 통해 "우솝" 이라는 값을 추가했을때 배열의 길이는 5가된다. 이점 유의하자.

 

 

 

 

 

array.pop
  • array.pop() 메소드는 push 와는 반대로 마지막에 있는 데이터를 삭제하는 메소드이다. push에서 설명한 비유를 다시 가져와보면 pop 메소드는 "프링글스 통에서 감자칩을 꺼내먹는 것" 이다.
let name = ["루피", "나미","샹디","조로","우솝"];
name.pop();

console.log(name); // "루피 나미 샹디 조로" 출력

 

위 메소드를 사용할때 주의해야할 점은 가장 마지막에 있는 데이터가 삭제된다는 것이다. 우리가 프링글스를 먹을때 위에 있는것을 놔두고 맨 밑에 있는것을 꺼내먹지는 않듯이 pop 메소드도 맨위 즉, 가장 마지막 데이터인 "우솝" 이라는 데이터가 삭제된다. 이 메소드 역시 배열의 길이에 영향을 주니 알아두자.

 

 

 

 

 

array.includes
  • array.includes 메소드는 입력된값이 배열안에 있는지 확인하는 메소드이다.
let name = ["루피", "나미","샹디","조로","우솝"];
let judge1 = name.includes("나미");
let judge2 = name.includes("쵸파");

console.log(judge1); // ture 출력
console.log(judge2); // flase 출력

 

설명을 위해 코드를 해석하자면 "name.includes("나미");" 이라는 코드는 name 이라는 배열안에 "나미" 라는 값이 들어가있는지 묻는 코드이다. 위 선언된 배열에 "나미" 라는 값이 있으므로 해당 메소드는 true 를 반환하고 이 반환된 값이  judge1 이라는 변수에 저장되는 것이다. 

 

즉, 배열에 "나미" 라는 값이 있으므로 judge1 이라는 변수에는 true가 저장되고 배열에 "쵸파" 라는 값이 없으므로 judge2 라는 변수에는 false 가 저장된것이다. 해당 메소드는 조건문과 합이 잘맞는다.

 

 

 

 

 

array.concat()
  • array.concat() 메소드는 두개의 배열을 합치는 배열이다. 즉, 두개의 프링글스통을 합치는 것이다.
let partner = ["루피","나미","샹디","조로"];
let newPartner = ["쵸파","로빈","프랑키","브록"];

let newMember = partner.concat(newPartner)


console.log(newMember);//[
 				'루피',   '나미',
 				'샹디',   '조로',
 				'쵸파',   '로빈',
 				'프랑키', '브록'
			] 출력
console.log(newMember.length);	//8출력
console.log(newMember[4]);	//쵸파 출력

 

위 메소드를 사용하면서 주의 해야할점은 메소드를 사용한 배열을 기준으로 마지막으로 저장된 데이터 뒤로 데이터가 추가된다는 점이다. 위 코드를 예시로 설명하자면 위 코드에서는 partner.concat() 메소드를 사용하였다. 즉, partner 라는 배열을 기준으로 newPartner 라는 배열을 추가한것이다. 그렇기 때문에 partner에 마지막으로 저장된 값인 "조로" 뒤쪽으로 값이 저장된다. 그 증거로 newMember[4](newMember 라는 배열의 4번째 자리) 를 출력해봤을때 "쵸파" 라는 값이 출력된다. 

 

 

 

 

array.split()
  • array.split() 메소드는 문자열을 입력된 값을 기준으로 분할해 배열로 변환해준다.
let email = "gomboy11@naver.com";
let userInfo = email.split("@");

console.log(userInfo); //[ 'gomboy11', 'naver.com' ] 출력

--------------------------------------------------------------------------

let word = "spring summer fall winter"
let season = word.split(" ");

console.log(season); //[ 'spring', 'summer', 'fall', 'winter' ] 출력

 

위 코드에서 email.split("@") 는 "@" 을 기준으로 해당 문자열을 분할해달라는 것이다. 그 결과 gomboy11@naver.com 이라는 문자열이 gomboy11 과 naver.com 로 분할되어 userInfo 라는 배열에 들어가게된것이다. 그 아래 예시는 " " 즉, 띄어쓰기를 기준으로 문자열을 분할한결과 4개의 단어가 sesaon 이라는 배열에 저장된것을 볼 수 있다. 

 

 

 

 

 

array.join
  • array.join 메소드는 배열안에 있는 값들을 합쳐 문자열로 변환해주는 메소드이다.
let season = ["spring","summer","fall","winter"];

console.log(season.join(" ")); //spring summer fall winter  출력
console.log(season.join("-")); //spring-summer-fall-winter 출력

 

season.join(" ") 코드는 season 이라는 배열이 가지고 있는 값들 사이에 " "(띄어쓰기) 를 포함해서 합쳐달라는 것이다. 만일이를 지정하지 않으면 "," 이라는 값이 출력된다. 출력된 값은 위와 같다.

반댈로 season.join("-"); 이라는 코드는 값들 사이에 "-" 이라는 값을 추가하여 합쳐달라는 것이다. 결과는 위와 같다. 

 

 

 

 

+ Recent posts