📘 2.5.2 언제 typeof
를 사용할까요? - 상자 탐정이 되어야 하는 순간들
창밖으로 부드러운 햇살이 비춰드는 이 오후, 지난 시간에 배운 typeof
라는 소중한 탐정 도구를 떠올려봅니다. 이제 더욱 중요한 질문이 우리 앞에 놓여있어요. "그럼 언제 이 탐정 도구를 사용해야 할까요?"
매번 모든 상자를 들여다보는 것은 너무 번거로울 테고, 그렇다고 확인하지 않으면 예상치 못한 일들이 일어날 수도 있지요. 오늘은 실제로 typeof
를 언제, 어떻게 사용하는 것이 가장 현명한지 함께 알아보겠습니다. 마치 언제 우산을 챙겨야 하는지 아는 것처럼 자연스럽게 말이에요.
🧠 새로운 말들과 친해지기
오늘 새롭게 만날 말들을 차근차근 알아보겠습니다.
어려운 말 | 쉬운 설명 |
---|---|
타입 확인하기 | 상자 안에 어떤 종류가 들어있는지 미리 알아보는 것이에요. |
문제 찾기 | 프로그램이 이상할 때 어디가 잘못되었는지 찾는 것이에요. |
예외 상황 처리 | 예상하지 못한 일이 생겼을 때 대비하는 것이에요. |
안전한 프로그래밍 | 여러 상황에서도 문제없이 작동하는 프로그램을 만드는 것이에요. |
이 말들은 모두 안전하고 현명한 프로그래밍이라는 하나의 목표를 향해 있어요. typeof
는 이 목표를 이루기 위한 소중한 도구 중 하나랍니다.
✨ typeof
사용 시점의 핵심 이해하기
typeof
를 언제 사용할지 결정하는 것은 위험한 곳 찾기와 비슷해요. 마치 의사 선생님이 환자를 보고 어떤 검사가 필요한지 판단하는 것처럼, 프로그래머도 코드를 보고 상자 확인이 필요한지 판단해야 하지요.
가장 중요한 원칙은 "확실하지 않은 곳에 typeof
를 사용한다"는 것입니다. 상자 안에 무엇이 들어있는지 완전히 확신할 수 있다면 typeof
는 필요 없어요. 반대로 어떤 종류가 들어올지 알 수 없다면 typeof
는 꼭 필요하답니다.
특히 다른 곳에서 온 소중한 정보를 다룰 때는 항상 조심스럽게 접근해야 해요. 친구가 건네준 정보, 사용자가 입력한 것, 인터넷에서 받아온 데이터 등은 모두 우리의 예상과는 다른 모습일 수 있거든요.
재미있는 이야기: 요리사의 재료 확인 과정
typeof
사용 시점을 더 쉽게 이해하기 위해 '요리사의 재료 확인 과정' 이야기를 들려드리겠습니다.
맛있는 음식을 만드는 한 요리사가 계셨어요. 이 분이 재료를 확인하는 모습을 지켜보면서 생각해보세요.
직접 준비한 재료 (종류가 확실한 변수):
- 방금 전에 직접 썰어놓은 양파 → 확인할 필요가 없어요
- 직접 계량해서 준비한 설탕 → 확인할 필요가 없어요
- 미리 정성스럽게 우려낸 국물 → 확인할 필요가 없어요
다른 사람이 가져다 준 재료 (종류가 불확실한 변수):
- 요리 도우미가 가져다 준 하얀 가루 → 설탕인지 소금인지 밀가루인지 꼭 확인해야 해요!
- 손님이 주문한 특별한 양념 → 어떤 종류인지 꼭 확인해야 해요!
- 새로운 직원이 준비한 재료 → 올바른 재료인지 꼭 확인해야 해요!
프로그래밍에서도 마찬가지예요. 개발자가 직접 만든 변수는 종류를 확신할 수 있지만, 다른 곳에서 온 정보는 반드시 확인이 필요하답니다.
🎯 typeof
를 사용해야 하는 상황들
실제 프로그래밍에서 typeof
가 꼭 필요한 구체적인 상황들을 살펴보겠습니다.
🔹 1. 다른 사람이 만든 정보를 받을 때
다른 사람이 여러분에게 정보를 건네줄 때, 어떤 종류의 정보인지 미리 알 수 없어요. 특히 여러 명이 함께 작업할 때는 서로 다른 종류의 정보를 주고받을 수 있답니다.
🔹 2. 사용자가 입력한 정보를 처리할 때
사용자가 입력하는 정보는 언제나 예측할 수 없어요. 숫자를 입력하라고 했는데 글자를 입력할 수도 있고, 아무것도 입력하지 않을 수도 있거든요.
🔹 3. 인터넷에서 받아온 정보를 처리할 때
웹 사이트, 파일, 데이터베이스 등에서 받아온 정보는 예상과 다를 수 있어요. 인터넷 연결 문제나 정보 형식 변경 등으로 인해 예상하지 못한 종류의 정보가 들어올 수 있답니다.
🔹 4. 상황에 따라 다르게 처리해야 하는 경우
같은 변수에 여러 종류의 값이 들어올 수 있는 상황에서는 종류에 따라 다른 처리를 해야 해요.
⚙️ 실전 사용 방법
typeof
를 효과적으로 사용하는 기본적인 방법들을 살펴보겠습니다.
기본 확인 방법:
console.log("값:", 확인할값);
console.log("종류:", typeof 확인할값);
종류별 확인 방법:
let 결과 = typeof 확인할값;
console.log("이 값은 " + 결과 + " 종류입니다.");
여러 개 한번에 확인 방법:
console.log("첫 번째 종류:", typeof 값1);
console.log("두 번째 종류:", typeof 값2);
console.log("세 번째 종류:", typeof 값3);
🧪 직접 해보면서 배우기
이제 실제 상황에서 typeof
를 언제 사용해야 하는지 구체적인 예시를 통해 알아보겠습니다.
🔹 첫 번째 예시: 확실한 정보 vs 불확실한 정보
첫 번째 예시에서는 어떤 정보에 typeof
가 필요하고 어떤 정보에는 필요 없는지 알아보겠습니다.
// === 내가 직접 만든 확실한 정보들 (typeof 필요 없음) ===
let myName = "김철수"; // 내가 직접 넣은 글자
let myAge = 12; // 내가 직접 넣은 숫자
let isStudent = true; // 내가 직접 넣은 참거짓
console.log("=== 확실한 정보들 ===");
console.log("내 이름:", myName); // 글자인 걸 확실히 알고 있어요
console.log("내 나이:", myAge); // 숫자인 걸 확실히 알고 있어요
console.log("학생 여부:", isStudent); // 참거짓인 걸 확실히 알고 있어요
// === 다른 곳에서 온 불확실한 정보들 (typeof 필요함) ===
// 친구가 나에게 준 정보라고 가정해봅시다
let friendInfo1 = "안녕"; // 친구가 준 첫 번째 정보
let friendInfo2 = 25; // 친구가 준 두 번째 정보
let friendInfo3 = false; // 친구가 준 세 번째 정보
let friendInfo4; // 친구가 아직 주지 않은 정보
console.log("\n=== 친구가 준 불확실한 정보들 ===");
console.log("친구 정보1:", friendInfo1, "/ 종류:", typeof friendInfo1);
console.log("친구 정보2:", friendInfo2, "/ 종류:", typeof friendInfo2);
console.log("친구 정보3:", friendInfo3, "/ 종류:", typeof friendInfo3);
console.log("친구 정보4:", friendInfo4, "/ 종류:", typeof friendInfo4);
// typeof 결과를 변수에 저장해서 활용하기
let type1 = typeof friendInfo1;
let type2 = typeof friendInfo2;
let type3 = typeof friendInfo3;
let type4 = typeof friendInfo4;
console.log("\n=== typeof 결과 정리하기 ===");
console.log("정보1은 " + type1 + " 종류예요.");
console.log("정보2는 " + type2 + " 종류예요.");
console.log("정보3은 " + type3 + " 종류예요.");
console.log("정보4는 " + type4 + " 종류예요.");
🔹 두 번째 예시: 사용자 입력 상황 시뮬레이션
두 번째 예시에서는 사용자가 다양한 종류의 정보를 입력했을 때 typeof
로 어떻게 확인하는지 알아보겠습니다.
// 사용자가 입력할 수 있는 다양한 종류의 정보들
let userInput1 = "빨강"; // 사용자가 좋아하는 색깔 입력
let userInput2 = 15; // 사용자가 나이 입력
let userInput3 = true; // 사용자가 학생 여부 입력
let userInput4 = "123"; // 사용자가 숫자를 글자로 입력 (실수!)
let userInput5 = null; // 사용자가 아무것도 입력하지 않음
console.log("=== 사용자 입력 처리하기 ===");
// 첫 번째 입력 처리
console.log("입력1:", userInput1);
console.log("입력1 종류:", typeof userInput1);
let message1 = "사용자가 입력한 것은 " + typeof userInput1 + " 종류입니다.";
console.log(message1);
// 두 번째 입력 처리
console.log("\n입력2:", userInput2);
console.log("입력2 종류:", typeof userInput2);
let message2 = "사용자가 입력한 것은 " + typeof userInput2 + " 종류입니다.";
console.log(message2);
// 세 번째 입력 처리
console.log("\n입력3:", userInput3);
console.log("입력3 종류:", typeof userInput3);
let message3 = "사용자가 입력한 것은 " + typeof userInput3 + " 종류입니다.";
console.log(message3);
// 네 번째 입력 처리 (문제가 있는 경우)
console.log("\n입력4:", userInput4);
console.log("입력4 종류:", typeof userInput4);
console.log("숫자처럼 보이지만 실제로는 " + typeof userInput4 + " 종류예요!");
// 다섯 번째 입력 처리 (특별한 경우)
console.log("\n입력5:", userInput5);
console.log("입력5 종류:", typeof userInput5);
console.log("null은 특별해서 " + typeof userInput5 + " 종류로 나와요.");
// 모든 입력의 종류를 한눈에 비교해보기
console.log("\n=== 모든 입력 종류 한눈에 보기 ===");
console.log("입력1(" + userInput1 + ") → " + typeof userInput1);
console.log("입력2(" + userInput2 + ") → " + typeof userInput2);
console.log("입력3(" + userInput3 + ") → " + typeof userInput3);
console.log("입력4(" + userInput4 + ") → " + typeof userInput4);
console.log("입력5(" + userInput5 + ") → " + typeof userInput5);
🔹 세 번째 예시: 계산 전에 안전하게 확인하기
세 번째 예시에서는 계산을 하기 전에 typeof
로 안전하게 확인하는 방법을 알아보겠습니다.
// 계산에 사용할 다양한 값들 (안전한 것과 위험한 것 섞어서)
let value1 = 10; // 안전한 숫자
let value2 = 5; // 안전한 숫자
let value3 = "20"; // 위험! 숫자처럼 보이는 글자
let value4 = true; // 위험! 계산에 참거짓 사용
let value5; // 위험! 정의되지 않은 값
console.log("=== 계산 전 안전 확인하기 ===");
// 첫 번째 계산: 안전한 경우
console.log("첫 번째 계산 준비:");
console.log("값1:", value1, "/ 종류:", typeof value1);
console.log("값2:", value2, "/ 종류:", typeof value2);
// 두 값이 모두 숫자인지 확인
let bothNumbers1 = typeof value1 === "number" && typeof value2 === "number";
console.log("둘 다 숫자인가요?", bothNumbers1);
// 안전하니까 계산해보기
let result1 = value1 + value2;
console.log("계산 결과:", result1);
// 두 번째 계산: 위험한 경우
console.log("\n두 번째 계산 준비:");
console.log("값1:", value1, "/ 종류:", typeof value1);
console.log("값3:", value3, "/ 종류:", typeof value3);
// 두 값이 모두 숫자인지 확인
let bothNumbers2 = typeof value1 === "number" && typeof value3 === "number";
console.log("둘 다 숫자인가요?", bothNumbers2);
// 위험하니까 그래도 어떻게 될지 확인해보기
let result2 = value1 + value3; // "10" + "20" = "1020" (글자 연결됨!)
console.log("계산 결과:", result2);
console.log("예상과 다르죠? 이래서 typeof가 중요해요!");
// 세 번째 계산: 더 복잡한 경우
console.log("\n세 번째 계산 준비:");
console.log("값4:", value4, "/ 종류:", typeof value4);
console.log("값5:", value5, "/ 종류:", typeof value5);
let result3 = value4 + value5; // true + undefined = NaN
console.log("계산 결과:", result3);
console.log("이상한 결과가 나왔어요!");
// 안전한 계산을 위한 체크 과정
console.log("\n=== 안전한 계산을 위한 체크 ===");
console.log("값1:", value1, "→", typeof value1);
console.log("값2:", value2, "→", typeof value2);
console.log("값3:", value3, "→", typeof value3);
console.log("값4:", value4, "→", typeof value4);
console.log("값5:", value5, "→", typeof value5);
// 안전한 계산 확인
console.log("\n=== 어떤 값들이 계산에 안전한가요? ===");
console.log("값1(" + value1 + ")은 계산에 안전:", typeof value1 === "number");
console.log("값2(" + value2 + ")는 계산에 안전:", typeof value2 === "number");
console.log("값3(" + value3 + ")은 계산에 안전:", typeof value3 === "number");
console.log("값4(" + value4 + ")는 계산에 안전:", typeof value4 === "number");
console.log("값5(" + value5 + ")는 계산에 안전:", typeof value5 === "number");
🔄 typeof
사용 시점 판단하는 순서
지금까지 배운 내용을 바탕으로 typeof
를 언제 사용할지 판단하는 순서를 정리해보겠습니다.
1단계: 정보 출처 확인하기
- 내가 직접 만든 변수인가? →
typeof
보통 필요 없어요 - 다른 곳에서 온 정보인가? →
typeof
고려해보세요
2단계: 확실함 정도 평가하기
- 종류를 완전히 확신할 수 있는가? →
typeof
필요 없어요 - 다른 종류가 들어올 가능성이 있는가? →
typeof
필요해요
3단계: 사용 목적 고려하기
- 계산에 사용할 예정인가? →
typeof
로 숫자인지 확인 필요 - 글자 처리에 사용할 예정인가? →
typeof
로 글자인지 확인 필요 - 단순히 출력만 할 예정인가? →
typeof
덜 중요해요
4단계: 안전성 중요도 평가하기
- 잘못되면 큰 문제가 생기는가? →
typeof
꼭 필요해요 - 문제가 생겨도 큰 일이 아닌가? →
typeof
선택적으로 사용
🧠 자주 하는 실수와 주의할 점
typeof
사용 시점을 판단할 때 초보자들이 자주 하는 실수들을 알아보겠습니다.
❌ 실수 1: 내가 만든 변수에도 typeof를 너무 많이 사용하기
// 필요 없는 확인 (비효율적)
let myScore = 85; // 내가 직접 만든 숫자
console.log("점수 종류:", typeof myScore); // 필요 없는 확인
console.log("점수:", myScore);
// 효율적인 방법
let myScore2 = 85; // 내가 직접 만든 숫자
console.log("점수:", myScore2); // 바로 사용하면 돼요
내가 직접 만든 변수는 종류를 확신할 수 있으므로 매번 typeof
확인이 필요 없어요.
❌ 실수 2: 외부에서 온 정보에 typeof를 사용하지 않기
// 위험한 방법: 종류 확인 없이 바로 사용
let someInput = "hello"; // 다른 곳에서 온 정보
let result = someInput * 2; // 글자에 곱하기? → NaN 결과
console.log("결과:", result); // NaN
// 안전한 방법: typeof로 먼저 확인
let someInput2 = "hello";
console.log("입력값:", someInput2);
console.log("입력값 종류:", typeof someInput2);
console.log("숫자가 아니므로 계산하지 않겠습니다.");
다른 곳에서 온 정보는 반드시 종류 확인이 필요해요.
❌ 실수 3: typeof 결과를 잘못 비교하기
// 잘못된 비교
let age = 25;
console.log(typeof age === number); // 오류! number는 따옴표가 없어요
// 올바른 비교
let age2 = 25;
console.log(typeof age2 === "number"); // 올바름! "number"는 글자예요
typeof
의 결과는 언제나 글자(문자열)이므로 비교할 때 따옴표를 꼭 써야 해요.
🎯 기본 연습 문제들
고요한 오후, 책상 앞에 앉아 차분히 문제를 풀어보는 시간을 가져볼까요.
기본 문제 1. 친구가 준 정보들의 종류 확인하기
// 친구들이 나에게 준 다양한 정보들
let friendGift1 = "초콜릿"; // 첫 번째 친구가 준 선물
let friendGift2 = 5000; // 두 번째 친구가 준 용돈
let friendGift3 = true; // 세 번째 친구의 약속 여부
let friendGift4; // 네 번째 친구가 아직 안 줌
// 각각의 종류를 확인하고 결과를 출력해보세요
console.log("=== 친구들이 준 선물 확인하기 ===");
console.log("선물1:", friendGift1, "→ 종류:", typeof friendGift1);
console.log("선물2:", friendGift2, "→ 종류:", typeof friendGift2);
console.log("선물3:", friendGift3, "→ 종류:", typeof friendGift3);
console.log("선물4:", friendGift4, "→ 종류:", typeof friendGift4);
// typeof 결과를 변수에 저장해서 활용하기
let gift1Type = typeof friendGift1;
let gift2Type = typeof friendGift2;
let gift3Type = typeof friendGift3;
let gift4Type = typeof friendGift4;
console.log("\n=== 선물 종류 요약 ===");
console.log("첫 번째 선물은 " + gift1Type + " 종류입니다.");
console.log("두 번째 선물은 " + gift2Type + " 종류입니다.");
console.log("세 번째 선물은 " + gift3Type + " 종류입니다.");
console.log("네 번째 선물은 " + gift4Type + " 종류입니다.");
기본 문제 2. 계산 전 안전 확인하기
// 계산할 값들 (안전한 것과 위험한 것이 섞여 있음)
let num1 = 10; // 확실한 숫자
let num2 = "20"; // 숫자처럼 보이는 글자
let num3 = 5; // 확실한 숫자
let num4 = false; // 숫자가 아닌 참거짓
console.log("=== 계산 전 안전 확인 ===");
// 각 값의 종류 확인
console.log("값1:", num1, "→", typeof num1);
console.log("값2:", num2, "→", typeof num2);
console.log("값3:", num3, "→", typeof num3);
console.log("값4:", num4, "→", typeof num4);
// 숫자인 것들만 골라내기
console.log("\n=== 숫자 찾기 ===");
console.log("값1이 숫자인가요?", typeof num1 === "number");
console.log("값2가 숫자인가요?", typeof num2 === "number");
console.log("값3이 숫자인가요?", typeof num3 === "number");
console.log("값4가 숫자인가요?", typeof num4 === "number");
// 안전한 계산과 위험한 계산 비교
console.log("\n=== 계산 결과 비교 ===");
let safeResult = num1 + num3; // 숫자 + 숫자
let riskyResult = num1 + num2; // 숫자 + 글자
console.log("안전한 계산 (10 + 5):", safeResult);
console.log("위험한 계산 (10 + '20'):", riskyResult);
console.log("결과가 다르죠? 이래서 typeof 확인이 중요해요!");
✅ 학습 완료 체크리스트
이번 시간에 배운 내용들을 모두 마음에 담았는지 확인해보세요.
학습 내용 | 이해했나요? |
---|---|
typeof 사용 시점 판단 | ✅ |
확실한 정보 vs 불확실한 정보 구분 | ✅ |
계산 전 안전 확인 방법 | ✅ |
자주 하는 실수들 | ✅ |
실전 예제 이해 | ✅ |
🔄 1단원과 2단원 종합 복습하기
2.5단원까지 차근차근 공부했으니, 1단원과 2단원에서 배운 소중한 내용들을 종합적으로 복습해보는 시간을 가져볼까요?
종합 복습 문제 1. 변수 선언부터 타입 확인까지
// 1단원: 올바른 변수 선언하기
let studentName = "김민지"; // 학생 이름 (변수)
const schoolName = "행복초등학교"; // 학교 이름 (상수)
let studentAge = 9; // 학생 나이 (변수)
let hasHomework = true; // 숙제 있는지 (변수)
// 2.5단원: typeof로 타입 확인하기
console.log("=== 학생 정보 및 타입 확인 ===");
console.log("이름:", studentName, "→", typeof studentName);
console.log("학교:", schoolName, "→", typeof schoolName);
console.log("나이:", studentAge, "→", typeof studentAge);
console.log("숙제여부:", hasHomework, "→", typeof hasHomework);
// 값 변경 시도해보기 (1단원 복습)
studentAge = 10; // let으로 선언했으니 변경 가능
// schoolName = "다른학교"; // const로 선언했으니 변경 불가 (오류!)
console.log("생일 후 나이:", studentAge, "→", typeof studentAge);
종합 복습 문제 2. 연산자와 typeof 조합하기
// 2.1-2.4단원에서 배운 연산자들과 2.5단원 typeof 조합
let score1 = 85;
let score2 = 92;
// 계산 연산자 사용
let total = score1 + score2;
let average = total / 2;
// 비교 연산자 사용
let isHighScore = average >= 90;
// 논리 연산자 사용
let isPerfect = score1 === 100 && score2 === 100;
// 할당 연산자 사용
score1 += 5; // 보너스 점수 추가
console.log("=== 연산 결과와 타입 확인 ===");
console.log("총점:", total, "→", typeof total);
console.log("평균:", average, "→", typeof average);
console.log("고득점여부:", isHighScore, "→", typeof isHighScore);
console.log("완벽여부:", isPerfect, "→", typeof isPerfect);
console.log("보너스후 점수1:", score1, "→", typeof score1);
// 모든 결과의 타입이 예상과 같은지 확인
console.log("\n=== 타입 확인 요약 ===");
console.log("total이 숫자인가요?", typeof total === "number");
console.log("average가 숫자인가요?", typeof average === "number");
console.log("score1이 숫자인가요?", typeof score1 === "number");
console.log("isHighScore가 불린인가요?", typeof isHighScore === "boolean");
console.log("isPerfect가 불린인가요?", typeof isPerfect === "boolean");
지금까지 typeof
연산자를 언제 사용해야 하는지에 대한 실전 가이드를 자세히 알아보았습니다. 핵심은 확실하지 않은 곳에 typeof
를 사용하는 것이에요. 내가 직접 만든 변수들은 대부분 확인이 필요 없지만, 다른 곳에서 온 정보는 언제나 종류 확인이 필요하답니다. 이런 원칙을 잘 지키면 안전하면서도 효율적인 코드를 작성할 수 있어요.
📂 마무리 정보
오늘 배운 2.5.2
내용이 여러분의 자바스크립트 지식 상자에 잘 자리잡았나요? 다음 시간에는 더욱 흥미로운 내용으로 만나뵙겠습니다.
기억할 점: typeof
는 확실하지 않을 때만 사용하는 것이 현명해요. 너무 많이 사용하면 코드가 복잡해지고, 너무 적게 사용하면 예상치 못한 문제가 생길 수 있어요. 적절한 균형을 찾는 것이 중요하답니다.
무료 JavaScript 학습 플랫폼에서 단계별 학습과 실시간 코드 실행을 통해
더욱 효과적이고 재미있게 학습하실 수 있습니다.
'2. 계산하고 비교하기 (연산자) > 2.5 타입 확인하기 (typeof 연산자)' 카테고리의 다른 글
2.5.1 `typeof` - 변수 안 보물의 정체를 알아내는 탐정도구 (0) | 2025.06.29 |
---|