⛏️
공부방
  • README.md
  • 프로젝트
    • ft_transcendence
      • 설계
        • 0. 프론트 디자인
        • 1. BackboneJS 뷰 객체
        • 2. API 설계
        • 3. 레일즈 라우팅 구현
        • 4. DB 설계
        • 5. 채널 설계
    • slab-saver
    • react-payment
  • 공부
    • HTML, CSS
      • GRID
      • emmet
      • position
      • CSS Unit
        • 단위 정리
        • 기준을 정해보자
        • em의 정확한 기준은 뭐야?
      • flex
      • NAVBAR 실습
      • 유튜브 화면 만들어보기
    • SQL
      • 이론
        • 1강 데이터베이스
        • 2강 다양한 데이터 베이스
        • 3강 데이터베이스 서버
      • 명령어
        • DB 관리
        • TABLE 관리
        • Constraints
        • SQL 명령어 - 1
        • SQL 명령어 - 2
        • SQL 명령어 - 3
        • SQL 명령어 - 4
        • SQL 명령어 - 5
    • Ruby
      • 루비 객체와 클래스
      • 곡괭이
        • Chapter2. Ruby.new
        • Chapter3. 클래스, 객체, 변수
        • Chapter4. 컨테이너, 블록, 반복자
        • Chapter5. 기능 공유하기
        • Chapter6. 표준 타입
        • Chapter8. 메서드 파헤치기
    • Python
      • 유용한 링크
    • RubyOnRails
      • 아직 정리하지 못한 것들
        • RSPEC 을 이용한 테스트 완전 자동화
        • 레일즈 이니셜라이징 과정
        • 액션케이블 구체적으로 정리하기
        • 웹팩으로 자바스크립트 모듈 관리하기
      • ACTIVE JOB
        • 액티브잡의 기본
        • 실전! 액티브 잡을 이용한 스케쥴링
        • 서버를 껏다 키면 스케쥴링 된 이벤트가 사라진다!
      • ACTION CABLE
        • 액션케이블 Consumer를 이용해서 문제 해결
        • 액션케이블 연결 순서
      • ACTIVE STORAGE
      • 모델
        • validation
          • seeds 데이터 validation 스킵
          • validation 검사가 save, update, create 모든 경우에 일어난다
          • validator 클래스
          • 커스텀Validation
          • validates format(정규표현식)
        • 액티브레코드 find의 다양한 활용
        • 한 레코드에 동시 접속 막자!! with_lock
        • 레일즈 where 사용법
        • 레일즈에서 모델 관련 이슈
        • 모델이름바꿀때명심할것
        • 모델의 includes 메서드
        • 연관 모델을 다른 이름으로 설정하고 가져오기
      • 기본 상식
        • form으로 전달되는 params를 분석해보자
        • StrongParameter 쿼리 배열 받기
        • view helper로 디버깅 하는 방법
        • css 파일을 수정했는데 적용이 안된다?
        • StrongParameter 일반데이터와 객체 데이터 한번에 받기
        • wrap-parameter body가 두 번씩 날라오는 이유
        • 컬렉션 map에서 요소 스킵하는법
        • CASE를 이용해서 정렬(일반적인 정렬 X)
        • 문자열(정규표현식)
        • TIME ZONE 설정하기
        • 커스텀exception
      • RSPEC으로 모델 테스트하기
      • 한 눈에 읽는 루비 온 레일즈
      • Perfect RubyOnRails
        • Chapter1. 소개
        • Chapter2. RubyOnRails 기본
        • Chapter3. 스캐폴딩
        • Chapter7. 라우팅
        • Chapter8. 테스트
    • Javascript
      • var, let, const 차이
      • 브라우저 동작 원리
      • 디바운싱과 쓰로틀링
      • Tagged Template Literal(styled-components)
      • IntersectionObserver 를 사용해서 스크롤 이벤트의 부하 줄여주기
      • EVENT LOOP
        • 자바스크립트에서 어떻게 비동기적인 실행이 가능한걸까?
        • 이벤트 루프의 동작
        • setTimeout이 실행되면 어떤 동작이 일어날까?
        • 블록은 실행이 보장된다
        • 콜스택에 있는 블록이 보장된다는 점을 이용해서 브라우저 죽이기
        • setTimeout 무한반복으로 브라우저는 죽을까?
        • Promise 무한반복으로는 브라우저를 죽일 수 있을까?
        • RAF는 그럼 뭐야?
      • forEach는 반복도중 멈출 방법이 throw 밖에 없다!
      • 임시
        • 정리할 것 목록
          • 자바스크립트 기본 문법
        • 이벤트 임시 정리
      • 유용한 링크
      • arrow function 을 이용한 bind 이슈 해결
      • preventDefault - passive
      • CRITICAL-RENDERING-PATH
      • setInterval에 클로져 개념 사용하기
      • 오디오 문제 이슈
      • 자바스크립트의 식과 문
        • 식과 문이란 무엇인가...
        • 식
          • 1. 기본값과 래퍼객체
          • 2. 참조값과 가비지컬렉팅
        • 식을 조금 더 자세히 알아보자
      • prototype, [[Prototype]] 차이
      • export, import 학습
      • ESlint
      • 아주아주기본
        • Chatper1. 기본
        • Chapter2. 타입
        • Chapter3. 연산자
        • Chapter4. 제어문
        • Chapter5. 배열
        • Chapter6. 함수
        • Chapter7-1. 객체
        • Chapter7-2. 객체
        • Chapter8. 표준객체
        • Chapter9. DOM
      • 이벤트 위임
      • 이벤트가 버블링 되서 root 까지 가다보면... 부모의 부모의 ... 모든 click 이벤트를 발동시키는거 아니야?
      • classList
    • BackboneJS
      • Backbone Model 프로토타입에 메서드 구현하기
      • BackboneJS의 각 요소의 역할과 책임을 확실히 이해하자
      • Window 이벤트를 listenTo로 감시하기
      • 뷰 자신이 자신을 지워야 할 때를 감지하려면 어떻게 해야하는가?
      • 백본 VIEW의 remove와 jquery의 remove 는 다르다!
      • 백본 컬렉션 URL에 쿼리 붙이기
      • index.html.erb와 BackboneJS의 결합
      • 백본 모델과 컬렉션에서 fetch 를 통해 JSON 가져오기!
      • 모델은 urlRoot, 컬렉션은 url
      • ISSUE
      • Absolute Beginner
        • Part1
        • Part2
        • Part3
        • Part4
    • 문제풀이
      • 01. 유효한 팰린드롬(leetcode: 125)
      • 02. 문자열 뒤집기(leetcode: 344)
      • 03. 로그파일 재정렬(leetcode 937)
      • 04. 가장 흔한 단어(leetcode: 819)
      • 05. 그룹 애너그램(leetcode: 49)
      • 06. 가장 긴 팰린드롬 문자열(leetcode: 5)
      • 07. 두 수의 합(leetcode: 1)
      • 08. 빗물 트래핑
      • 09. 세 수의 합(leetcode: 15)
    • BlackCoffeeStudy
      • level1
        • 1주차
    • express
      • Untitled
      • 구글 애널리틱스 연결하기
      • passport를 활용한 로그인
      • express-init 명령어 사용
      • ec2와 DBeaver
      • mariadb 설치
      • sequelize 설치 및 사용법
        • sequelize 설치
        • sequelize-cli 사용법
        • 모델 간 연관관계 맺기
        • Hook 사용하기
      • express-ejs-layout 활용하기
      • Bootstrap
      • npm install로 설치한 모듈 ejs에서 사용하기
      • 미들웨어
    • cypress
      • window.alert 테스트는 어떻게 하지?
      • 상수를 어디에 저장할건가?
      • before()와 beforeEach()
    • aws
      • aws로 프로젝트를 배포해보자!
      • nginx로 리버스프록시 서버를 만들자
      • github actions 로 푸쉬되면 자동으로 업데이트 하는 기능 만들어보기
    • react
      • Drag & Drop 를 이용해서 리스트 요소 순서 바꾸기
      • CRA에서 CRACO 사용하지 않고 절대경로 import(NODE_PATH)
      • useEffect내에서 state의 dependency 문제
      • IntersectionObserverAPI로 무한스크롤 구현
      • react-testing-library
        • 기본
        • react-router-dom 에서의 에러
        • event 발생시키기
        • Integration testing하기
        • async하게 렌더링 되는 요소 잡기
        • Mocking 하기
      • CRA로 만든 앱에서 절대경로로 import 해오기(alias하기)
      • 커스텀 훅 만들기
    • 타입스크립트
      • 조건부타입 (Conditional types)
      • Generics
      • Keyof 타입 오퍼레이터
      • Indexed Access Types
      • 타입 챌린지
        • easy
          • 00. Awaited
          • 01. Concat
          • 02. Exclude
          • 03. First Of Array
          • 04. If
          • 05. Includes
          • 06. Pick
          • 07. Readonly
          • 08. Length
          • 09. Tuple to Object
        • mediun
          • 01. Absolute
    • Firebase
      • 파이어스토어 규칙
    • 기타
      • 협업 프로세스
      • UUID
      • 구글애널리틱스 설치하기
      • 드림코딩 강의
        • 포트폴리오
          • CSS
            • nth-child
            • CSS 팁
          • 자바스크립트
            • 1. 스크롤에 따른 navbar 의 색 변경하기
            • 2. navbar 버튼을 누르면 해당 페이지로 스크롤링 되게 만들자
            • 3. 스크롤 다운 하면 arrow-up 버튼 나오게 하기
            • 4. project 필터링 구현
            • 5. project 필터링에 transition 효과 넣기
      • GIT
        • 기본 사용법 정리
        • git remote update - remote 브랜치 가져오기
  • 기타
    • 이것저것
      • 독서
        • 클린코드
          • Chapter0. 나는 왜 클린코드 책을 읽는가?
          • Chapter1. 클린코드
          • Chapter2. 의미있는 이름
          • Chapter3. 함수
          • Chapter4. 주석
          • Chapter5. 형식 맞추기
      • 용어
      • IDE
        • RubyMine
          • 실전이 중요!
          • 1. Editor Basic
          • 2. Navigation
          • 3. Completion
          • 4. Refactoring
          • 5. Code Assistance
      • MAC에서 살아남기
        • Alfred - Spotlight 업그레이드
        • Vimium
        • BetterTouchTool - 트랙패드
        • 구름 입력기 - ESC, `
        • Spectacle - 화면 분할
    • 원티드 프리온보딩
      • 1주차
        • 월요일
        • 목요일
      • 2주차
      • 3주차
      • 4주차
      • 5주차
      • 6주차
    • 일기장
      • 2020
        • December
          • 20201208(화)
          • 20201209(수)
          • 20201210(목)
          • 20201211(금)
          • 20201214(월)
          • 20201215(화)
          • 20201216(수)
          • 20201217(목)
          • 20201218(금)
          • 20201219(토)
          • 20201221(월)
          • 20201222(화)
          • 20201223(수)
          • 20201224(목)
          • 20201226(토)
          • 20201228(월)
          • 20201229(화)
          • 20201230(수)
          • 20201231(목)
      • 2021
        • January
          • 20210101(금)
          • 20210102(토)
          • 20210105(화)
          • 20210106(수)
          • 20210107(목)
          • 20210108(금)
          • 20210109(토)
          • 20210112(화)
          • 20210113(수)
          • 20210114(목)
          • 20210115(금)
          • 20210117(일)
          • 20210118(월)
          • 20210119(화)
          • 20210120(수)
          • 20210121(목)
          • 20210125(월)
          • 20210126(화)
          • 20210127(수)
          • 20210128(목)
          • 20210129(금)
        • February
          • 20210201(월)
          • 20210202(화)
          • 20210203(수)
          • 20210204(목)
          • 20210205(금)
          • 20210207(일)
          • 20210208(월)
          • 20210209(화)
          • 20210217(수)
          • 20210218(목)
          • 20210219(금)
          • 20210220(토)
          • 20210222(월)
          • 20210223(화)
          • 20210224(수)
          • 20210226(금)
          • 20210228(일)
        • March
          • 20210302(화)
          • 20210303(수)
          • 20210304(목)
          • 20210305(금)
          • 20210306(토)
          • 20210308(월)
          • 20210309(화)
          • 20210310(수)
          • 20210311(목)
          • 20210312(금)
          • 20210313(토)
          • 20210315(월)
          • 20210316(화)
          • 20210317(수)
          • 20210318(목)
          • 20210319(금)
          • 20210322(월)
          • 20210323(화)
          • 20210324(수)
          • 20210325(목)
          • 20210327(토)
          • 20210329(월)
          • 20210330(화)
          • 20210331(수)
        • April
          • 20210406(화)
          • 20210407(수)
          • 20210408(목)
          • 20210409(금)
          • 20210410(토)
          • 20210412(월)
          • 20210413(화)
          • 20210414(수)
          • 20210415(목)
          • 20210416(금)
          • 20210417(토)
          • 20210419(월)
          • 20210420(화)
          • 20210421(수)
          • 20210422(목)
        • July
          • 20210728(수)
Powered by GitBook
On this page
  • 객체의 개념
  • JS 객체
  • 객체의 프로퍼티 참조
  • 메서드 참조
  • 객체의 생성
  • 리터럴 표기를 이용한 생성
  • 생성자를 이용한 객체의 생성
  • Object.create() 메서드
  • 프로토타입
  • 상속
  • 프로토타입
  • 프로토타입 체인
  • 프로토타입의 생성
  • 객체에 프로퍼티 및 메소드 추가
  • 프로토타입에 프로퍼티 및 메서드 추가
  • 객체 다루기
  • this 키워드
  • 객체 프로퍼티의 삭제
  • 객체 프로퍼티의 순회
  • 객체간의 비교
  • 객체 프로퍼티와 메서드
  • 객체 프로퍼티
  • 객체 메서드
  • getter와 setter 메서드의 정의

Was this helpful?

  1. 공부
  2. Javascript
  3. 아주아주기본

Chapter7-1. 객체

객체의 개념

JS 객체

  • JS의 기본 타입은 객체다

  • 객체란 이름과 값으로 구성된 프로퍼티의 정렬되지 않은 집합이다.

  • 프로퍼티의 값으로 함수가 올 수도 있는데, 이런 프로퍼티를 메서드라고 한다.

var normal = '하' // 일반 변수
var obj = { first_name: 'sang', last_name: 'nam', age: 27 }; // 객체
  • JS에서는 숫자, 문자열, 불리언, undefined 타입을 제외한 모든 것이 객체다.

    • 하지만 숫자, 문자열, 불리언은 객체로서의 특징도 갖는다.

객체의 프로퍼티 참조

  • [] 또는 . 으로 참조한다.

메서드 참조

  • 객체이름.메서드이름()로 접근

  • ()를 붙이지 않으면 메서드가 아닌 프로퍼티로서 참조한다.

객체의 생성

  1. 리터럴 표기

  2. 생성자 함수

  3. Object.create() 메서드

  4. 위와 같은 방법으로 생성되어 메모리에 대입된 객체를 인스턴스 라고 한다.

리터럴 표기를 이용한 생성

  • 각각의 프로퍼티는 이름과 값을 콜론으로 연결하고 쉼표를 사용해 다른 프로퍼티와 구분한다.

  • var test = {
      test1: "asd",
      test2: "zxcv"
    };

생성자를 이용한 객체의 생성

  • new 연산자를 사용하여 객체를 생성하고 초기화할 수 있다.

  • 이 때 사용되는 메서드를 생성자라고 한다.

    • 원시타입을 위한 생성자를 미리 정의하여 제공한다.

Object.create() 메서드

  • 지정된 프로토타입 객체와 프로퍼티를 가지고 새로운 객체를 만들어 준다.

  • 이 메서드를 이용하면 사용자가 프로토타입 객체를 직접 명시할 수 있으므로 유용하다.

프로토타입

상속

  • 새로운 클래스에서 기존 클래스의 모든 프로퍼티와 메서드를 사용할 수 있게 함

  • C++같은 클래스 기반의 객체지향 언어와는 달리 JS는 프로토타입 기반의 객체지향 언어다.

    • 상속의 개념이 클래스 기반 객체 지향과 다름

  • JS에서는 현재 존재하고 있는 객체를 프로토타입으로 사용하여, 해당 객체를 복제하여 재사용하는 것을 상속 이라고 한다.

프로토타입

  • JS의 모든 객체는 프로토타입 이라는 객체를 갖는다.

  • 모든 객체는 그들의 프로토타입 으로부터 프로퍼티와 메서드를 상속 받는다.

  • JS의 모든 객체는 최소한 하나 이상의 다른 객체로부터 상속을 받으며, 이때 상속되는 정보를 제공하는 객체를 프로토타입 이라고 한다.

프로토타입 체인

  • JS에서는 객체 생성자를 사용해 생성된 같은 타입의 객체들은 모두 같은 프로토타입 을 갖는다.

  • new 연산자를 사용해 생성한 객체는 생성자의 프로토타입을 자신의 프로토 타입으로 상속 받는다.

프로토타입의 생성

  • 가장 기본적인 방법은 객체 생성자 함수를 작성하는 것

  • 생성자 함수를 작성하고 new 연산자를 사용해 객체를 생성하면, 같은 프로토타입을 가지는 객체들을 생성할 수 있다.

  • function Test(name, age) {
      this.name = name;
      this.age = age;
    }
    
    a = new Test("ha", 1);

객체에 프로퍼티 및 메소드 추가

  • 위의 예시에서 만들었던 Test의 인스턴스 a 에다가 메서드를 추가해보자

  • a.func = function() {
      console.log("new method");
    }
    
    a.func() // new method
    
    b = Test("b", 100)
    b.func() // error
  • 추가된 메서드는 인스턴스 a 에서만 사용할 수 있다.

  • 프로토타입에는 추가가 되지 않는다. 그 객체에서만 추가가 됨

프로토타입에 프로퍼티 및 메서드 추가

  • prototype 프로퍼티를 이용하면 된다.

  • Test.prototype.func() = function() {
      console.log("This is new method!");
    }
    
    b = new Test("b", 10);
    b.func() // This is new method

객체 다루기

this 키워드

  • this 키워드는 해당 키워드가 사용된 자바스크립트 코드 영역을 포함하고 있는 객체를 가리킨다.

    • 메서드 내부에서 사용된 this 는 해당 메서드를 포함하고 있는 객체를 가리킨다.

    • 객체 내부에서 사용된 this 는 객체 자신을 가리킨다.

    • this는 변수가 아닌 키워드이므로 사용자가 임의로 변경할 수 없다.

객체 프로퍼티의 삭제

  • delete로 객체의 프로퍼티를 삭제할 수 있다.

객체 프로퍼티의 순회

  • for / in 문을 사용하여 객체의 모든 프로퍼티를 순회할 수 있다.

    • 메서드도 해당 사항임

  • Object.getOwnPropertyNames() 메서드느 해당 개체가 가진 모든 고유한 프로퍼티의 이름을 배열에 담아 반환한다.

    • 메서드는 포함 안됨

객체간의 비교

  • JS에서 별개의 두 객체는 프로퍼티의 값이 모두 같아도, 절대로 같다고 말할 수 없다.

  • var a = new Test("a", 10);
    var b = new Test("a", 10);
    
    a == b // false
    a === b // false
    
    var c = a;
    
    a == c // true
    a === c //true
  • 위에서 각 변수들은 해당 객체의 주소를 가리키고 있는 객체 레퍼런스 다.

  • 따라서 a와 b 자체는 다를 수 밖에 없다.

  • a와 c 에서 true 값이 나오는건, 변수 c 가 레퍼런스 객체 a 를 가리키고 있기 때문

객체 프로퍼티와 메서드

객체 프로퍼티

  • 모든 JS 객체는 Object 객체와 Object.prototype 객체의 모든 프로퍼티를 상속 받는다.

  • ptorotype 프로퍼티 를 이용하면 현재 존재하는 프로토타입에 새로운 프로퍼티나 메서드를 손쉽게 추가할 수 있다.

객체 메서드

  • 모든 객체는 Object를 상속 받으므로 만들지 않아도 사용할 수 있는 함수가 몇가지 존재한다. 아래가 대표적인 함수.

    1. hasOwnProperty()

      • 특정 프로퍼티가 해당 객체에 존재하는지를 검사한다.

    2. propertyIsEnumerable()

      • 특정 프로퍼티가 해당 객체에 존재하고, 열거할 수 있는지를 검사한다.

      • 열거할 수 있는 프로퍼티른 내부적으로 enumerable 플래그 가 true로 설정된 프로퍼티

    3. isPrototypeOf()

      • 특정 객체의 프로토타입 체인에 현재 객체가 존재하는지를 검사

    4. isExtensible()

      • 객체에 새로운 프로퍼티를 추가할 수 있는지의 여부를 반환

      • 기본적으로는 다 추가할 수 있지만, preventExtensions 메서드를 사용하여 불가능으로 만들수도 있음

    5. toString()

      • 메서드를 호출한 객체의 값을 문자열로 반환

    6. valueOf()

      • 특정 객체의 원시 타입의 값을 반환

getter와 setter 메서드의 정의

  • 단순 값을 지닌 데이터 프로퍼티와는 달리 접근자 프로퍼티 라고 부른다.

  • 조금 나중에 알아보자.

PreviousChapter6. 함수NextChapter7-2. 객체

Was this helpful?