객체(Object)

객체지향 프로그래밍에서 객체는, 프로그램 설계 단계에서 최초로 생각해야 할 것으로서, 결국 프로세스에서 유도된 코드 단위들이다. 중간에, 각 객체는 일반화된 객체 클래스로 만들어지고 더욱 일반화된 클래스가 정의됨으로써, 객체가 모델을 공유하고 그 코드에서 클래스 정의를 재사용할 수 있게 한다.

각각의 객체는 특정 클래스 또는 그 클래스의 자체 메쏘드나 프로시저 그리고 데이터 변수를 가지고 있는 서브클래스가 실제로 구현된 것, 즉 인스턴스이다. 그러므로 객체는 실제로 컴퓨터 내에서 수행되는 것을 말한다.


개체(Entity)

일반적으로, entity란 존재하는 것, 즉 실체를 의미한다. 이 용어의 어원은 라틴어의 ens에서 나왔으며, 사물의 존재와 그것의 품질 사이에 구별을 짓는다. entity가 되기 위해 필요한 일은, 그저 존재하는 것이 전부이다. 어떤 것이 존재한다는 사실은, 그것이 다른 존재나 entity로부터 분리되어있음을 암시하는 듯하다. 프로그래밍이나 공학에서, 그리고 아마도 많은 다른 상황들에서, 이 용어는 명확한 사물이든, 이름이 붙여져 있지 않은 추상화된 아이디어든 관계없이 단일체를 인식하는데 사용된다. 칠판에 글씨나 그림을 쓰며 토의를 할 때, 흔히 아직 이름이 붙어있지 않고 단지 "entity"라고만 표현되어 있는 무엇인가를 그릴 수 있다 (만약, 그 entity가 토의가 진행되어 나중에 귀속 품질과 이름을 갖게 되었다면, 더 이상 그것을 "entity"라고 부를 필요는 없을 것이다). 일부 용법에서, entity는 객체지향 프로그래밍에서 사용되는 객체와 비슷한 의미를 갖는다. 아래에 일부 용례를 나열하였다.

  1. SGML에서, entity는 특정 문자나 표시법을 선택하거나 표현하기 위해 형식 지정 프로그램에 의한 효과를 가지고 있는 특정 문자열을 가리킨다. 예를 들어 아래의 특정한 entity는 

    " 

    다음과 같은 표현을 만들어 낸다.



    이 용법에서, entity는 선택되거나, 표시되거나, 인쇄되어야할 고유한 글꼴을 지정하는 어떤 문자열이다. 이러한 문자열을 위해 하나의 낱말이 필요했으며, entity는 여러모로 편리하다. HTML에서, 어떤 특별한 entity나 문자열들에는 이름이 주어질 수 있는데, 이 경우 각 entity들은 "명명된 entity"라고 불린다.
  2. 관계형 데이터베이스에서, entity는 저장될 수 있는 어떤 데이터에 관한 사람, 장소, 또는 사물이다.
  3. 데이터 모델링에서, entity는 분류될 수 있고, 다른 entity들에 대해 정해진 관계를 가지는 데이터 단위이다.
  4. OSI 네트웍 통신 모델에서, entity는 정의된 프로토콜을 사용하여 다른 entity들과 교신하는 활성화된 구성요소이다.
  5. IBM의 RACF 보안 제품에서, entity는 RACF에게 한정지어지는 사용자, 그룹, 또는 자원을 말한다.
  6. FORTRAN에서는, 프로시저, 연산자, 인터페이스 블록, 입출력 단위, 부호화 상수, 문장 번호 등과 같은 거의 모든 프로그램 구성요소를 entity라고 지칭한다.


인간이 생각하는 개념 또는 정보의 세계에서는 의미있는 정보의 단위로서, 파일 처리시스템에서는 한건의 자료를 구성하는 레코드가 하나의 엔티티에 해당한다.

사전적 의미로는 ‘실체’, ‘존재’, ‘자주적인 것’, ‘본질’이다. 데이터베이스에서는 엔티티를 ‘실체’ 또는 ‘개체’라고 표현한다. 엔티티로 구성된 엔티티 집합이란 정보의 세계에서는 의미 있는 정보의 단위 또는 우리가 관리하고자 하는 두 개 이상의 속성과 두 개 이상의 개체를 지닌 동질성의 의미를 가진 독립적인 집합이다. 여기서 ‘관리하고자 하는’이란 말은 엔티티 집합을 파악하는데 주어가 된다. ‘두 개 이상의 속성’이란 뜻은 한 개의 속성만으로는 개체가 가지는 의미가 명확하지 않다(개체가 될 수 없다)는 것이 되고, ‘두 개 이상의 개체를 지닌’이란 뜻은 한 개의 개체만 있다면 관리의 대상이 될 수 없음을 의미한다. ‘독립적인 집합’이란 뜻은 다른 집합과 구별할 수 있는 어떤 특징이 있다는 것이다. 예를 들어, 갑, 을, 병, 정 4명의 학생은 각각의 엔티티이고 이들이 ○○고등학교 2학년 1반에 재학중이라고 한다면 이들은 한 조직(학교) 내에서 존재하는 “다른 사물과 구별 지을 수 있는 어떤 특정한 관련성으로 묶일 수 있는 하나의 집합”으로 표현된 것이다.

