우리는 일상생활에서 언제 밥을 먹고 싶은지, 친구와 전화하고 싶은지, 자고 싶은지 누가 알려주지 않아도 잘 알고 있습니다. 배고플 때, 외로울 때, 피곤할 때를 굳이 누가 이야기 해주지 않아도 잘 알고 있죠. 하지만 컴퓨터는 다릅니다. 아마 매일 아침 9시, 12시, 저녁 6시에 밥을 먹기로 되어 있다면, 중간에 간식을 먹었어도 컴퓨터는 아무 생각 없이 밥을 먹게 될겁니다.
컴퓨터가 우리 일상생활에 도움을 줄 수 있는 도구가 되려면, 인간과 비슷하게 작동할 수 있게 어떤 조건에 작동을 해야 한다는 것을 명시를 해줘야 합니다.
우선 조건문은 조건을 비교를 하는 것이므로 그 결과 값이 항상 true 혹은 false 로 귀결된다.
let isHuman = true;
let isHuman = false;
그 예는 아래 코드와 같다.
3 < 5 // true;
3 > 5 // false;
'Yongho' === 'Dongho' // false;
사진 출처 : https://www.codestates.com/
💬 헷갈리면 안되는게 앞에서 배웠듯이 = 은 할당 한다는 뜻이고 === 은 같다 라는 뜻이다.
❗ 같다 라는 뜻으로 !=, == 도 있지만 !==, === 에 비해 같다는 범위가 넓으므로 비교가 더 확실한 !==, === 연산자를 쓰는것이 좋다.
if (조건1) {
조건 1이 true 면 통과
} else if (조건2) {
// 조건 1이 true 가 아니면
// 조건 2가 통과
} else {
// 조건이 모두 통과하지 않는 경우 이 식이 통과
}
두 가지 조건이 모두 true 일 경우 통과시키고 싶으면
&&
연산자를 사용한다. (AND 연산자)
isKorean && isStudent; // 한국인 = true, 학생 = true 면 통과
true && true // true
true && false // false
false && false // false
두 가지 조건 중 한 가지만 true 일 경우 통과시키고 싶으면
||
연산자를 사용한다. (OR 연산자)
isKorean || isStudent; // 한국인 = true, 학생 = false 여도 통과
// 한국인 = false, 학생 = true 여도 통과
true || true // true
true || false // true
false || false // false
조건을 false 로 임의로 조정하고 싶을 경우
!
연산자를 사용한다.
!isKorean || isStudent; // 한국인이 아니거나 학생일 경우 통과
💬 위를 응용하면 아래와 같이도 만들 수 있다.
!false // true
!(2 > 4) // true
!undefined // true
!'Hello' // false
&&
은 falsy 한 값을 만나면 그 값을 출력한다.undefined && 10 // undfined
5 && false // false
💡 둘 다 truthy 한 값이면 뒤에 있는 값을 출력한다.
5 && 10 // 10
||
은 truthy 한 값을 만나면 처음 만난 truthy 값을 출력한다.undefined || 10 // 10
5 || 10 // 5
💡 둘 다 falsy 한 값이면 뒤에 있는 값을 출력한다.
undefined || false // false
문자열(string)이 무엇일까요? 네, 우리가 평소에 보던 그 책에 쓰여있는 글자를 문자열이라고 합니다. 다만 컴퓨터는, 모두 글자로 되어있는 코드를 읽어야 하기 때문에 구분하기 위해서 ' 나 " 을 사용하여 문자열을 구분합니다.
우리가 만들어야 하는 소프트웨어는 외계인이 만드는 어떤 요상한 무언가가 아니라, 여러분의 친구와 가족이 함께 공유하고 사용하여 더 나은 가치를 추구하기 소프트웨어가 되어야 하기 때문에 문자열을 잘 다룰 수 있는 방법에 대해서 충분히 이해하고 있어야 할 것입니다.
이러한 문자열을 다루기 위한 여러가지 메쏘드 (Method) 가 있는데 대표적으로 아래와 같다.
🔵 String 타입과 다른 타입 사이에 + 연산자를 쓰면, String 형식으로 변환
let str1 = 'Kim'
let str2 = 'Yongho'
let str3 = '1'
console.log(str1 + str2); // 'KimYongho
console.log(str3 + 7); // '17'
❗ 여기서 주의할 점은 변수 str3의 값이 '1'
즉, 숫자(Number)가 아닌 문자열(String) 이라는 것이다.
만약 str3 이 '1'
이 아닌 1
이라면 결과는 이렇게 바뀐다.
let str3 = 1
console.log(str3 + 1) // 2
🔵 문자열의 전체 길이를 반환
let str = 'KimYongho'
console.log(str.length); // 9
💬 마지막 원소의 인덱스 값보다 1 큰 수를 반환한다. 따라서 인덱스 값이 8이므로, + 1 을 한 9가 반환된다.
(알파벳 순서대로 단어들, 이름 등을 빠르게 찾을 수 있게 해둔 부분을 인덱스라고 부른다.
인간은 숫자를 1부터 세는 반면, 컴퓨터는 숫자를 0부터 센다.)
🔵 특정 문자열 안 속, 찾고 싶은 문자열에 .indexOf 를 사용하면 왼쪽부터 시작해 처음으로 일치하는 인덱스(Index)를 반환, 일치하는게 없으면 -1 을 반환한다.
'Blue Whale'.indexOf('Blue'); // 0
'Blue Whale'.indexOf('blue'); // -1
'Blue Whale'.indexOf('Whale'); // 5
'Blue Whale Whale'.indexOf('Whale'); // 5
🔵 마지막으로 일치하는 인덱스(Index)를 반환하고 싶으면 .lastIndexOf 를 사용하면 된다.
'banana'.lastIndexOf('a'); // 5
'canal'.lastIndexOf('a'); // 3
🔵 문자열을 특정한 기준에 따라 분리한다.
let str = 'Hi My Name is Yongho'
console.log(str.split(' '))
// ["Hi", "My", "Name", "is", "Yongho"]
💬 위에서 나는 공백을 기준으로 문자열을 분리를 했다. 따라서 전달인자(arguments)에 문자열 ' ' 를 줬다.
자세히 살펴보면 따옴표에 공백이 있다. 그래서 공백을 기준으로 문자열을 나눠 최종 값을 배열에 집어 넣은 모습이다.
만약 공백이 없는 문자열 '' 의 경우 어떻게 될까?
let str = 'Yongho'
console.log(str.split(''))
// ["H", "i", " ", "M", "y", " ", "N", "a", "m", "e", " ", "i", "s", " ", "Y", "o", "n", "g", "h", "o"]
위와 같이 공백을 포함한 모든 요소를 문자열로 나눠 최종 값을 배열에 집어 넣는 모습을 볼 수 있다.
🔵 * 문자열을 지정한 범위에 따라 분리한다.
let str = 'Yongho'
console.log(str.substring(0,3)); // 'Yon', (0번째부터 0,1,2 인덱스)
console.log(str.substring(3,0)); // 'Yon' (start 가 end 보다 크면 자동으로 자리를 바꾼다)
console.log(str.substring(1,4)); // 'ong' (1번째부터 1,2,3 인덱스)
console.log(str.substring(-1,4)); // 'Yong', 음수이거나 NaN 은 0으로 취급한다.
console.log(str.substring(0,1000)); // 'Yongho', index 범위를 넘은 경우 마지막 index 를 end 로 취급한다.
console.log(str.substring(3,3)); // 공백, start 와 end 가 같을 경우 공백을 출력한다.
console.log(str.substring(3)); // 'gho', (end 를 주어지지 않으면 마지막 인덱스를 end로 취급한다.)
console.log(str.substring(0)); // 'Yongho'
❗ .substring 과 동일하게 문자열을 지정한 범위에 따라 분리한다는 면에서 공통적인 .slice 함수가 있지만 몇 가지 차이점이 있다.
.slice 함수의 특징
문자열을 모두 대문자로 바꿔주거나 소문자로 바꿔준다.
console.log('yongho'.toUpperCase()); // 'YONGHO'
console.log('YoNGHo'.toUpperCase()); // 'YONGHO'
console.log('YONGHO'.toLowerCase()); // 'yongho'
console.log('YoNGHo'.toLowerCase()); // 'yongho'
❗ 위와 같은 모든 문자열 메쏘드는 원본이 변하지 않는다. (Immutable)
8번을 예로들면
console.log('yongho'.toUpperCase()); // 'YONGHO'
를 통해 값이 'YONGHO'
가 됐지만 원본 값인 'yongho'
는 변하지 않는다.