everyday com-eat
작성일
2021. 12. 23. 14:56
작성자
갱수터
728x90

객체

- 메모리에 등록된 데이터(자료구조, 함수)
- 속성과 기능을 가지고 있다.(프로퍼티, 메서드)
- 변수에 대입된 객체는 참조 변수라고 한다.

 

참조변수

- 메모리에 생성된 객체 주소를 생성된 변수가 참조하는것

- 생성된 객체가 여러 변수에 대입되더라도 대입된 변수들은 같은 주소를 가지고 있으며, 이 변수들 중 객체의 값을 변경 할 경우모든 변수들은 가같은 주소를 참조 하고 있음으로 변경된 동일한 결괏값을 가진다.

//기본 자료형
//원시 타입 -> 기본 자료형
//원시 타입은 값을 복제하여 대입한다.
var n1 = 100;
var n2 = n1;
console.log(n1, n2, '기본 자료형');
n2 = 200;
console.log(n1, n2, '기본 자료형'); //n2의 값만 바뀜
		
//객체
//참조타입 -> 객체주소
//객체 주소를 복제하여 대입한다.
var arr1 = [100];
var arr2 = arr1;
console.log(arr1, arr2, '객체');
arr2[0] = 1000;
console.log(arr1, arr2, '객체'); //n1과 n2의 값이 둘 다 바뀜

 

 

객체 선언

- 객체 내부에는 키와 값 한쌍을 이루어 데이터를 저장 할 수 있다.
- 객체 선언은 {}, new Object();로 할 수 있다.
- 객체에 저장된 함수는 메서드라고 한다.

- 객체 안에 if , ' ; '못씀 -> if 쓸려면 메서드 안에

- 멤버 여러개 쓸땐 ' , '로 나열하기

빈 객체 선언하기
var obj01 = {};
var obj02 = new Object();
값을 저장과 동시에 객체 선언하기 (키 : 값)
var obj03 = {
 name:'홍길동',
 age:20
};
//생성된 객체의 속성에 접근하기
var userName = obj03.name;
console.log(userName);
console.log(obj03['age']);


//생성된 객체에 값 대입하기
//동일한 키가 있다면 값 교체
//동일한 키가 없다면 키 생성하면서 값 저장
var obj04 = {};
obj04.name = '이순신'; 
obj04['addr']='전주시';
console.log(obj04);


//객체에 함수 저장하기(메서드)
//1.
var obj05 ={
	myFn : function(){
		console.log('메서드 호출')
	}
}
//2.
obj05.myFn2 = function(){
	console.log('메서드 호출2');
}


//객체의 메서드에 접근했을 경우 함수 코드 반환
console.log(obj05.myFn);

//실행을 하기위해서는 ();
console.log(obj05.myFn());

 

this 키워드 > 내 멤버에 접근하려면 무조건 써야함

var obj06 = {
	name: '홍길동',
	getName: function(){
		console.log(this, 'this 키워드 확인');
		return this.name;
	}
}

var obj06Name = obj06.getName();
console.log(obj06Name, 'this키워드로 속성 접근 후 반환');

 

 

 

 

더보기

실습1. 아래의 결과물이 나올 수 있도록 코드를 완성 하여라.

obj01.myArray.push('홍길동');
obj01.myArray.push('이순신');
obj01.myArray.push('유관순');
console.log(obj01.myArray, '결괏값>["홍길동","이순신","유관순"]');​

풀이

var obj01 = {
	myArray: []
};

결과


실습2. 아래의 결과물이 나올 수 있도록 코드를 완성 하여라.

obj2.setName('홍길동');
console.log(obj2.getName(), '결괏값-> 홍길동');

풀이

var obj2 = {
	name : null,
	setName : function(n){
		this.name = n;
	},
	getName : function(){
		return this.name; //자바와 다르게 내 멤버에 접근하려면 무조건 this써야함
	}				
};

결과


실습3. 아래의 결과물이 나올 수 있도록 코드를 완성 하여라.

obj3.arr.push(10);
obj3.arr.push(20);
obj3.arr.push(30);
obj3.arr.push(40);
console.log(obj3.sum(), '결괏값-> 100');

풀이

var obj3 = {
	arr : [],
				
	sum : function(){
		var sum=0;
		for(var i=0; i<this.arr.length; i++){
			sum += this.arr[i];
		}
		return sum;
	}
};

결과


실습4. 학생들의 점수 중 제일 높은 학생명의 결괏값을 가지고와 출력하여라.

못풀고 선생님 풀이...

var obj4 ={
	scoreArray : null,
	getMaxAvgScoreName : function(){
    
    }
};

obj4.scoreArray = [
	{studentName : '홍길동', score: 70},
	{studentName : '이순신', score: 90},
	{studentName : '유관순', score: 40}
];

console.log(obj4.getMaxAvgScoreName(), '결괏값->이순신');

풀이

var obj4 ={
	scoreArray : null,
	getMaxAvgScoreName : function(){						
		var maxScore = 0;
		var maxScoreStudentName;
		for(var i=0; i< this.scoreArray.length; i++) {
			if(maxScore < this.scoreArray[i].score){
				maxScore = this.scoreArray[i].score;
				maxScoreStudentName = this.scoreArray[i].studentName;
			}
		}
		return maxScoreStudentName;
	}
};

결과


실습5. 회원중 전주에 거주지가 있는 회원의 수를 구하여 출력하도록 하여라

var userInfoArray = [
	{userName :'홍길동', userAddr:'전주'},
	{userName :'고길동', userAddr:'익산'},
	{userName :'유관순', userAddr:'군산'},
	{userName :'홍길순', userAddr:'전주'},
	{userName :'둘리', userAddr:'전주'},
];

풀이

var count=0;
for(var i=0; i<userInfoArray.length; i++){
	if(userInfoArray[i].userAddr=='전주'){
		count++;
	}
}

console.log(count, '전주 회원 수');

결과


실습6. 아래의 결괏값이 나올 수 있도록 코드를 완성시켜라.

function scoreInfo(scoreObj){

}
var result = scoreInfo([20,30,40,50,60,70,80,90]);
console.log(result, '결괏값->{min: 20, max: 90, avg: 55}')//결과가 객체로 나옴

풀이

function scoreInfo(scoreObj){
	var sum = 0;
	var re = {
		min: scoreObj[0],
		max: 0,
		avg: 0
	}
				
	for(var i=0; i<scoreObj.length; i++){					
		if(re.min > scoreObj[i]){
			re.min = scoreObj[i];
		}
					
		if(re.max < scoreObj[i]){
			re.max = scoreObj[i]
		}
					
		sum += scoreObj[i];					
	}
    
	re.avg = sum / scoreObj.length;
				
	return re;
				
}

결과

선생님풀이

function scoreInfo(scoreObj){
	var min = scoreObj[0];
    var max = 0;
    var avg = 0;
    var sum = 0;
    for(var i=0; i<scoreObj.length; i++){
    	sum += scoreObj[i];
        if(max < scoreObj[i]){
        	max = scoreObj[i];
        }
        if(min > scoreObj[i]){
        	min = scoreObj[i];
        }
	}
    avg = sum / scoreObj.length;
    
    return {min: min, max: max, avg: avg};
}

 

 

728x90