TIL 8일차 - [JavaScript] 반복문, 함수

Yoon Kyung Park·2023년 4월 19일
0

TIL

목록 보기
8/75
  • for 반복문을 작성할 수 있다.

o
for (let 초기값; 조건식; 증감식)
주로 정수를 의미하는 integer의 약자 i를 변수로 쓴다.
for문은 초기값과 조건식을 평가한 후, 반복하여 작업을 수행한다.
초기값은 시작하는 값을 정해주고, 조건식은 어디까지 반복할 것인지 범위를 정해주고, 증감식은 얼마만큼 증가/감소할 것인지를 정한다.

  • for 반복문이 여러 개의 코드 블록의 조합이라는 것을 이해한다.

o
for문은 for문 안에 if문, for문을 중첩하여 사용할 수 있다.

  • 구구단 n단 출력을 반복문으로 구현할 수 있다.

o
구구단은 값을 나타낼 단의 수와 1~9까지의 수를 곱하여 값을 나타내는 식이다.
따라서 반복되는 부분을 if문, for 반복문으로 간결하게 표현할 수 있다.

각 수(단)에 1*9를 곱할 값을 나타낼 것이다.

let num = 2;
if(num >=2 && num <= 9){
	for(let i=1; i<=9; i++){
		console.log(`${num} * ${i} = ${num * i}`);
   }
}else {
	console.log('2와 9사이의 수를 입력하세요.');
}

// 
``(백틱)을 쓰면 문자열 안에서 변수를 삽입할 수 있다. 
변수는 ${⬇️} 안에 넣어주면 된다. (템풀릿 리터럴)

// 
변수 num에 2를 할당해서 2단을 구했다.
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
2 * 6 = 12
2 * 7 = 14
2 * 8 = 16
2 * 9 = 18

// 
만약, 11을 넣어보면, else문의 값이 출력된다.
let num = 11;
...
2와 9사이의 수를 입력하세요.
  • 반복문 내부에 조건문을 활용할 수 있다.

o
반복문 내부에서 특정 조건에 따라 조건을 추가하여 실행하고 싶을 경우,

인덱스가 짝수인 문자만 출력하라.

let str = 'hello world';
for(let i=0; i <= str.length-1; i++){
	if(i % 2 === 0){
    	console.log(str[i]);
    }
} 

// 
인덱스는 자바스크립트에서 배열요소에 대한 위치 정보로 첫번째 요소는 0부터 센다.

//
str[i]는 자바스크립트에서 문자열의 i번째 문자가 
몇 번째에 있는지 참조하는 방법이다. 
문자열은 문자의 배열로 이루어져 있으므로 
인덱스를 사용하여 개별 문자의 위치를 알 수 있다.

// 짝수인 인덱스만 골라서 하나씩 출력함.
h
l
o
w
r
d
  • 이중반복문의 동작 순서를 이해할 수 있다.

o
이중반복문이랑 반복문 내부에 또 다른 반복문이 있는 반복문이다.
이중반복문 말고도 삼중반복문도 있다.
이는 주로 경우의 수나 다차원 배열을 탐색하거나 리스트 내에 행렬을 탐색할 때 주로 사용한다.
이중반복문의 동작 순서는 예전에 수학 시간에 경우의 수를 구하는 식 대신
노가다로 경우의 수를 풀어서 값을 구했을 때를 떠올리면 쉽게 이해할 수 있다.

일단 {외부 반복문}이 있고, 그 안에 (내부 반복문)이 있다.
우선 {외부 반복문의 초기화와 조건식의 평가}가 이루어진 후, true인 경우,

(내부 반복문의 초기화와 조건식의 평가)가 이루어진 후, true인 경우,
내부 반복문의 (내부에 있는 코드가 실행되고 증감식 만큼 반복)된다.
내부 반복문의 초기화와 조건식의 평가가 false인 경우,
(내부 반복문은 종료)되고,

외부 반복문으로 올라와
{외부 반복문의 초기화와 조건식의 평가}가 다시 이루어진다.
true면, 다시 (내부 반복문를 순환)한다.
이를 {외부 반복문의 조건식까지 반복}하고,
외부 반복문의 조건식의 평가가 false가 되면
{외부 반복문도 종료}되면서 모든 반복문이 종료된다.

