
JavaScript 객체(Object): 연관된 데이터를 구조화하여 관리하기
JavaScript 객체(Object): 연관된 데이터를 구조화하여 관리하기
배열만으로는 부족할 때가 있지 않나요?
지난 포스팅에서 우리는 배열(Array)에 대해 배웠습니다. 배열은 여러 개의 취미나 점수처럼 같은 종류의 데이터를 리스트 형태로 관리할 때 아주 유용했죠.
하지만 실제 프로그래밍을 하다 보면, 단순한 리스트로는 표현하기 어려운 데이터들이 있습니다.
신분증을 떠올려 볼까요?
여권이나 주민등록증을 생각해 보세요. 신분증에는 어떤 정보들이 있나요?
- 이름: 홍길동
- 생년월일: 1990-05-15
- 주소: 서울특별시 강남구
- 발급일: 2020-01-10
이 정보들은 분명히 서로 연관되어 있습니다. 모두 한 사람을 설명하는 데이터니까요. 하지만 배열로 표현하기에는 문제가 있습니다.
배열로 표현하면 어떤 문제가 생길까요?
문제점:
- 각 값이 무엇을 의미하는지 알 수 없습니다
person[0]이 이름인지, 생년월일인지 기억해야 합니다- 순서를 바꾸면 모든 코드를 수정해야 합니다
- 나중에 코드를 다시 볼 때 혼란스럽습니다
핵심 문제: 배열은 같은 종류의 데이터를 나열하는 데는 좋지만, 다른 종류의 데이터에 라벨을 붙여 설명하는 데는 적합하지 않습니다.
객체(Object)가 필요한 이유는 무엇인가요?
바로 이럴 때 객체가 필요합니다! 객체는 **라벨(label)**과 **값(value)**을 쌍으로 묶어서 데이터를 표현할 수 있게 해줍니다.
신분증처럼:
- 라벨: 이름, 생년월일, 주소...
- 값: 홍길동, 1990-05-15, 서울특별시...
객체를 사용하면 각 데이터가 무엇을 의미하는지 명확하게 알 수 있습니다!
객체는 어떻게 만드나요?
기본 문법
객체는 **중괄호 {}**를 사용해서 만듭니다:
구조를 자세히 살펴볼까요?
{: 객체의 시작title: "developer": 첫 번째 속성 (라벨: 값),: 각 속성을 구분하는 쉼표place: "New York": 두 번째 속성salary: 50000: 세 번째 속성}: 객체의 끝
속성(Property)이란?
객체 안의 라벨과 값의 조합을 속성(property)이라고 부릅니다.
각 속성은:
- 키(key) 또는 라벨:
title,place,salary - 값(value):
"developer","New York",50000 - 구분자: 콜론(
:)으로 키와 값을 연결, 쉼표(,)로 속성 구분
배열 vs 객체: 어떻게 다른가요?
배열 (Array):
객체 (Object):
객체에 어떤 값을 넣을 수 있나요?
객체의 속성 값으로는 우리가 배운 모든 타입을 사용할 수 있습니다!
문자열과 숫자
배열도 넣을 수 있습니다
심지어 객체 안에 객체도 가능합니다
나중에 중첩된 객체(nested objects)에 대해서도 배우게 될 것입니다!
객체의 값에는 어떻게 접근하나요?
점(.) 표기법 사용하기
객체의 속성에 접근하려면 점(.) 표기법을 사용합니다:
문법:
- 변수명 뒤에 점(
.)을 찍습니다 - 그 다음 원하는 속성의 이름을 적습니다
IDE의 자동 완성 기능 활용하기
현대적인 코드 에디터(VS Code 등)에서는 점을 찍으면 자동으로 속성 목록이 나타납니다!
자동 완성이 나타나지 않으면?
Ctrl + Space(Windows/Linux)Cmd + Space(Mac)
를 눌러서 수동으로 트리거할 수 있습니다.
팁: 파란색 상자 아이콘이 있는 항목들이 실제 객체의 속성입니다. 다른 제안들은 에디터의 추측일 뿐 실제로 작동하지 않을 수 있습니다.
변수 여러 개 vs 객체 하나: 무엇이 더 나을까요?
개별 변수로 관리하는 방법
문제점:
- 세 변수가 논리적으로 연관되어 있다는 것을 머릿속으로 기억해야 합니다
- 코드가 길어지면 어떤 변수들이 함께 속하는지 파악하기 어렵습니다
- 관련 데이터를 함수에 전달할 때 하나씩 전달해야 합니다
객체로 그룹화하는 방법
장점:
- 연관된 데이터가 명시적으로 그룹화되어 있습니다
- 코드의 의도가 명확하게 드러납니다
- 하나의 변수로 모든 관련 정보를 전달할 수 있습니다
- 나중에 유지보수하기 쉽습니다
코드 가독성을 높이는 방법은?
객체를 여러 줄로 나누기
객체가 커질수록 한 줄에 모든 것을 쓰면 읽기 어려워집니다. 이럴 때는 여러 줄로 나눠서 작성하세요:
한 줄로 작성 (읽기 어려움):
여러 줄로 작성 (권장):
들여쓰기는 필수인가요?
들여쓰기(indentation)는 기술적으로 필수는 아니지만, 가독성을 위해 강력하게 권장됩니다.
자동 정렬 팁:
Tab키를 누르면 자동으로 들여쓰기됩니다- VS Code에서
Shift + Alt + F(Windows) 또는Shift + Option + F(Mac)을 누르면 문서 전체가 자동으로 정렬됩니다
배열도 여러 줄로 나눌 수 있나요?
네! 배열이 길거나 복잡할 때는 여러 줄로 나누는 것이 좋습니다:
문자열에서 줄바꿈은 어떻게 하나요?
일반 따옴표에서는 줄바꿈이 안 됩니다
일반 따옴표(' 또는 ") 안에서는 직접 줄바꿈을 할 수 없습니다.
방법 1: 문자열 연결하기
+ 연산자로 여러 문자열을 합칠 수 있습니다:
더 명확하게 작성하려면:
원리: JavaScript는 다음 줄에 연결될 값이 있다는 것을 이해하고 기다립니다.
방법 2: 백틱(`) 사용하기 (권장)
백틱(backtick)을 사용하면 문자열 안에서 자유롭게 줄바꿈을 할 수 있습니다:
백틱은 어디에 있나요?
- 대부분의 키보드에서 숫자
1왼쪽에 있습니다 - 작은따옴표(
')와 비슷하게 생겼지만 다른 문자입니다
백틱의 추가 기능: 나중에 배우겠지만, 백틱을 사용하면 템플릿 리터럴(template literal)이라는 강력한 기능도 사용할 수 있습니다!
실전 예제로 이해하기
예제 1: 사용자 프로필
예제 2: 제품 정보
예제 3: 중첩된 객체
코드 가독성: 왜 중요한가요?
프로그래밍에서 가장 중요한 원칙 중 하나는 코드 가독성(code readability)입니다.
좋은 코드의 특징
- 읽기 쉬워야 합니다나중에 다시 봐도 이해할 수 있어야 합니다
- 다른 개발자도 쉽게 이해할 수 있어야 합니다
- 명확하게 구조화되어야 합니다들여쓰기와 줄바꿈을 적절히 사용합니다
- 관련된 코드를 그룹화합니다
- 간결해야 합니다한 줄에 너무 많은 내용을 넣지 않습니다
- 불필요한 복잡성을 피합니다
나쁜 코드 vs 좋은 코드
나쁜 예:
좋은 예:
두 코드 모두 작동하지만, 어느 것이 더 읽기 쉬운가요? 당연히 두 번째입니다!
속성은 변수와 비슷한가요?
네, 좋은 질문입니다! 객체의 **속성(property)**은 객체에 속한 변수라고 생각할 수 있습니다.
변수와 속성의 비교
일반 변수:
객체의 속성:
차이점은 무엇인가요?
| 특징일반 변수객체 속성 | ||
| 선언 키워드 | let 필요 | let 불필요 |
| 값 할당 | = 사용 | : 사용 |
| 접근 방법 | 변수명 직접 | 객체명.속성명 |
| 스코프 | 전역/함수 | 객체 내부 |
속성은 객체에 "캡슐화(enclosed)"되어 있다고 표현할 수 있습니다!
핵심 정리
오늘 배운 내용을 정리해 볼까요?
✅ 객체는 라벨과 값을 쌍으로 묶어 관련 데이터를 표현합니다
- 서로 다른 종류의 데이터를 구조화할 때 사용합니다
✅ 중괄호 {}로 객체를 만듭니다
- 속성은
키: 값형태로 작성합니다 - 각 속성은 쉼표(
,)로 구분합니다
✅ 점(.) 표기법으로 속성에 접근합니다
객체명.속성명으로 값을 가져옵니다- IDE의 자동 완성 기능을 활용하세요
✅ 객체는 배열보다 명확하고 구조화된 데이터 표현이 가능합니다
- 변수 여러 개보다 객체 하나가 관리하기 쉽습니다
✅ 가독성이 매우 중요합니다
- 여러 줄로 나누고 들여쓰기를 사용하세요
- 백틱(`)을 사용하면 문자열에서 줄바꿈이 가능합니다
✅ 속성에는 모든 타입의 값을 넣을 수 있습니다
- 문자열, 숫자, 배열, 심지어 다른 객체도 가능합니다