본문 바로가기
반응형

Programming256

JavaScript 객체 생성방식의 종류? OrdinaryObjectCreate 객체를 생성하는 방법은 여려가지가 있다. 하지만 공통점은 모든 객체 생성방식은 OrdinaryObjectCreate 추상연산을 통해 만들어진다는 것이다. 먼저, OrdinaryObjectCreate은 자신이 생성할 객체의 프로토타입을 인수로 전달 받는다. 자신이 생성할 객체에 추가할 프로퍼티 목록을 옵션으로 전달한다. OrdinaryObjectCreate는 빈 객체를 생성한 후, 객체에 추가할 프로퍼티 목록을 객체에 추가한다. 인수로 전달받은 프로토타입을 자신이 생성한 객체의 [[Prototype]] 내부 슬롯에 할당한 후 생성한 객체를 반환한다. 객체 생성의 종류 객체 리터럴 Object 생성자 함수 생성자 함수 Object.create 메서드 클래스(ES6) 객체.. 2021. 10. 29.
JavaScript 프로토타입이란 1. 생성자 함수로 인스턴스를 생성하게 되면, 변수와 메소드를 중복 소유하는 현상이 발생하게 된다. 이는 중복에 의한 불필요한, 메모리 낭비가 발생하게 되어 프로그램의 성능을 저하시키는 원인이 된다. 자바스크립트는 프로토타입 prototype을 기반으로 하여 상속을 구현한다. 생성자 함수가 생성하는 모든 인스턴스는 인스턴스 자신의 상위 객체인 생성자 함수의 prototype을 상속받게 된다. 다시, 모든 객체는 [[Prototype]]이라는 내부슬롯을 가지고 있다. 모든 객체는 '__proto__' 접근자 프로퍼티를 통해서 자신의 프로토타입, 즉 [[Prototype]] 내부 슬롯에 간접적으로 접근할 수 있다. 일반 적인 객체의 프로토타입은 다음과 같다. person 객체의 [[Prototype]] 내부.. 2021. 10. 29.
JavaScript global variable을 최소로 사용해야 하는 이유 전역변수 사용의 문제점 자바스크립트에서 전역변수는 전역객체의 생명주기와 일치한다. 즉 프로그램이 실행될 때 생성되고, 종료될 때 메모리를 반환한다. 이러한 특성 때문에, 전역변수를 사용하는 것은 다양한 문제점을 내재하고 있다. 1. 암묵적 결합 모든 스코프에서 전역변수에 접근이 가능하다. 즉 모든 지역에서 변수가 변경될 위험이 도사리고 있는 것이다. 주의깊지 못한 코드를 작성해서 전역변수의 값이 변경된다면 프로그램 자체가 destroy될 가능성을 가진다. 2. 전역변수는 생명주기가 길다. 함수 내 지역변수와는 다르게 전역변수의 생명주기는 전역객체와 동일하다. 즉 메모리가 한번 할당되면, 반환이 안된다는 것이다. 이는 리소스 낭비를 불러일으키는 주범이 된다. 전역변수 선언을 남발하다보면, 메모리 공간을 불.. 2021. 10. 27.
JavaScript 기초 문법 #6 프로퍼티, 함수 일급객체, 프로토타입, 빌트인 객체, this, 실행 컨텍스트, 렉시컬 스코프, 클로저 # 프로퍼티 attribute 자바스크립트 엔진은 프로퍼티를 생성할 때 프로퍼티의 상태를 나타내는 프로퍼티 attribute를 기본값으로 자동 정의한다. # 함수 일급객체 다음 조건을 만족하는 객체를 일급객체라 한다. 무명의 리터럴로 생성할 수 있다. 런타임에 생성이 가능하다. 변수나 자료구조(객체, 배열)에 저장할 수 있다. 함수의 매개변수에 전달할 수 있다. 함수의 반환값으로 사용할 수 있다. # 객체란? 객체는 상태 데이터와 동작을 하나의 논리적인 단위로 묶어 놓은 복합적인 자료주고라고 할 수 있다. 객체의 상태 데이터를 프로퍼티, 동작을 메서드라 부른다. 생성자 함수의 프로토타입은 상속을 위해 사용된다. 모든 객체는 __proto__ 접근자 프로퍼티를 통해 자신의 프로토타입, 즉 [[Prototy.. 2021. 10. 25.
postgreSQL in Django #1. Django 에서 새로운 Constraint 추가하는 방법 models.py에서 DB 스키마를 정의한다. Meta 클래스 내에서 constraints를 추가해준다. #2. Conflict 발생시 대처방법 Django에서 새로운 DB를 만들 때 제약조건에 의한 CONFLICT가 발생하는 경우가 있다. 이럴 경우를 미리 대비해서 DB를 생성해야 한다. 그렇지 않은 경우 IntegrityError가 발생한다. 방법1) 가볍게 try ~ except 문을 사용하는 것이다. try: Person.objects.create(------) except Exception as e: continue 방법2) DB를 생성하는 코드에서 on_conflict 속성을 추가하여 CONFLICT가 발생했을 때에 행동을 추가.. 2021. 10. 25.
postgreSQL 이름의 릴레이션이 없습니다. relations does not exist ERR 해결방법 Django에서 Database 설정을 완료하고, 정상적으로 migration을 완료했음에도 불구하고, DB를 확인해보면 릴레이션이 없다는 에러가 발생하는 경우가 존재한다. 1. 해당 데이터베이스에 정상적으로 접근했고, 2. 스키마 search_path 도 정상적으로 설정되어 있고, 그런데도 에러가 난다면 테이블 명에 오류가 있을 가능성이 높다. 만약 데이터베이스 내 테이블 명이 소문자, 대문자가 혼합되어 작성되었다면 SQL문으로 검색을 할 때 대소문자 구분을 해달라고 요청을 해야 한다. ex) 테이블 이름 : testTable 쿼리문 : SELECT * FROM "testTable"; 정상적으로 작동한다. 2021. 10. 24.
반응형