Q. 정육면체 주사위 두 개를 굴려서 나올 수 있는 모든 경우의 수를 구하라.

for(let i=1; i<=6; i++){
		for(let j=1; j<=6; j++){
        	console.log(`첫번째 주사위는 ${i}, 두번째 주사위는 ${j}다.`)
        }
}

//
다음과 같이 총 36개의 결과가 나온다.

첫번째 주사위는 1, 두번째 주사위는 1다.
첫번째 주사위는 1, 두번째 주사위는 2다.
첫번째 주사위는 1, 두번째 주사위는 3다.
...

첫번째 주사위는 6, 두번째 주사위는 4다.
첫번째 주사위는 6, 두번째 주사위는 5다.
첫번째 주사위는 6, 두번째 주사위는 6다.
           
  • 구구단 1-9단 출력을 이중반복문으로 구현할 수 있다.

o

for(let num = 2; num <= 9; num++){
	console.log(`${num}단`);
		for(let i=1; i <= 9; i++){
        	console.log(`${num} x ${i} = ${num * i}`);
        }
}        

//
다음과 같이 2단부터 9단까지 나온다.
2단
2 x 1 = 2
2 x 1 = 4
...
9단
9 x 1 =9
9 x 2 = 18
...
9 x 8 = 72
9 x 9 = 81

  • for반복문과 while반복문의 차이점을 설명할 수 있다.

o
for문과 while문은 반복문을 나타내기 위해 사용되며 서로 대체해도 된다.
다만, 차이가 있다.

for문은 초기화, 조건식, 증감식이 필요한 반면,
while문은 조건식만 필요하다.
그렇기 때문에 반복횟수가 비교적 명확하고 반복문 중첩이 필요한 경우에는
for문을 사용하고, 반복횟수가 명확하지 않을 때는 while을 주로 사용한다.

for문의 경우, for문 안에 초기화, 조건식, 증감식이 들어있는 반면,
while문은 초기화는 while문 밖에 지정해주고, while문 내부에는 증감식을 적어준다.

for문은 일정한 횟수 만큼 반복 실행하기 때문에 초기화와 조건식을 평가하고 반복한 후 작업을 모두 한번에 처리 가능하여 코드 작성이 간단하다.
조건식 평가가 false인 경우 그 즉시 실행을 중단한다.
while문은 조건이 참인 경우 코드 블록 내의 코드를 계속 실행하여 무한히 반복되는 무한루프 현상이 발생할 수 있다. 이를 방지하기 위해 while문 내부에 조건식이 false가 되는 반복문을 넣거나 break를 넣어 실행을 중단하도록 한다.

  • for반복문으로 작성된 코드를 while반복문으로 바꿀 수 있다.

o

for(let num=0; num < 3; num++){
	console.log(num);
}
--->
let num = 0;
while(num<3){
	console.log(num);
    num++;
	if(num === 3){
    break;
    }
}
  • 함수표현식, 함수선언문으로 함수를 정의하고 호출할 수 있다.

o
함수표현식은 let 키워드를 사용하여, 변수명을 선언하여 함수를 할당한다.
함수선언문은 function 키워드를 사용하여 함수명을 선언하여 정의한 함수다.

🔸 함수표현식: 
let greeting = function(name){
	return 'hello ' + name;
}

greeting('Kim') // 매개변수 name에 'Kim'을 넣어 호출하면,
hello Kim      // 출력된다.

🔸 함수선언문:
function greeting(name){
	return 'hello ' + name;
}

greeting('Kim')  // 매개변수 name에 'Kim'을 넣어 호출하면,
hellp Kim       // 출력된다.
  • 매개변수와 전달인자에 대해 설명할 수 있다.

o
위의 함수선언문을 보면, 함수 외부로 부터 어떠한 값이 들어올지 모르므로 함수 코드 내에서 변수처럼 취급된다. 매개변수는 여러개 사용할 수 있다. 여기서는 name이 매개변수(parameter)다.
이미 소괄호()에 들어간 순간 'name'이라고 이름 지어주었기에
아래 함수 내에서 중복으로 선언할 수 없고, 함수 내부에서만 사용해야 한다.

