본문 바로가기
JavaScript

자바스크립트#06 : 객체

by haheehee 2022. 12. 16.

배열은 요소에 접근할 때 인덱스를 사용한다. 객체는 키(key)를 사용한다.

객체는 중괄호로 생성하며, 쉼표로 연결하여 입력한다. 

JSON 형태!

자바에서의 클래스로 이해하면 되겠다.

const product = {
	제품명 : "7D 건조 망고"
	, 유형 : "당절임"
	, 성분 : "망고, 설탕, 메타중아황산나트륨, 치자황색소"
	, 원산지 : "필리핀"
}

여기서 product는 참조변수이며, Map형식과 비슷하다. 

키와 값 뒤에 쉼표를 넣어 구분해주었다. 

 

객체 요소에 접근하는 것은 두 가지 방법이 있다. 

1. 대괄호[] 사용 : product["제품명"] -> "7D 건조 망고"를 출력. 

                           "제품명", "유형", "성분", "원산지"가 배열의 index처럼 사용되는 것이다.

2. 온점 . 사용 : product.제품명 -> "7D 건조 망고"를 출력. 

                           온점(접근연산자)를 사용


속성과 메소드

객체의 속성은 모든 형태의 자료값으로 가질 수 있다. 

this : 자기 자신이 가진 속성이라는 것을 표시할 때 사용

<script>
	const pet = {
		name : "콩"
		, eat : function (food) {
			alert(this.name + "은/는 " + food + "을/를 먹습니다.")
		}
	}
	
	pet.eat("사료")
</script>

this 사용해보기

this키워드를 사용하여 자신이 가진 속성에 접근함.

 

 

동적으로 객체 속성 추가하고 제거하기

<script>
	const student = {}
	student.name = "김자바"
	student.hobby = "블로그포스팅"
	student.goal = "프로그래머"
	
	delete student.goal
	
	console.log(JSON.stringify(student, null, 10))
// 	 JSON.stringify(value[, replacer[, space]])
</script>

동적으로 객체 추가/제거

객체 추가는 온점을 사용해서 하였으며,

제거는 delete 키워드를 사용하여 속성을 제거하였다.

여기서 JSON.stringify()의 기본형은 JSON.stringify(value[, replacer[, space]]) 이다.

(참고 : https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify  )

 

 

익명함수와 람다식의 this키워드

<script>
	const test = {
		a : function () {
			console.log(this)
		},
		b : () => {
			console.log(this)
		}
	}
	
	test.a()
	test.b()
</script>

여기서 a와 b는 key이다.

a는 익명함수로 선언되었고, b는 람다식으로 선언되었다. 

만들어진 형태에 따라 this키워드를 출력했을 때, 출력된 메타데이터가 다르다. 

익명함수와 람다식의 this 키워드


객체 자료형

속성과 메소드를 가질 수 있는 모든 것은 객체!!!!
배열, 함수는 객체이다. 

 

- 배열인지 확인하기 위해 Array.isArray() 메소드를 사용.

- 함수는 "실행이 가능"한 객체.

 

기본 자료형

실체가 있는 것(undefined와 null 제외) 중 객체가 아닌 것!!

숫자, 문자열, 불이 있다. 

이러한 자료형은 객체가 아니다.-> 속성을 가질 수 없다.

 


기본 자료형을 객체로 선언하기

숫자 객체,

문자열 객체,

불 객체

를 생성해보기. -> 단순한 기본 자료형이 아니므로 이전과 다르게 속성을 같는다. (new 예약어 이용)

const 객체 = new 객체_자료형_이름()
<script>
	const f = new Number(399)
	console.log(typeof f)
	f.sample = 10
	console.log(f.sample)
	console.log(f)
	console.log(f + 0)
	console.log(f.valueOf())
</script>

기본 자료형을 객체로 선언하기

이렇게 생성해주면 속성을 가질 수 있게 된다. 

숫자와 똑같이 활용 가능하고, valueOf()함수를 통해 값을 추출할 수도 있다.

 

 

기본 자료형의 일시적 승급

자바스크립트는 편리성을 위해

기본 자료형의 속성과 메소드를 호출할 때 일시적으로 기본 자료형을 객체로 승급시킨다.  (일.시.적.으.로)

<script>
	const h = "안녕하세요"
	h.sample = 10
	console.log(h.sample = 10)
	console.log(h.sample)
</script>

기본 자료형의&nbsp; &nbsp; &nbsp; 일시적 승급

 


prototype으로 메소드 추가하기

prototype 객체에 속성과 메소드를 추가하면 모든 객체와 기본 자료형에서 해당 속성과 메소드를 사용할 수 있다.

