SQLD 엔터티의 개념

엔터티란?

  • 사람, 장소, 물건, 사건, 개념 등의 명사에 해당
  • 업무상 관리가 필요한 관심사
  • 저장이 되기 위한 어떤 것

즉 엔터티란 업무에 필요하며 유용한 정보를 저장하고 관찰하기 위한 집합으로 지속적인 관심을 가지고 있어야 하는 대상이다. 또한 그 대상간의 동질성을 지닌 인스턴스나 그들이 행하는 행위의 집합이다.

엔터티의 특징

  1. 반드시 업무에 필요한 정보여야 한다.
  2. 유일한 식별자에 의해 식별이 되어야 한다.
  3. 영속성으로 존재하는 인스턴스의 집합이다.
  4. 업무 프로세서에 의해 이용되어야 한다.
  5. 반드시 속성이 존재해야 한다.
  6. 다른 엔터티와 최소 한개 이상의 관계를 가지고 있어야 한다.

엔터티의 분류?

엔터티는 자신의 성격, 실체 유형에 따라 구분하거나 업무를 구성하는 모습에 따라 구분이 되고 발생시점에 따라 구분이 가능하다.

  1. 유무형에 따른 분류
    유/무형에 따라 유형, 개념, 사건 엔터티로 구분이 가능하다.
  • 유형 엔터티 : 물리적인 형태가 있고 지속적으로 활용이 가능한 정보 EX) 사원, 물품
  • 개념 엔터티 : 물리적인 형태가 없고 관리해야 할 개념적 정보로 구분이 되는 엔터티 EX) 조직, 보험상품
  • 사건 엔터티 : 업무 수행에 있어 발생되는 엔터티 EX) 주문, 청구, 미납
  1. 발생 시점에 따른 분류
    엔터티의 발생 시점에 따라서 기본/키엔터티, 중심 엔터티, 행위 엔터티로 구분이 된다.
  • 기본 엔터티 : 업무에 원래 존대하는 정보, 다른 엔터티에 의해 생성이 되지 않고 독립적으로 생성이 가능하며 다른 엔터티의 부모 역할 수행이 가능
  • 중심 엔터티 : 기본 엔터티로부터 발생, 업무의 중심적 역할을 수행한다.
  • 행위 엔터티 : 두개 이상의 부모 엔터티로부터 생성 주로 상세 설계 단계에서 도출된다.

엔터티의 네이밍

  • 현업에서 사용하는 이름을 사용한다.
  • 약어 사용은 자제한다.
  • 단수명사를 사용한다.
  • 유일한 이름을 부여한다.
  • 생성 의미에 맞는 이름을 부여한다.

javascript-let, const, 블록레벨 스코프

let, const 키워드와 블록레벨 스코프

ES5 까지 변수의 선언을 유일하게 할 수 있던 방법인 var키워드는 여러가지의 문제점들이 있다.

  1. 변수의 중복선언
    var 키워드로 선언한 변수는 중복 선언이 가능하다.

  2. 함수레벨 스코프
    var키워드로 선언한 변수는 오직 함수의 코드블록만이 지역 스코프로 인정된다. 따라서 외부 함수에서 var키워드로 선언한 전역 변수는 코드블록 내에서 선언해도 전역변수가 된다.

  3. 변수 호이스팅
    var 키워드로 선언한 변수는 호이스팅에 의해 가장 위로 끌어 올려지고 할당이전에도 참조가 가능하다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // 변수 호이스팅에 의해 이미 foo라는 변수는 선언이 되었다.
    // 아직 변수에 값이 할당된 상태가 아니기 때문에 undefined가 반환된다.
    console.log(foo); // undefined

    // 변수 호이스팅에 의해 foo변수가 선언되었고 값을 선언하면 foo의 값은 123이 된다.
    foo = 123;

    // 값이 할당된 변수이기 때문에 변수의 값이 반환된다.
    console.log(foo); // 123

    // 런타임 이전에 foo 라는 변수가 선언이되고 undefined로 초기화 된다.
    var foo;

    선언문 이전에 참조하는 것이 변수 호이스팅에 의해 에러가 발생하지는 않지만 코드의 가독성을 해치며 오류를 발생시킬 여지가 생긴다.

자세히 보기

javascript-전역변수의 문제점

전역변수의 문제점

변수의 생명주기

  • 변수는 선언에 의해 생성되고 할당을 통해 값을 가진다.
  • 변수는 언젠가 소멸한다.
  • 전역변수의 생명주기는 애플리케이션의 생명주기와 같다.
  • 함수 내에서 생성된 지역변수는 함수 호출시 선언문이 실행되고 함수 종료시 소멸된다.
  • 즉 지역변수의 생명 주기는 함수의 생명 주기와 같다.