전달인자(argument)는 호출할 때, 함수선언문에서는 함수명/ 함수표현식에서는 변수명 뒤에 오는 소괄호() 안의 값으로 매개변수에 원하는 값을 할당할 수 있다.

매개변수와 전달인자는 배치가 잘 이루어져야 한다.
매개변수의 수가 전달인자의 수보다 많으면, 전달인자가 없는 매개변수는
undefined이 나오도록 초기화 되어있다.
매개변수와 전달인자를 잘 사용하면,
필요할 때마다 함수 외부에서 함수 내부로 값을 전달할 수 있다.

  • 함수에 return문이 필요한 이유를 이해한다.

o
함수 내에서 실행한 결과를 함수 외부로 내보내 주기 위해서는 return문을 사용해야 한다. return은 함수 외부에서 호출된 값을 매개변수가 받아오면 함수 내에서 정한 조건을 실행하여 함수 밖으로 결과값을 반환한다.
함수는 return을 지나면, 그 순간 그 함수의 실행이 중단되며,
return 뒤에 오는 코드들은 실행되지 않는다.

console.log()는 출력값이지 반환값이 아니다. 출력값은 값을 낸 것이 아니라 함수 내에서 값을 찍어본 것이므로 컴퓨터가 읽기만 하고 값으로 받아들이지 않은 값을 출력하므로 undefined으로 나온다.

반면, return은 함수 내에서 실행한 값을 함수 외부로 내보내어 컴퓨터가 값으로 인식할 수 있는 값을 반환하여 함수 내에서 실행한 값이 나온다.

  • 함수를 이용해 구구단 n단을 출력하는 재사용이 가능한 코드를 작성할 수 있다.

o

function multiply(n) {
	for(let i = 1; i <= 9; i++) {
		console.log(n * i);
	}
}

multiply (5)  // 5를 넣어 5단을 출력하라
5
10
...
40
45

소감

🔡➡️💻➡️🤓👍

이해하기는 어렵지 않았지만, 문제에 적용하기가 쉽지 않았다.
그 이야기는 내가 100% 이해하지 못했다는 것이겠지.
페어분이 도와주셔서 푼 거지 내 힘으로 푼 거는 아직 많지 않다.
나도 어느 순간 지식들이 스며들어 눈이 뜨이고 문제가 보이겠지.

그때 다시 돌아와 나의 기록들을 보면,
웃기기도 하고, 안쓰럽기도 하고, 대견하기도 할 거 같다.
그리고 생각하겠지.
그때의 너 덕분에 지금의 내가 웃을 수 있다고.
그때 고생해준 덕분에 지금 내가 좀 더 수월하게
코드를 읽고 관련 문제를 잘 해결해가고 있다고.
그때의 너가 없었다면,
나는 무슨 일을 해도 쉽게 포기하는 삶을 살아갔을 거라고.

'첫 술에 배부를 수 없다.'는 말을
코딩을 하는 동안 많이 듣는다.
물론 코딩 뿐만 아니라 살아가면서 첫 술에 배부를 수 없다.
그건 정말 욕심이다.
너무 쉽게 가지려는 욕심.
보이는 것의 이면을 전혀 살펴보지 않은 오만.
그리고 나는 쉽게 가질 수 있다는 착각.

첫 술에 배부를 수는 없어도,

먹다 보면 보이겠지.
무엇을 먹어야 배가 부르고,
무엇을 먹어야 맛이 있는지,
무엇을 먹어야 건강한지.

무슨 맛인지 몰라서 아무거나 먹다가
탈이 날 수도 있고,
급하다고 마구잡이로 먹다가
체할 수도 있다.

그러니
한 술 한 술 꼭꼭 씹어가며,
내가 지금 무엇을 담고 있는지,
무슨 맛이 나는지를 음미하며
그렇게 배를 채워보자.

🧚 반드시 나는 해낼 것이다!🧚
🧚 분명 나는 지금의 나에게 고마워 할 것이다!🧚
🧚 스쳐지나가는 모든 것들에서 영향을 받듯이 의미 없는 건 없다!🧚

profile
developerpyk

0개의 댓글