Search

반응형

'Software'에 해당되는 글 190건

  1. 2020.07.18 [데이터베이스]엔터티(Entity), 속성(Attribute), 도메인(Domain) 무슨 의미일까? 1
  2. 2020.05.15 [자바/java]Iterator 와 Enumeration 쉽게 이해하기 편.
반응형

안녕하세요 신기한 연구소입니다.

여름인데 생각보다 많이 덥지는 않네요.

저녁엔 쌀쌀해서 7월인데

이불을 찾게 되네요. ㅎㅎ

예전부터 프로젝트를 하다 보면

사실 개발자인데 DB작업도

같이 해야 하는 경우가 허다합니다.

대형 프로젝트의 경우는

DBA와 설계자가 분석, 설계하고

데이터베이스를 구성해주고

개발자는 ERD나 테이블 정의서 등을

보면서 쿼리(SQL)를 작성하는데요.

 

그리 크지 않거나 기존 사이트에

추가 작업용 미니 프로젝트를 하게 되면

개발자가 직접 테이블도 설계하고

ERD도 그리거나 추가하는 등

어찌 보면 개발자가 할 일이 아닌 것도

접하게 됩니다.

그렇다고 못한다고 빼 째라 할 수도 없고~

 

개발 하다가 데이터베이스 관련 작업을

하는 경우가 다반사기에..

기본 용어를 정리해봤어요.

물론 대부분 아시는 분들도 많지만..

저도 나름 복습하는 의미로~

엔터티(Entity), 속성(Attribute), 도메인(Domain)

 

 

먼저,

엔터티(Entity)입니다.

엔티티로 말하는 경우도 있는데

엔터티로 사용하면 됩니다.

 

그럼 엔터티(Entity)는 무엇일까요?

쉽게 개발할 때 쿼리(SQL) 작성 시

from 절에 쓰는 테이블로 이해하면 편합니다.

우리가 개발하는 데이터베이스 프로그램은

대부분 업무를 기반으로 합니다.

업무를 하기 위해서는 정보가 필요한데요.

은행을 생각해보면

고객, 계좌, 지점, 직원 등을

먼저 생각할 수 있지요.

고객, 계좌, 지점, 직원은

은행에서 업무적으로 필요한 객체들입니다.

전부 명사로 되어 있는데

각 명사들은 식별하거나 특징을

나타낼 수 있는 속성을 가지고 있어요.

고객이라면, 고객번호, 이름, 연락처 등

이렇게 업무적으로 필요하고

속성들을 저장할 수 있는 것들을

엔터티(Entity)라 합니다.

 

이렇게 이야기하다 보니

속성(Attribute)도 설명이 되었네요.

테이블을 구성하는 컬럼들을

속성이라 생각하면 됩니다.

그 속성들은 값을 가질 수 있어요.

그 값이 바로 업무에 필요한 정보들이고요.

예를 들면 고객이라는 엔터티(Entity)의 속성은

이름, 연락처, 주소, 가입일 등이 있습니다.

 

우리가 코드성 데이터를 구성하고

사용하다 보면 도메인(Domain)이라는

용어를 접하게 되는데요.

도메인은 위에서 설명한

속성들에 가질 수 있는 값의 범위를

나타냅니다.

 

예를 들어보면,

성별에 대해 코드 속성이 있다고 하면

성별은 남/여 둘 중 하나가 됩니다.

그래서 코드로 0 = , 1 =

이렇게 정의했다고 하면

0, 1 외의 값 외에는 사용할 수 없게

정의하는 게 도메인입니다.

또한 0, 1은 숫자이며 길이는 1 자리면 되기에

타입과 사이즈를 정해주는 것도

도메인이라 합니다.

 

테이블의 컬럼 값을 구성할 때

값의 범위, 데이터타입, 제약사항 등을

설정하는데 그 범위 값의 설정을

도메인이라 생각하면 됩니다.

 

이번 포스팅에서는 엔터티, 속성, 도메인에