전역 변수의 문제점

  1. 암묵적 결합
    전역변수의 의도는 코드 어디서든 참조할 수 있는 변수를 만든다는 의미이다. 이는 모든 코드가 이를 참조하고 값을 변경할 수 있는 암묵적 결합을 의미한다.
    변수의 유효범위가 클수록 코드의 가독성이 나빠지고 의도치 않은 값 변경이 일어날 수 있다.

  2. 긴 생명 주기
    전역 변수는 생명주기가 길다. 즉 메모리 소비 시간이 길다.
    var 키워드로 생성된 변수는 중복을 혀용하므로 전역변수는 변수 이름이 중복될 가능성이 크다. 의도치 않게 변수가 중복되면 값이 변경된다.

  3. 스코프 체인 상에서 종점에 존재
    전역 변수는 스코프 상에서 종점에 존재한다. 이는 변수의 검색시 가장 마지막 단계에서 검색이 된다는 것이다. 따라서 검색 속도가 가장 느리다.

  4. 네임스페이스 오염
    파일을 분리해도 하나의 전역 스코프를 공유 한다는 것에서 다른 파일 내에 동일한 변수가 스코프내에 존재할 수 있다는 문제점이 있다.

자세히 보기

javascript-스코프

스코프

스코프 (유효범위)는 javascript를 포함한 모든 프로그래밍 언어의 기본적이고 중요한 개념이다.

1
2
3
4
5
6
7
8
9
function add (x, y) {
// 매개변수는 함수 몸체 내에서만 참조가 가능하다.
// 따라서 매개변수의 스코프는 함수 내부다.
console.log(x, y);
return x + y;
}
add (1, 2);

console.log(x, y); // Error 스코프 유효범위를 벗어남

변수는 코드의 가장 바깥쪽에 함수 내부에 또는 코드블록에서 선언될 수 있다. 이렇게 선언된 변수는 변수가 선언된 위치에 따라서 스코프가 결정된다. 모든 식별자가 자신의 선언된 위치에서 스코프를 결정한다.

1
2
3
4
5
6
7
8
9
var x = 'global';

function foo () {
var x = 'local';
console.log(x); // local
}
foo();

console.log(x); // global

위의 예제를 보면 동일한 이름을 가진 변수 x를 선언했고 함수내부, 외부에서 각각 참조를 한다. 이때 자바스크립트 엔진은 같은 두이름 중 어떤 것을 참조할지 결정한다. 이를 식별자 결정이라고 한다. 이때 엔진은 스코프를 규칙으로 삼아 참조할 변수를 결정한다. 즉 스코프는 식별자를 검색할 때 사용하는 규칙이라고도 할 수 있다.

코드의 문맥과 환경
코드가 어디서 실행되는지 주변에 어떤 코드가 있는지를 렉시컬 환경이라고 부른다.

자세히 보기

javascript-렉시컬환경

javascript 책 공부중 렉시컬 환경? 이라는 단어를 보고 이게 어떤것을 의미하는지 궁금하여 알아보았다. 역시 처음들어보는 생소한 의미였고 새로운것을 배웠다.
렉시컬 환경에 대해 알아보자.

👍렉시컬 환경

javascript에서 실행중인 함수, 코드 블록 { }, 스크립트는 렉시컬 환경이라 불리는 내부 숨김 연관 객체를 갖는다.

렉시컬 환경은 두가지로 나뉜다.

  1. 환경 레코드: 모든 지역변수를 프로퍼티로 저장하고 있는 객체.
  2. 외부 렉시컬 환경에 대한 참조: 외부 코드와 연관

환경 레코드

  • 모든 지역변수를 프로퍼티로 저장하는 객체
  • this 값과 같은 기타 정보도 저장된다.
  • 변수는 특수 내부 객체인 환경 레코드의 프로퍼티의 의미일 뿐이다.
  • 변수를 가져오거나 변경하는 것은 환경 레코드의 프로퍼티를 가져오거나 변경하는 것이다.

외부 렉시컬 환경

  • 외부 코드와 연결된다.

전역 렉시컬 환경

1
let a = 'hello';

위와 같이 선언된 변수는 코드 전체와 관련된 변수로 전역 렉시컬 환경이라고 부른다. 스크립트 전체와 관련된 전역 렉시컬 환경은 외부 참조를 가지지 않는다.

자세히 보기

javascript-함수

함수

함수란?