파일 처리시스템에서는 한건의 자료를 구성하는 레코드가 하나의 엔티티에 해당한다. 각 엔티티간의 관련을 릴레이션쉽(relationship)이라고 하며, 복수 개의 엔티티간의 관련을 도식화 한 것을 엔티티 관계도(ERD:Entity Relationship Diagram)라고 한다. 엔티티 관계도는 파일시스템을 설계하거나 데이타베이스의 구조를 결정하는 데 중요한 자료로 활용된다. 정보통신 분야에서는 계층구조의 프로토콜에서 사용되는 서비스를 취급하는 단위를 지칭한다. 즉, OSI의 계층 구조에서 서비스를 받거나 서비스를 제공하는 하나의 단위를 일컫는다. 


비교
전산에서 개체는 entity, 객체는 object로 번역합니다. 간단하게 비교하자면 entity는 정보를 표현하느 단위로 object는 사물(전산에서는 소프트웨어 또는 시스템이 되겠네요)을 표현하는 단위입니다. 

재미있는 것은, 현제 객체라는 개념이 객체지향 프로그래밍에서 나타난 개념으로 생각하는 사람들이 많은데, 객체라는 개념은 데이터, 오퍼레이션(함수 등)등을 통틀어 소프트웨어를 구성하는 한 요소를 의미하고 있습니다. 



다음은 위키피디아 백과사전의 검색 내용입니다. 



철학 또는 전산학에서의 개체(영어:entity)는 인간의 개념 또는 정보의 세계에서 의미있는 하나의 정보 단위이다. 사물의 본질적인 성질을 속성이라고 하며, 관련있는 속성들이 모여서 의미있는 하나의 정보 단위를 이룬 것이 바로 개체에 해당한다. 파일시스템이나 데이터베이스에서의 레코드가 개체에 해당한다. 개체들 사이의 연관성을 관계라고 하며, 개체와 관계를 나타낸 모델을 개체-관계 모델라고 한다. 속성이라는 용어 대신 영어의 attribute를 그대로 한글로 옮겨 애트리뷰트라고 하기도 한며, 개체라는 용어 대신 영어의 entity를 그대로 한글로 옮겨 엔티티라고 하기도 한다. 
Posted by linuxism
,

1. 생성...

  • 구조
      DELIMITER $$
      CREATE PROCEDURE 프로시저명(IN|OUT 변수 변수타입.....)
      BEGIN
         질의어~~~~
      END$$
    

  • 예제
      DELIMITER $$
      CREATE PROCEDURE P_TEST(IN in_p INT, OUT out_p VARCHAR(50))
      BEGIN
        SELECT grp_nm
          INTO out_p    
          FROM u_grp_info
         WHERE grp_cd = in_p;
            
      END$$
    

2. 삭제

  • 구조
      DROP PROCEDURE 프로시저명 
    
  • 예제
      DROP PROCEDURE P_TEST
    

3. 호출

  • 구조
      CALL 프로시저명(파라미터);
    

  • 예제
      CALL 프로시저명(1, @outParam);
      SELECT @outParam;
    



Stored Procedure 필수 요소들

이런 내장 프로시저를 만드는데는 몇가지 알아야 할 사항이 있는데,


첫번째가 "delimiter"라는 존재입니다. 이 delimiter는 구분자, 즉, 명령러 단락 구역을 만들 수 있게 도와주는 넘입니다.

SQL 구문은 ';' 문자로 끝나게 됩니다. 근데 프로시저 안에서 한줄 끝날때 마다 ;를 다 넣어주면, 어디가 쿼리문이고 어디가 프로시저 문인지를 헛갈리게 됩니다. 따라서 "여기서 여기 까지가 프로시저야" 라는 걸 알려주기 위해서 delimiter를 씁니다.

DELIMITER $$

이렇게 하여서 ';'을 "$$"로 바꾸어 주게 되는데요. 이렇게 하면, 프로시저를 꾸며줄 때 한줄이 끝났을 때 ';'를 써줘도 함수가 끝나지 않았다는 것을 인식 시켜줄 수 있습니다.

그리고 프로시저를 다 꾸미고 나면, 다시 "$$" 를 ';'로 바꾸어줍니다.


