본문 바로가기

Javascript

[새싹 프론트엔드] 4주차 - 1

객체

자바스크립트 객체 구성

• 여러 개의 프로퍼티(property)메소드로 구성

  • 프로퍼티 : 객체의 고유한 속성 *객체는 중괄호를 열고 닫음

  • 메소드(method) : 함수

 

 

배열과 객체의 차이점

배열은 원소에 접근 할 때, 숫자를 사용

객체는 원소에 접근 할 때, 문자열을 사용

   • 문자열키(key) 또는 프로퍼티(property)라 부름

   • 문자열이 가리키는 원소를 값이라 함

 

• 배열은 여러 개체를 표현할 때 사용

   • 예) 여러 동물의 이름이 나열된 배열

• 객체는 다양한 특성이나 속성이 있는 하나의 개체를 표현 할 때 사용

   • 예) 한 동물과 관련된 여러 정보를 저장

 

객체 생성

한 가지 동물에 관한 여러 정보를 저장

• 다리가 두 개인 고양이 ‘야옹이’에 대한 정보가 저장된 객체

   • 변수 생성

   • 세 개의키-값 쌍이 들어있는 객체를 할당

   • 객체를 생성 시에는 중괄호({ }) 사용

 

 

리터럴 표기법

• 중괄호를 이용하여 프로퍼티와 메서드를 한 번에 작성

 

 

따옴표가 없는 키

각 키의 따옴표 생략

• 자바스크립트는 키가 문자열이어야 한다는 것을 알고 있음

• 따라서 따옴표는 생략 가능

 

따옴표 사용 시

• 키 이름에 공백 포함 가능

따옴표 생략 시, 불가능

객체 안의 값 접근

따옴표를 사용하여 접근하는 경우

• 배열처럼 대괄호를 사용해서 접근

 

따옴표를 생략하고 접근하는 경우(점 표기법)

이 방법을 더 많이 사용

 

 

객체내의 모든 키 목록

• Object.keys()

 

객체에 값 추가

빈 객체

 

객체에 원소 추가

 

✔️ 객체의 키는 순서가 없음

• 따라서, 키의 순서가 중요할 때는 객체를 사용하지 않음

• 배열에는 순서가 있음 (키의 순서 중요할 때는 배열!) 

  * 배열안에 객체도 넣을 수 있음

 

점 표기법으로 키 추가하기

JSON.stringify()

자바스크립트의 값을 JSON 문자열로 변환

 

객체와 배열 결합하기

객체/배열의 값으로 객체/배열을 사용

• 예) 공룡 객체로 만든 배열 (객체 안에 배열)

 

공룡에 대한 정보를 얻을 때

 

친구 배열

   • 3개의 객체 생성 (객체 안에 배열이 들어가있음)

   • 각 객체에 ‘이름, 나이, 행운의숫자’라는 키 삽입

   • 이름(문자열), 나이(숫자), 행운의숫자(숫자 배열)

   • 각 원소는 해당하는 친구 객체를 참조

 

정보 가져오기

• 배열의 인덱스를 사용

• 객체의 값 얻기

• 내부 배열의 값 얻기

 

빌려준 돈 기록하기

   • 객체를 활용하여 문자열과 값을 연결

   • 키(친구 이름), 값(빌린 금액)

• 지훈이가 3000원을 더 빌림

• 각 친구가 빌린 돈 확인 (전체 객체 보기)

 

 

영화 관련 정보 저장하기

• 키(영화제목), 값(영화 정보를 담은 객체)

 

• 영화 정보 얻기

 

• 새로운 영화 추가

 

• 모든 영화 제목 얻기

 

const로 선언된 객체의 값 변경하기

실행 결과

 

 

const로 선언된 객체 내부 값 변경하기

값을 재할당하는 건 불가능하지만 값을 변경하는 것은 가능

메모리 주소만 참조하기 때문에 값이 변경되는 것은 상관 없음.  메모리 주소가 바뀌지 않고  값만 변경할 수 있음

 

 

객체 생성문 축약

 key와 변수의 이름이 같은 경우 축약 가능

값을 생략하고 키만 써도 됨 (대신 키와 변수의 이름이 같을 경우만!)

결과

 

 

객체 안에 함수 넣기

값자리 (value자리)에 객체나 배열 함수 다 올 수 있다

실행 결과

 

함수 호출

실행 결과

 

화살표 함수

화살표 함수의 안 그니까 객체의 안에서의 화살표 함수에서 this는 function으로 선언된 부모 함수들을 찾아가는 것으로 해석됨 (absolute와 비슷) speak의 상위함수가 없기 때문에 undefined로 뜸

따라서 객체 안에서는 무조건 function으로 선언하자!

실행 결과

 

생성자 함수를 이용하여 객체 생성하기

생성자 함수

• 유사한 객체를 여러 개 생성 할 수 있음 (틀을 만드는 것)

 

특징

• 함수 이름의 첫 글자는 대문자로 시작

new 연산자를 붙여서 실행

 

• 객체 생성 예시) 변수 누군가가 Animals를 부를 때 해당데이터가 이 변수에 차곡차곡 쌓임

