일지이기 때문에 일기의 성격이 더 강합니다.

이어서 1월 8일에는 switch문과 for, while문, 그리고 배열(Array)에 대해서 배웠다. 1월 9일에는 함수에 대해서 배웠는데, 해야할 말이 있어서 TIL 특별편과 함께 하겠다.
switch문
switch문은 여러 조건 중 하나를 선택해서 실행하는 제어문이다. 여러 조건(case)을 처리할 수 있다는 장점이 있지만, 제약이 많다. 수식과 결과값이 간단하지 않을 경우, if문을 사용하는 것이 낫다.
const day = '월요일';
switch (day) {
case '월요일':
console.log('월요일입니다');
break;
case '화요일':
console.log('화요일입니다');
break;
case '수요일':
console.log('수요일입니다');
break;
default: //만약 아무것과 일치하지 않으면 default의 결과가 나타난다.
console.log('기타 요일입니다');
break;
}
수식에 들어갈 것은 정수, 실수, 문자열, 객체 등이어야 한다. 간단한 비교 연산 정도는 가능하다. 또한 case 다음에 오는 value는 하나의 값만 사용되어야 한다. 결과 또한 간단해야 한다. 복잡한 처리는 어렵다.
사용하는 break의 경우 해당 case에서 실행을 멈춘다는 의미이다. 만약 없다면 다음 case까지 이전된다.
for문
for문과 while문은 반복문이다. for문은 for(초기식; 조건식; 증감식) { 반복 수행문 } 형태로 사용한다. 조건식이 true인 이상은 반복 수행문은 계속 이루어진다. false가 될 경우 그대로 멈춘다. 대체로 for문을 사용할 때는 for(let i = 0; 조건식; i++) {} 형태로 사용한다.
for(let i = 0; i<10; i++) {
console.log(i); //0부터 9까지의 숫자가 콘솔에 표기된다.
}
for문 안에 for문을 사용하는 것 또한 가능하나, 변수를 똑같이 i로 사용하면 에러가 일어난다. j나 k와 같은 다른 변수를 사용하여야 한다.
for in문
for(let i in 배열) { num = arr[i] } 와 같이 배열을 세기 위해서 사용한다. 다만 보통의 경우 배열의 수를 세어서 사용하는 for문을 사용하는 편이다. 왜냐하면 for in의 경우 인덱스 반환만 가능하며 값 반환은 하지 못하기 때문.
배열.forEach()
forEach는 배열을 순회하며 콜백 함수를 실행한다. 배열.forEach(function(요소, 인덱스, 배열) { }); 형태로 사용된다.
const fruits = ['사과','바나나','포도'];
fruits.forEach(function(item, index){
console.log(item); //배열의 항목을 출력한다
console.log(index); //배열의 인덱스(순서 번호)를 출력한다.
});
while문
for문처럼 반복문으로 사용한다. 초기값을 적은 후 while(조건식) { 반복 수행문; 증감++; } 형태로 나타난다. for과의 차이는 while은 좀 더 조건을 중심으로 하는 구성이란 것이다. 그리고 반복 횟수가 불명확할 경우에는 for문대신 사용된다. 즉, for문은 한정적인 횟수가 있는 반면, while은 무한정으로 뻗어나갈 수 있다. 이 때문에 불안정하기도 해서, 보통은 안정적인 for문을 사용한다.
let count = 0;
while (count < 70 && count % 7 !== 0) {
count++;
}
do ~ while
do { 반복문 } while(조건식); 형태로 나오는 것이다. 반복 수행되는 문장을 한 차례 수행, 그리고 뒤에 있는 조건식을 확인한 뒤 참이면 계속 수행, 거짓이면 반목문을 그만두고 다음을 수행한다.
배열Array
배열이란 동일한 이름을 갖는 원소(value)들의 연속적 저장 영역이다. 배열의 원소는 메모리 내에서 순서대로 저장되어, 각 배열의 원소는 인덱스(순서번호 보통 [0]으로 시작한다.)로 구별한다. 참고로, 이 배열들은 각 별개의 메모리를 사용한다. 배열의 원소가 같아도 각 배열은 별개의 것임에 주의하자.
배열을 생성하는 방법은 다음과 같다.
const a = New Array(숫자); //숫자 개의 원소를 가지는 배열을 생성한다.
const b = New Array(값1,값2,값3); //배열 생성과 동시에 원소 값을 저장한다.
const c = [값1,값2,값3]; //배열 생성과 동시에 원소 값을 저장한다.
const d = []; //배열 생성을 한다.
배열의 크기는 배열.length로 알 수 있다.
배열 원소의 값을 추가로 저장하거나 꺼내기 위해서는 배열[인덱스] 를 사용하면 된다. 즉 array[1] = 10;이라면 array라는 배열의 두 번째 인덱스(인덱스는 0부터 시작하므로)에 10을 저장하는 것이다. 위에서 말했듯 for문이나 forEach와의 궁함도 좋다. 연습문제로 냈던 것이 깔끔한 코드라서 예제로 올린다.
let colors = new Array(4); //크기가 4인 배열을 생성.
document.write('<ol type="A">');
for(i = 0; i < colors.length; i++) {
//colors.length를 사용한다. 크기가 4이므로, i가 4가 될 때까지 반복.
colors[i] = prompt('색상 입력');
//colors[i]로 colors의 원소 값을 prompt로 지정한다.
document.write('<li>' + colors[i] + '</li>');
//이후 colors의 원소값을 인덱스별로 출력한다.
}
document.write('</ol>');
배열 복사
배열을 복사한다. 옅은 복사와 깊은 복사가 있는데, 각자 방법, 상세사항이 달라서 이 또한 표로 정리해보았다.
| 구분 | 얕은 복사(Shallow Copy) | 깊은 복사(Deep Copy) |
| 정의 | 객체의 주소만을 복사(1단계 복사) | 복사 시 새로 객체를 생성 |
| 참조 | 내부 객체를 공유 | 완전히 분리된다 |
| 원본 영향 | 내부 객체 변경 시 영향 | 영향 없음 |
| 속도 | 빠름 | 느림 |
| 복사방법 | arrayA = arrayB slice() concat() 스프레드 연산자 |
arrayA = JSON.parse(JSON.stringify(arrayB)) |
| 언제 사용될까? | 바로 복사하여 참조하고 싶을 때. 간단한 작업에 적합 |
외부에서 불러오는 등, 원본 내용을 완전히 보존하고 싶을 때. |
깊은 복사에서 사용되는 JSON.parse()와 JSON.stringify()는 각각 역할이 다르다. JSON.stringify()는 객체(Object) 혹은 배열(Array)을 JSON으로 변환한다. 즉, json 문자열로 변환하는 것이다. json 문자열로 변환되면 하나의 문자열로 취급된다. 여기서 참조 관계가 끊긴다. 그리고 JSON.parse()는 json 문자열을 다시 객체(Object) 혹은 배열(Array)로 반환한다. 그렇기 때문에 사실상 원본을 json 변환 → 변환된 것을 다시 객체로 변환하는 과정이기 때문에, 아예 다른 배열 혹은 객체가 생성되는 것이라 할 수 있다.
여기서 참조 주소에 대한 이야기가 꽤 헷갈려서, 보충학습하여 정리해본다.
위에서 각 배열은 다른 메모리를 할당한다고 적어놓았다. 즉, 보통 이 경우 참조값-주소가 다른 것이다. 그러나 얕은 복사의 경우 이 주소를 그대로 가져간다. arrayB를 얕게 복사한 arrayA는, arrayA 자체가 저장된 메모리 주소(실거주지)는 arrayB와 다르지만, arrayA 내부에 기록된 내부 객체의 주소(주민등록 주소)는 arrayB와 동일하다. 둘 다 같은 내부 객체를 가리키므로 arrayB의 내부 객체를 수정하면 arrayA의 내부 객체도 함께 수정된다.
이에 대하여 참조 주소를 여쭤보았더니 강사님께서 나중에 상세 설명을 해준다고 하셔서 그때 다시 복습해보기로 했다.
'부트캠프 일지 > Java 풀스택 과정 강의' 카테고리의 다른 글
| [Java 풀스택 과정 강의] 1월 12일차 (0) | 2026.01.13 |
|---|---|
| [Java 풀스택 과정 강의] 1월 9일차 (0) | 2026.01.11 |
| [Java 풀스택 과정 강의] 1월 7일차 (0) | 2026.01.10 |
| [Java 풀스택 과정 강의] 1월 5-6일차 (0) | 2026.01.08 |
| [Java 풀스택 과정 강의] 12/31일차 (0) | 2026.01.02 |