두번째로는 파라미터, "인자 값들의 종류" 입니다. 총 3가지(IN, OUT, INOUT)게 있게 되는데요.

1. IN IN 파라미터는 "읽기 전용" 이라는 것입니다. 프로서저를 호출할 때 건네주게 되면, 이를 프로시저 안에서 값을 가져다 쓸뿐 바꿀 수 없다는 것이죠.

2. OUT OUT 파라미터는 "값을 변경 할 수 있는" 속성을 가진 파라미터 입니다. 흔히들 이 파라미터는 프로시저 내부에서 일을 처리한 뒤, 값을 돌려줄때 많이 씁니다.

3. INOUT INOUT 파라미터는 IN의 속성과 OUT의 속성을 다 가지고 있습니다. 프로시저 호출자로 부터 값을 전달 받아 이를 고쳐서 다시 돌려줄때 사용하게 되는 것이죠.


세번째로는 프로시저의 시작과 끝입니다. 프로시저는 BEGIN 으로 시작해서 END로 끝나게 됩니다.

따라서, CREATE PROCEDURE testproc() BEGIN

....

END

이런 형태로 만드셔야 합니다.



MySQL Procedure 만들면서 주의해야 할 사항!

주로 MS-SQL에서 작업을 하다, mysql에서 처음으로 stored procedure(이하 sp)를 만들면서, 5분이면 될 것을 수십분은 걸린 것 같다 --;; 에러가 정확한 위치를 알려주질 않는다. 아래의 정리한 내용은 MS-SQL에 익숙하고 mysql을 사용해 보지 않은 분이 보면 무자게 도움이 될 것 같다.

- IF문을 쓸 때 END IF문이 있어야 하며, END IF문 뒤에는 ;를 붙여야 한다.

   ex> IF (test IS NULL) THEN
            SELSET 'ok';
         END IF;

- auto increment값을 얻어올 때는 LAST_INSERT_ID()을 이용한다.

ex> SET serverId = LAST_INSERT_ID();

- CREATE PROCEDURE문 전에 delimeter문을 이용해 delimeter를 ';'가 아닌 다른 걸로 변경하고 뒤에 다시변경할 것

 ex> delimiter //                  # delimeter를 //로 변경
         CREATE PROCEDURE xxx
                  .....
                  .....
         END;
        //                                # 실제 한 command가 종료됨을 의미
delimeter ;                     # 다시 ;로 변경

'DB > MySQL' 카테고리의 다른 글

mysqld_safe  (0) 2012.01.18
MySQL DB 백업/복구  (0) 2011.10.19
MySQL에서 Create Procedure  (0) 2010.12.21
리눅스에서 my.cnf 설정  (0) 2010.12.21
MySQL Data Type 과 테이블 설계 방법  (0) 2010.12.20
Posted by linuxism
,

MySQL에서 Procedure를 만들어보자.

 

DELIMITER $$

CREATE PROCEDURE `owner`.`procedure_name` (IN|OUT|INOUT param_name TYPE )
BEGIN
         처리문

END$$

DELIMITER ;

 

owner 은 'user name'

procedure_name 은 말 그대로 '프로시져 이름'

IN|OUT|INOUT 은 파라미터를 어떤 용도로 사용할 것인지 정의한다.

              - IN 은 프로시져로 입력

              - OUT 은 출력

              - INOUT 은 입력하고 출력

param_name 은 파라미터 이름

TYPE 는 변수타입

 

ex)

아이디를 입력해서 회원의 이름을 가져오는 프로시져를 만들어 보자.

 

DELIMITER $$

CREATE PROCEDURE `tester`.`GET_USER_NAME` (IN userid VARCHAR(2), OUT userName VARCHAR(16) )
BEGIN
         SELECT user_name INTO userName FROM member WHERE user_id = userid;

END$$

DELIMITER ;

 

이제 사용해 보자

>CALL GET_USER_NAME('budget74', @userName);
>SELECT @userName;
결과 '얼룩푸우'

 

Procedure 내에서는 참조자(@)는 쓰지 않는다. 그러나 OUT 변수로 사용할때는 사용해준다.

또한 처리문에 ';' 는 반드시 찍어야 한다. 안 그럼 에러난다.


참조 - http://jsp.pe.kr/?mid=mysql&page=2&document_srl=190

'DB > MySQL' 카테고리의 다른 글

MySQL DB 백업/복구  (0) 2011.10.19
MySQL에서 Create Procedure 설명  (0) 2010.12.21
리눅스에서 my.cnf 설정  (0) 2010.12.21
MySQL Data Type 과 테이블 설계 방법  (0) 2010.12.20
MySQL 외부 접속 사용자 추가  (0) 2010.12.19
Posted by linuxism
,