함수는 자바스크립트에서 중요한 핵심중 하나이다. 프로그래밍 언어의 함수는 일련의 과정을 문으로 구현하고 코드블록으로 감싸서 하나의 실행 단위로 정의 한것이다.
함수는 입력을 받아 출력을 내보낸다. 이때 함수 내부로 입력을 전달받는 변수를 매개변수 입력을 인수 출력을 반환값이라 한다. 또한 함수는 값이고 여러개 존재할 수 있기 때문에 특정 함수를 구별하기 위해 식별자인 함수 이름을 사용할 수 있다.

1
2
3
4
5
// 함수 정의
function 함수이름(매개변수1, 매개변수2) {
return 매개변수1 + 매개변수2 // 반환값
}
함수이름(값1, 값2); // 함수 호출

함수는 함수 정의로 생성하며 다양한 방법으로 정의할 수 있다.

1
2
3
4
// 함수 정의
function add (x, y) {
return x + y;
}

함수를 정의하고 나서 실행을 하기 위해서는 인수를 매개변수를 통해 함수에 전달하며 함수의 실행을 지시해야한다. 이 과정을 함수 호출이라고 한다.

1
2
3
4
5
// 함수 호출
var result = add(2, 5);

// 인수를 전달하면 반환값이 반환된다.
console.log(result); // 7

함수는 왜 사용할까?

함수는 필요할 때마다 호출하여 실행이 가능하다. 실행 시점은 개발자가 결정하기도 하고 재사용이 가능하다. 동일한 작업을 반복적으로 실행해야 한다면 같은 코드를 중복하여 작성하는 것이 아닌 함수를 재사용하는 것이 효율적이다. 함수는 코드의 재사용 측면에서 매우 유용한 기능이다.

함수는 재사용성을 높여주고 유지보수 측면에서 편의성을 높이고 실수를 줄여 코드의 신뢰성을 높이는 효과가 있다. 이러한 함수를 정의할때 함수이름 즉 식별자를 붙일 수 있다. 함수이름은 함수의 역할을 이해하기 쉽게 네이밍해주는 것이 좋다.

자세히 보기

javascript 원시값과 객체의 비교

원시값과 객체의 비교

원시 타입과 객체 타입의 차이점

  1. 원시 타입의 값은 변경 불가능한 값이다. 객체 타입의 값은 변경가능한 값이다.
  2. 원시 값을 변수에 할당하면 변수에는 실제 값이 저장된다. 객체를 변수에 할당하면 변수에는 참조 값이 저장된다.
  3. 원시 값을 갖는 변수를 다른 변수에 할당하면 원본의 원시 값이 복사되어 전달된다. 이를 값에 의한 전달이라 한다. 객체를 가리키는 변수를 다른 변수에 할당하면 원본의 참조 값이 복사되어 전달된다. 이를 참조에 의한 전달이라 한다.

원시 값

변경 불가능한 값

원시타입 : 변경 불가능한 값
변경이 불가능한 값이라는 것은 변수란 값을 저장하기 위한 메모리의 공간 자체 또는 공간을 식별하기 위한 이름이고 값은 저장된 데이터이다. 즉 변경 불가능하다는 것은 변수가 아닌 값에대한 이야기이다.

변경이 불가능한것은 상수와 같은 맥락이긴 하지만 원시값은 재할당시 값이 바뀌지 않고 새로운 공간에 값을 저장하지만 상수는 재할당이 안되므로 둘의 개념이 완벽히 일치하는 것은 아니다.

1
2
3
4
5
const a = {};

a.first = 1;
// const 키워드를 사용하여 선언한 변수에 할당한 값은 변경이 불가능하다.
// 하지만 const 키워드를 사용한 변수에 할당한 객체는 변경이 가능하다.

변수에 할당한 값은 원시 값으로 한번 할당하면 그 값의 변경이 불가능하다. 변수에 값을 재할당시 기존에 값이 저장되어있던 메모리 주소에 새로운 값을 갱신하는 것이 아닌 새로운 메모리 공간에 저장하고 그 메모리 주소를 가리키게 되는데 값의 이러한 특성을 불변성이라고 한다.

자세히 보기

javascript 객체 리터럴

객체 리터럴

자바스크립트는 객체기반 프로그래밍 언어이며 자바스크립트를 구성하는 거의 대부분이 원시값을 제외한 객체이다.

원시타입은 단 하나의 값을 나타내지만 객체 타입은 다양한 타입의 값을 하나의 단위로 가지고있는 복합적 자료구조이다.

원시 타입의 값은 변경이 불가능 하지만 객체 타입의 값 즉 객체는 변경이 가능한 값이다.

객체 : 0개이상의 프로퍼티로 구성된 집합이며 키와 값으로 구성된다.

1
2
3
4
5
var person = {
// key: value
age: 25,
name: 'han',
};
자세히 보기