ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 객체에 대해서(생성과 중첩 객체)
    Front/js 2024. 7. 5. 15:11

    ▤ 목차

       
       
       

      ✔프로토 타입 객체

      ⌨ 프로토 타입

      java는 클래스 기반 객체지향 프로그래밍 언어이다.
      객체 생성 이전에 클래스를 정의하고 객체를 생성한다.
       
      하지만 javascript는 프로토타입 기반 객체지향 프로그래밍 언어이다. 
      자바스크립트의 동작 원리를 잘 이해하기 위해서는 프로토타입의 개념을 잘 이해하고 있어야한다.
       
      프로토타입 기반 객체지향 프로그래밍 언어는 클래스 없이 객체를 생성할 수 있다.
      자바스크립트의 모든 객체는 자신의 부모 역할을 담당하는 객체와 연결되어 있다.
       
      객체지향의 상속 개념과 같이 부모 객체의 프로퍼티 또는 메서드를 상속받아 사용할 수 있다.
       
       

      👏 객체 생성 방법

      자바스크립드의 객체 생성 방법에는
      1. Object 생성자
      2. 객체 리터럴
      3. 생성자 함수
      4. 클래스
      이렇게 4개로 나뉜다.
       


       
       

      ✔ 객체 생성하기

       

      new 연산자 사용

      let obj1 = new Object();

      객체를 만들어서 생성해보겠다.
       

      obj1.irum = '신기해';
      obj1.nai=23;
      obj1.juso="강남구 역삼동";
      obj1.getJuso= ()=> obj1.juso; //약간의 getter

      출력해보자.

      console.log(typeof obj1); //object
      console.log(obj1.toString()); //[object Object]
      console.log(obj1); //{irum: '신기해', nai: 23, juso: '강남구 역삼동', getJuso: ƒ}

       
      객체가 json 형식으로 저장된다.
       
       
       

      💻 literal(data) 사용

      let myObj = {
      		irum:'홍길동',
      		nai:33,
      		showNai: function(msg){
      			return this.nai + msg
      			},
      		}

       
      literal로 객체를 생성했을때 어떻게 나오는지 확인해보자.
       

      console.log(typeof myObj); //object
      console.log(myObj.toString());//[object Object]
      console.log(myObj);//[object Object]

       
      위와 동일하게 들어간다. new를 생성하는 것과 비교해보면, 직접 json처럼 값 : 키를 작성한다.
       
       

      👏 this

      메서드 내부에서 객체 멤버에 접근한다.
      this는 바인딩이 객체가 생성되는 시점에 결정된다.
      일반 함수 호출시 this가 최상위 객체(global 이나 window)를 가리킨다.
      메소드를 호출 시 호출된 객체를 가리킨다.
      new 키워드를 사용해서 객체를 생성했을 때는 해당 객체를 가리킨다.
       
      [바인딩]

      더보기

      메모리에 값을 할당하는 것

      프로그램의 어떤 기본 단위가 가질 수 있는 구성 요소의 구체적인 값, 성격을 확정하는 것을 말한다.

      즉, 프로그램의 각종 변수들을 실제 값으로 묶어 확정하는 

       

      ✏️ 함수 별도 작성 후 객체에 할당 가능

      let users={
      	name :'tom',
      	age:25,
      };
      
      users.sayHi = ()=>{
      	console.log('안녕');
      }
      console.log(users); //{name: 'tom', age: 25, sayHi: ƒ}
      users.sayHi();

       
      위의 코드와 같이 함수를 따로 작성한 다음 함수로 바꿀 수 있다.
       
       
       

      🪄생성자 함수를 사용

      java에서 생성자와 같이 함수를 선언할 수 있다.
      생성자 함수를 선언할 때는 관례가 있는데 함수 이름은 대문자로 표시한다.

      function Person(name){
      	this.name = name;
      	this.setName = function(newName){
      		this.name = newName;
      		};
      	};

      위와 같이 생성자 함수를 사용하면 해당 객체를 호출하면서 값을 계속 받을 수 있다.
      이래와 같이 활용할 수 있다.

      let pp = new Person('사오정');
      
      document.querySelector('#disp5').innerHTML = pp.name; //사오정

       
      아래 코드는 html 파일에 해당값을 뿌려주는 역할을 한다.
      Person 객체는 파라미터를 원한다.
       

      let pp2 = new Person(); //let pp2 = new Person; 같은 의미
      document.querySelector('#disp6').innerHTML = pp2.name;//undefined

      만약 파라미터를 전달하지 않는다면?
      당연하지만 undefined 값이 나온다.
       
       
      [property 단축 구문 shorthand properties ]

      더보기

      프로퍼티의 키와 값이 동일할 때 키명만 적어도 된다.

      같은 이름의 변수값을 자신의 값으로 사용한다.

      function MakeUser(name,age){
      		return{
      			//name:name,
      			name, // property 단축 구문 (명이 같은 경우)
      			age,
      		}
      	}
      	let user1 = MakeUser('길동', 22);
      	document.querySelector('#disp9').innerHTML = user1.name + ' '+ user1['age'];
      	user1 = null; //GarbageCollector에 의해 메모리 해제

       
       


       
       
       

      ✔ 중첩 함수

      객체 또한 중첩으로 사용할 수 있다.

      • 최상위 레벨에만 사용할 수 있다.
      • if 또는 while문 등 문장에서 작성할 수 없다.
      • 단위 로직을 함수로 만드는 행위는 응집도를 높일 수 있다.

      ⌨ 형식

      let 객체명 = {
      	키: 값
          ...
          객체명 {
          	키 : 값,
              ...
          }
      }

       
      내부에 존재하는 지역적인 변수들이 존재한다면 그 변수들은 함수가 실행될 때만 존재한다.
       

      💻 코드로 보기

      let myFriend = {
      			name:'손오공',
      			age:23,
      			otherFriend : {
      				name:'박치기',
      				job:'프로그래머',
      			},
      	};

       

      let str4 = `${myFriend.name}님의 나이는 ${myFriend.age} 다른 친구는 ${myFriend.otherFriend.name}입니다`; 
      	document.querySelector('#disp4').innerHTML = str4;

       
       


       
       

      ✔ 클래스

      클래스는 Object와 관련이 있다.
      객체를 생성하기 위한 템플릿이라고 생각하면된다.
      클래스는 OOP에서 특정 객체를 생성하기 위해 멤버를 저으이하는 일종의 설계도(틀)이다.
      기존 프로토타입을 기반으로 객체를 생성하는 것보다 조금더 명료하게 작성이 가능하다.
       

      ⌨ 형식

      class 클래스명{
      	a = '서울'; //멤버 변수
          
          constructor(){} //생성자
          메서드명(){} //메서드
      }
      • 멤버 변수는 let이나 const 사용이 불가하다.
      • 생성자로 멤버 변수를 만든다면 (java와 비교해보면) 상단에 정의하지 않아도 된다.(생략 가능)
      • 즉, 생성자에서 각 인스턴스의 멤버 변수로 만들어진다.

       
       

      💻 코드로 보기

      class Class1{
      	addr = '서울'; //멤버변수(prototype 속성), let, const X
      	name; //생성자로 값을 받을 때는 생략 가능, 가독성을 위해 적어도된다.
      	
      	constructor(name){ //생성자
      		this.name = name; //각 인스턴스의 멤버 변수로 만들어짐
      	}
      	
      	sayHi(){ //멤버 메소드
      		document.write("<br>",this.name);
      		document.write("<br>",this.addr);
      		let msg = "프로그래머"; //지역변수
      		return "<br> 이름은 " +this.name + " "+ msg;
      	}
      }

       
       

      👏 중요

      클래스는 자바와 약간 비슷하다.
      이런 부분은 js가 java와 닮아간다는 생각을 했다.
      https://hi-hahahoho.tistory.com/67
      클래스에 대해 더 자세히 정리해둔 글이다.


       

    Designed by Tistory.