실행 결과

 

내장 객체

Date 객체

• 시간 정보를 담는 객체

• 현재 시간 정보

 

예) 2017년 4월 1일의 날짜 정보를 기록하는 객체 생성

• Date 객체에서 월(month) 값은 0부터 시작 (4월 이면 0,1,2,3 해서 3)

• 0은 1월, 11은 12월

 

 

 

Date 객체로 현재 시간 알아내기

<body>
    <h3>Date 객체로 현재 시간 알아내기</h3>
    <hr>
<script>
    var now = new Date(); // 현재 시간 값을 가진 Date 객체 생성
    document.write("현재 시간 : " + now.toLocaleString() + "<br><hr>");
    document.write(now.getFullYear() + "년도<br>");
    document.write(now.getMonth() + 1 + "월<br>");
    document.write(now.getDate() + "일<br>");
    document.write(now.getHours() + "시<br>");
    document.write(now.getMinutes() + "분<br>");
    document.write(now.getSeconds() + "초<br>");
    document.write(now.getMilliseconds() + "밀리초<br><hr>");
    var next = new Date(2021, 7, 15, 12, 12, 12); // 7은 8월
    document.write("next.toLocaleString() : "+ next.toLocaleString() + "<br>");
</script>
</body>

 

실행 결과

 

Math 객체

• 수학 계산을 위한 객체

• new Math()로 객체를 생성하지 않음

난수 발생

• Math.random()

• 1보다 작은 0~1 사이의 실수를 리턴

• Math.floor(m)

• m의 소수점 이하를 제거한 정수 리턴

• 예) 0~100 보다 작은 정수 10개를 랜덤하게 생성 ( 0~99)

 

var random = 0;
      for (i = 0; i < 10; i++) {
        var random = Math.floor(Math.random() * (99 + 1));
        document.write(random);
        document.write("<br>");
      }

 

 


 

 

[실습회고]

첫 ,,, 문제부터 막혀벌인 1인,,  ( car [1].색상 );  이렇게 했는데 다른 방법을 적용해야 했다. 왜냐면 저건 객체 안에 배열에 대한 정보를 얻을 때 쓰는 방법이었고 car["색상"] = "red"; 이렇게 먼저 선언해놓고 car["색상"] 이렇게 호출해야 저렇게 나오는 것이었던 것 그렇게 조금 머리싸매다가 한 문제 완. 오늘도 바보가튼 나의 모습,,,

  <script>
        // 프로퍼티 : 속성
        // 메소드 : 함수
        var person = {
            name : "Hello!",
            firstName :" My name is Sooa",
            lastName :"Jung",
            sayHello : function(){
                document.write(this.name , this.firstName , this.lastName);
            }
        };
        person.sayHello();
   </script>

 

그 뒤로 쭉쭉 풀다가 또 막혀벌인... 아니 이거 뭐야 뭐지 ? 했다가 function이랑 this.name 써야한다구래서 그냥 낑낑 댐

프로퍼티는 속성 메소드는 함수니까 sey hello를 함수로 지정하고 메소드를 걍 포함시키면 되는 일인데 왜 지나고보면 그제야 쉬운지 ,,  (사실 안 쉬움 ) 아 글고 저 앞에 헬로 마이네임 이즈는 걍 쓰는 건데 저것도 변수에 담아야하는 줄 알고 어거지로 담앗다가 다시 방생 ;;;여튼 간에 해결 완

 <script>
      // 프로퍼티 : 속성
      // 메소드 : 함수
      var person = {
        firstName: "Sooa",
        lastName: "Jung",
        sayHello: function () {
          document.write(
            "Hello my name is" + " " + this.firstName + " " + this.lastName
          );
        },
      };
      person.sayHello();
    </script>

 

이 문제는 쉽게 풀었다가 출력문을 하나로 써야한다해서 엥 ,,? 도대체,, 그거 어케하는건데,, 아니 뭐 함수 써야겠는 건 알겠는데,, 어케하는 건데요 그거,, 이러다가  새 변수를 만들어서 그 변수에 함수 자체를 넣어준다라는 생각을 통해 완성하게 되었다. (귤님 최고) 근데 다른 분의 코드도 보게 되었는데 파라미터를 ,,, 쓰면 되는 일이었는데,, 인강도 들었는데,, 생각이 안 났다 이말이죠 ,,,, 여튼 완

<script>
      function Fruits(name, color, price) {
        this.name = name;
        this.color = color;
        this.price = price;
        this.print = function () {
          document.write(
            `이름 : ${this.name} <br> 색깔 :  ${this.color} <br> price : ${this.price} <hr>`
          );
        };
      }
      let apple = new Fruits("사과", "red", 1000);

      let orange = new Fruits("오렌지", "orange", 3000);

      let mango = new Fruits("망고", "yellow", 4000);

      apple.print();
      orange.print();
      mango.print();
</script>

 

 

 

 

 

 

 

 

새싹DT 기업연계형 프론트엔드 실무 프로젝트 과정 4주차 블로그 포스팅