객체_자료형_이름.prototype.메소드_이름 = function() { }
<script>
	Number.prototype.power = function (n=2) {
		return this.valueOf() **n
	}
	
	const a = 12
	console.log("a.power() : ", a.power())
	console.log("a.power(3) : ", a.power(3))
	console.log("a.power(4) : ", a.power(4))
</script>

prototype으로 메소드 추가하기

 

 

prototype - indexOf() 함수로 자바스크립트에서 

문자열 내부에 어떤 문자열이 있는지, 배열 내부에 어떤 자료가 있는지

확인할 수 있다.

<script>
	String.prototype.contain = function (data) {
		return this.indexOf(data) >= 0
	}
	
	Array.prototype.contain = function (data) {
		return this.indexOf(data) >= 0
	}
	
	const stringValue = "안녕하세요"
	console.log("안녕 in 안녕하세요: ", stringValue.contain("안녕"))
	console.log("없는문자열 in 안녕하세요: ", stringValue.contain("없는문자열"))
	
	const arrayValue = [185, 165, 35, 45, 26, 14]
	console.log("35 in [185, 165, 35, 45, 26, 14] : ", arrayValue.contain(35))
	console.log("0 in [185, 165, 35, 45, 26, 14] : ", arrayValue.contain(0))
</script>

indexOf() 함수

 


Number 객체- toFixed() 함수로 Number 객체에서 숫자 n번째 자리수(소수점 이하 몇 자리)까지 출력할 수 있다.

<script>
	const num = 123.456789
	console.log(num.toFixed(2))
	console.log(num.toFixed(5))
</script>

toFixed()는 반올림을 적용한다.

toFixed()

 

 

Number 객체- isNaN() , isFinite() 함수 : NaN과 Infinity 확인하는 함수이다.

toFixed()함수처럼 Number뒤에 점을 찍어 사용하면 된다.

isFinite()

자바스크립트에서는 음수무한대인 -Infinity와 양수무한대인 +Infinity 두 가지의 무한대가 존재한다.

 


String 객체- trim() 함수 : 문자열 양쪽 끝의 공백을 없애는 함수이다.

위에 두줄과 밑에 두줄의 차이점 : 양쪽 끝의 공백이 없다!

 

 

String 객체- split() 함수 : 문자열을 특정 기호로 자르는 함수이다. 

매개변수로 입력한 문자열로 잘라서 배열의 형태로 리턴해준다.

<script>
	string_split = `
	    원, 달러, 엔, 유로
	02,1148.8,1097.46,1262.37
	03,1148.7,1111.36,1274.65
	04,1140.69,1107.81,1266.58
	07,1143.4,1099.58,1267.8
	08,1141.6,1091.97,1261.07      `
	console.log(string_split)
	console.log("")
	
	string_split = string_split.trim()
	console.log(string_split)
	console.log("")
	
	string_split = string_split.split("\n")
	console.log(string_split)
	console.log("")
	
	string_split = string_split.map((line) => line.split(","))
	console.log(string_split)
	console.log("")
	
	console.log(JSON.stringify(string_split, null, 2))
</script>

split() 함수

 

 


JSON 객체

인터넷에서 문자열로 데이터를 주고 받을 때 사용되는 자료 표현 방식이다.

- 값을 표현할 때는 문자열, 숫자, 불 자료형만 사용 가능

- 문자열과 key에는 반드시 큰따옴표가 필요

하나의 자료는 중괄호를 사용하여 쉼표로 나열하고, 

여러 개의 자료는 중괄호들 밖에 대괄호를 사용해준다. (배열로 묶어주는 것)

[{
	"name": "혼자 공부하는 파이썬",
	"price": 18000,
	"publisher": "한빛미디어"
}, {
	"name": "HTML5 웹 프로그래밍 입문",
	"price": 26000,
	"publisher": "한빛아카데미"
}]

위 코드의 경우, JSON 객체 안에 속성이 3개씩 들어있다고 보면 된다. 

JSON 객체는 통신 때 사용된다. 

 

 

JSON 객체 - parse() 함수 : JSON 문자열을 자바스크립트 객체로 전개할 때 JSON.parse()함수를 사용한다.

stringfy() : JSON객체를 문자열로

parse() : 문자열을 JSON객체로!

<script>
	const data = [{
		name: "혼자 공부하는 파이썬",
		price: 18000,
		publisher: "한빛미디어"
	}, {
		name: "HTML5 웹 프로그래밍 입문",
		price: 26000,
		publisher: "한빛아카데미"
	}]
	
	console.log(JSON.stringify(data))
	console.log(JSON.stringify(data, null, 2))
	
	const json = JSON.stringify(data)
	console.log(json)
	
	console.log(JSON.parse(json))
</script>

JSON 객체 - parse() 함수

 


Math 객체

