JavaScript 객체 배열 · eval
이 폴더는 JavaScript 기초 문법과 객체 배열 실습을 모은 장입니다. 함수, 조건문, 반복문, switch, break, prompt, eval, 객체 배열을 작은 예제로 나누어 확인합니다.
prompt로 받은 문자열을 eval에 넣어 수식 결과를 출력합니다. 취소한 경우에는 계산하지 않고 안내 문장을 출력합니다.
| 입력 | 처리 | 결과 |
|---|---|---|
| 1+2 | eval | 3 |
| 4*5 | eval | 20 |
| 취소 | null 검사 | 입력된 식이 없습니다. |
| 잘못된 식 | 오류 가능 | try/catch 필요 |
책 객체 배열 예제는 prompt로 5번 입력을 받고, 콤마로 분리한 뒤 객체 속성에 저장합니다.
input.split(",")은 책제목, 저자, 가격을 배열로 나눕니다. 순서가 정해져 있으므로 ar[0], ar[1], ar[2]를 각각 title, author, price에 넣습니다.
| 입력 조각 | 배열 위치 | 객체 속성 |
|---|---|---|
| HTML5 | ar[0] | book.title |
| 황기태 | ar[1] | book.author |
| 20000 | ar[2] | book.price |
| book | bookArray[i] | 배열에 저장 |
객체 배열을 다시 반복하면서 각 책의 title, author, price를 출력합니다. 배열 안에는 문자열이 아니라 book 객체들이 들어 있습니다.
가장 비싼 책은 첫 번째 책을 기준값으로 잡고, 나머지 책과 price를 비교하면서 갱신합니다.
| 단계 | 코드 | 의미 |
|---|---|---|
| 초기값 | most = bookArray[0] | 첫 책을 임시 최고가로 둠 |
| 반복 | i=1부터 | 나머지 책 비교 |
| 비교 | bookArray[i].price > most.price | 더 비싼지 확인 |
| 갱신 | most = bookArray[i] | 최고가 책 변경 |
원문은 price를 문자열 그대로 저장합니다. 비교가 대체로 동작할 수 있지만, 정확한 숫자 비교를 위해서는 parseInt(ar[2])로 저장하는 편이 낫습니다.
책 정보 입력은 콤마 2개로 세 항목이 들어온다는 전제가 있습니다. 실제로는 취소, 빈 입력, 콤마 부족, 가격 NaN을 검사해야 합니다.
| 검사 | 문제 | 처리 |
|---|---|---|
| input == null | 취소 | 반복 중단 또는 재입력 |
| input == "" | 빈 입력 | 무시 |
| ar.length < 3 | 항목 부족 | 재입력 요청 |
| isNaN(price) | 가격 오류 | 숫자 입력 요청 |
| 실수 | 증상 | 해결 |
|---|---|---|
| eval 입력 검증 없음 | 잘못된 식에서 오류가 납니다. | try/catch를 사용합니다. |
| split 결과 길이 확인 안 함 | undefined 속성이 생깁니다. | ar.length를 검사합니다. |
| price 문자열 저장 | 가격 비교가 불안정합니다. | parseInt로 숫자화합니다. |
| 취소 처리 없음 | null.split 오류가 납니다. | input null을 먼저 확인합니다. |
| 객체와 배열 혼동 | bookArray.title처럼 접근합니다. | bookArray[i].title로 접근합니다. |
| 체크 | 통과 기준 |
|---|---|
| eval | 수식 문자열 계산과 위험성을 압니다. |
| prompt | null 검사를 먼저 합니다. |
| split | 콤마 기준으로 책 정보를 나눕니다. |
| Object | 책 객체에 속성을 저장합니다. |
| Array | 객체를 배열에 저장하고 순회합니다. |
| max | 반복 비교로 가장 비싼 책을 찾습니다. |
| 확인 | 콘솔 예시 | 의미 |
|---|---|---|
| 수식 | console.log(str) | eval 입력 확인 |
| split 결과 | console.log(ar) | 항목 분리 확인 |
| 책 객체 | console.log(book) | 속성 저장 확인 |
| 배열 | console.log(bookArray) | 객체 배열 확인 |
| 최고가 | console.log(most) | 비교 결과 확인 |
| 케이스 | 입력 | 예상 |
|---|---|---|
| 수식 | 1+2*3 | 7 |
| 수식 취소 | 취소 | 입력 없음 메시지 |
| 책 입력 | HTML5,황기태,20000 | 객체 생성 |
| 콤마 부족 | HTML5,황기태 | 검증 필요 |
| 가격 비교 | 여러 책 | 가장 비싼 책 출력 |
책 객체 배열은 입력 검증과 정렬, 검색을 붙이기 좋은 예제입니다. 객체 하나를 잘 만들고 배열에 담는 흐름을 유지하면서 기능을 확장합니다.
| 기능 | 코드 힌트 | 확인 |
|---|---|---|
| 가격 정렬 | sort((a,b)=>a.price-b.price) | 싼 책부터 출력 |
| 최고가 | Math.max 또는 반복문 | most 객체 확인 |
| 평균가 | sum / bookArray.length | 숫자 price 필요 |
| 검색 | filter(book => ...) | 조건에 맞는 책만 표시 |
| 출력 개선 | table 생성 | 가독성 향상 |
수식 계산 예제는 eval을 보여주기 위한 코드입니다. 실제 페이지에서는 입력 가능한 문자를 제한하거나, 수식 파서를 따로 두는 편이 안전합니다.
| 방법 | 장점 | 주의 |
|---|---|---|
| eval | 예제가 짧음 | 사용자 입력 실행 위험 |
| 정규식 검증 | 허용 문자 제한 | 완전한 파서는 아님 |
| 직접 파서 | 안전한 계산 가능 | 구현량 증가 |
| 라이브러리 | 검증된 계산 | 외부 의존성 |
| 서버 계산 | 통제 가능 | 요청/응답 필요 |
| 테스트 | 확인 내용 |
|---|---|
| 소수 계산 | 1/2 같은 수식이 계산되는지 봅니다. |
| 잘못된 수식 | try/catch 필요성을 확인합니다. |
| 가격 문자열 | "900"과 "1000" 비교가 안전한지 확인합니다. |
| 콤마 포함 제목 | split 방식의 한계를 확인합니다. |
| 입력 취소 | null 처리 없이 split하면 오류가 나는지 봅니다. |
| 책 0권 | 빈 배열에서 most를 잡을 때의 문제를 확인합니다. |
| 가격 문자 | 가격에 abc를 입력했을 때 NaN 검사가 필요한지 봅니다. |
| 동일 가격 | 가격이 같을 때 첫 번째 책이 유지되는지 확인합니다. |
| 공백 포함 | 콤마 뒤 공백을 trim해야 하는지 확인합니다. |
| 배열 길이 | 입력 횟수와 bookArray.length가 같은지 봅니다. |
| 최고가 갱신 | 더 비싼 책을 뒤에 입력했을 때 most가 바뀌는지 봅니다. |
| 출력 순서 | 입력한 순서대로 책 목록이 출력되는지 확인합니다. |
| 수식 공백 | 1 + 2처럼 공백이 있어도 계산되는지 확인합니다. |
| 소수 가격 | parseInt와 parseFloat 결과 차이를 비교합니다. |
| 객체 속성 누락 | author가 없을 때 출력이 어떻게 되는지 확인합니다. |
핵심 한 줄 요약
Tags
'php' 카테고리의 다른 글
| CSS animation · transition 완전 정리 (0) | 2026.07.07 |
|---|---|
| JavaScript 기초 문법 실습 완전 정리 (0) | 2026.07.07 |
| JavaScript 객체 생성 · 배열 완전 정리 (0) | 2026.07.06 |
| JavaScript Date · 색상 완전 정리 (0) | 2026.07.06 |
| JavaScript transform · z-index · 난수 완전 정리 (0) | 2026.07.06 |
왕진 블로그

댓글