대해 간단히 살펴봤습니다.

 

날씨도 덥고

코로나로 개발하기 힘든 환경인데

다들 힘내시고

조금이라도 도움이 되길 바랍니다.

 

잘못된 내용이나 수정이 필요하면 댓글 주세요~

반응형
반응형

Iterator와 Enumeration

컬렉션(collection) 인터페이스를 사용하는 클래스의 데이터를 순환해서 사용하는 경우 클래스에서 제공하는 size()를 사용해서 for문으로 데이터를 가져오는 방법도 있지만 순환 인터페이스인 iteratorEnumeration을 사용하는 방법도 있습니다.

두 개의 인터페이스는 거의 비슷하지만 스레드(thread)의 지원 여부가 다릅니다.

Iterator는 스레드에 안전하지 않는 구조입니다.

스레드에 안전한 구조로 사용하고 싶다면 Enumeration을 사용하면 됩니다.

ArrayList, HashSet 등은 Iterator을 사용하면 되고,

Vector, Hashtable 등은 Enumeration을 사용하면 됩니다.

 

사실 이 두 개의 인터페이스는 ArratList, Vector 등 클래스에서 제공하는 size를 통해 데이터를 받는 것 보도 더 느립니다. 이유는 List 데이터를 받아 새로운 구조로 다시 만들기 때문인데..

그렇다면 왜 더 느린 이 친구들을 사용하는 것일까?

유지보수 등의 유연성을 더 좋게 하기 위해서입니다.

예를 들어 기존에 사용하던 컬렉션의 클래스를 다른 컬렉션의 클래스로 변경하는 경우 지원하는 메서드가 다르면 수정하는 부분이 많아질 수 있습니다.

하지만 Iterator 인터페이스를 사용한다면 이 부분의 구현부는 굳이 수정할 이유가 없게 됩니다.

Iterator는 다음 내용이 있는지 확인하는 hasNext() 메서드와 그 값을 가져오는 next() 메서드가 있습니다. 또한 해당 컬렉션의 값을 삭제할 수 있는 remove() 메서드도 제공하게 됩니다.

 

Enumeration은 다음 내용이 있는지 확인하는 hasMoreElements() 메서드와 그 값을 가져오는 nextElement() 메서드가 있고 컬렉션의 데이터를 삭제하는 기능은 없습니다.

예제를 통해서 사용법을 익혀봅니다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
ArrayList<String> nameList = new ArrayList<String>();
String name;
nameList.add("A");
nameList.add("B");
nameList.add("C");
nameList.add("D");
nameList.add("E");
nameList.add("F");
        
Iterator<String> it = nameList.iterator();
 
while(it.hasNext()) {
    name = it.next();
    if ("F".equals(name)) {
            it.remove();
    }
}
 
        
for(String l : nameList) {
    System.out.println(l);
}
cs

 ArrayList 클래스를 사용한 예제입니다.

해당 클래스는 스레드를 사용하지 않는 클래스입니다.

ArrayList 객체의 iterator() 메서드를 사용해서 Iterator 인터페이스의 it 객체를 생성합니다.

사용법을 잘 확인해 보세요.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
Vector<String> vt = new Vector<String>();
 
vt.addElement("A");
vt.addElement("B");
vt.addElement("C");
vt.addElement("D");
vt.addElement("E");
 
Enumeration<String> e = vt.elements();
 
while(e.hasMoreElements()) {
    System.out.println(e.nextElement());            
}
cs

이 예제는 Vector 클래스를 사용해서 Enumeration 인터페이스의 e 객체를 Vector의 elements() 메서드를 통해 생성했습니다.

스레드 지원이 가능하며 컬렉션에 대한 클래스의 데이터 삭제 기능은 없습니다.

사용법을 잘 확인해 보세요.

지금까지 컬렉션의 순환기능을 제공하는 두 개의 인터페이스에 대해 알아봤습니다.

즐코딩하세요..

반응형