수학과 관련된 기본적인 연산을 할 때 사용

pi와 e 같은 수학 상수가 있다. 

메소드로는 Math.sin(), Math.cos(), Math.tan()과 같은 삼각함수도 있다. 

랜덤함수인 Math.random()을 사용하여 0~1 사이의 난수를 생성할 수 있다. 

<script>
	const num = Math.random()
	
	console.log("# 랜덤한 숫자")
	console.log("0~1 사이의 랜덤한 숫자 : ", num)
	console.log("")
	
	console.log("# 랜덤한 숫자 범위 확대")
	console.log("0~10 사이의 랜덤한 숫자 : ", num * 10)
	console.log("0~50 사이의 랜덤한 숫자 : ", num * 50)
	console.log("")
	
	console.log("# 랜덤한 숫자 범위 이동")
	console.log("-5 ~ 5 사이의 랜덤한 숫자 : ", num * 10 -5)
	console.log("-25~25 사이의 랜덤한 숫자 : ", num * 50 -25)
	console.log("")
	
	console.log("# 랜덤한 정수 숫자:")
	console.log("-5 ~ 5 사이의 랜덤한 정수 숫자 : ", Math.floor(num * 10 - 5))
	console.log("-25~25 사이의 랜덤한 정수 숫자 : ", Math.floor(num * 50 -25))
</script>

random()

 


외부 script 파일 읽기

html파일에서 css파일 혹은 image(jpg, png, ...), 비디오와 음성파일 등 외부 파일을 읽어들이는 방법과 동일하다. 

<script src="경로/자바스크립트파일이름.js"></script>

위 코드를 <head> 태그 안에 첨가하면 된다. 

실행 내용에 따라 내부 <script>태그로 자바스크립트 코드를 작성하고, 외부의 자바스크립트 파일을 가져와 두가지를 혼합하여 사용하여야할 수도 있다. 이럴때에는 순서에 따라 결과가 바뀔 수 있으니, 순서에 유의하여 작성해야 한다.

 

 


Lodash 라이브러리

보조적으로 사용하는 함수를 제공해주는 utility library 중 가장 많이 사용하는 라이브러리.

Lodash CDN 링크 페이지 : https://cdn.jsdelivr.net 

CDN은 Contents Delivery Network로 콘텐츠 전송 네트워크를 의미한다. 

웹상의 소스를 가져다가 쓰는 것!

 

 

Lodash 라이브러리 - sortBy() 함수

sortBy() 함수는 prototype 메소드이다. 

배열을 어떤 것으로 정렬할지 지정하면, 지정한 것을 기반으로 배열을 정렬하여 리턴해주는 함수이다. 

_.sortBy(배열, 정렬기준키)

"_" (Lodash 라이브러리의 객체) 라는 기호를 객체로 만든 것이다. 이 _객체 안에 많은 메소드들이 들어 있다. 


- 객체가 아닌 실체를 기본 자료형이라 한다. 숫자, 문자열, 불이 있다. 

- 객체를 기반으로 하는 자료형은 객체 자료형이며, new 키워드를 활용하여 생성한다.(static제외)

- prototype 객체란 객체의 틀을 의미하고, 이곳에 속성과 메소드를 추가하여 해당 객체 전체에 사용할 수 있도록 한다. 


객체에서 변수 추출해보기

<script>
	// 객체 생성
	const object = {
		name: "혼자 공부하는 파이썬",
		price: 18000,
		publisher: "한빛미디어"
	}
	
	// 객체에서 변수를 추출
	const { name, price } = object
	console.log("# 속성 이름을 그대로 꺼내서 출력하기")
	console.log(name, price)
	console.log("")
	
	const { a=name, b=price } = object
	console.log("# 다른 이름으로 속성 꺼내서 출력하기")
	console.log(a, b)
</script>

객체에서 변수 추출해보기

const { name, price } = object를 다중할당이라 한다. 


JSON.stringfy() 예제

<script>
	const cloud = {
		"이름": "구름",
		"나이": 4,
		"종족": "강아지"
	}

	const mallang = { 
		이름 : "말랑",
		나이 : 2,
		종족 : "고양이"
	}
	
	const kong = cloud
	kong.이름 = "콩"
	kong.종족 = "고양이"
	
	console.log(JSON.stringify(cloud))
	console.log(JSON.stringify(mallang))
	console.log(JSON.stringify(kong))
</script>

kong은 cloud를 가리키고 있는 참조변수..

따라서 kong으로 키를 선택하여 변경하면 cloud의 내용이 같이 변경되는 것이다.

JSON.stringfy() 예제

 

 

 

 

 

 

 

 

 

 

출처 : 혼자 공부하는 자바스크립트 (윤인성)

댓글