라벨이 Structure인 게시물 표시

nest js -1 Structure

이미지
안녕하세요. 저번에 작성한 글( nest js - install & Create Project from Linux or Ubuntu )에 이어서 nest js에 대한 구조를 알아보도록 하겠습니다. nest js의 프로젝트를 생성하면 여러개의 폴더와 파일들이 생성되는 것을 알수 있습니다. 그중에서 src폴더가 실제적으로 API동작을 하게 됩니다.   그럼 표를 보면서 어떤식으로 동작하는지 설명 드리겠습니다. 1) 프로젝트 생성시 나오는 폴더(members제외) 2) app 및 main관계도 생성된 파일을 보면 4개가 생성됬음을 알수 있다.  app.service.ts : app.controller에서 해당 method를 사용한다. app.controller : 웹상에서 요청(request)이 오면 그것을 처리하고 return한다. return한 내용은 곧      respone 내용이다. app.module  - imports : 다른 모듈이 존재시 추가할수 있다. (아래 사진에서는 members, 기본적으로 비어있음) - controllers : app.controller의 Class AppController를 받는다. - providers : Class AppController 에 사용할 method을 제공받는다. - main : app.module에 있는 class AppModule를 app에 받고 서버를 실행한다. 2번의 구조를 보면 역할이 모두 나누어 진것을 알수 있습니다. 다른 모듈들을 만들때도 이와 같은 방법으로 만듭니다.  3) members모듈 구조  이제 앞으로 글을 작성할때 코딩할 members모듈을 구조로 그려봤습니다. 위 구조에서 보면 app의 모듈과 상당히 유사한 것을 알수 있습니다.   간단히 설명하자면 모든 멤버의 데이터를 GET요청으로 받아오는 것입니다. 물론 실제로는 있으면 안되고 더군다나 비밀번호도 포함되어있기 때문에 예제로만...

Object Oriented - OOP Polymorphism

이미지
 이제 OOP의 마지막인 Polymorphism에 대해서 알아보겠습니다. 저번에 Class를 이용하여 객체를 만들었습니다. 하지만 각각의 객체가 같은 틀을 사용할수 있지만 상황에 따라서 다르게 사용하는 경우도 있습니다. 이때 Polymorphism의 특성을 사용합니다.  위 사진은 Book Class을 나타내는 사진 입니다. 위 사진은 위 링크 에서 내용을 확인 할수 있습니다.   이제는 Book Class에서 양식을 받아서 Alex Class로 만듭니다. 하지만 cost를 변경하고 Function을 변경하였습니다.   일단 먼저 Class bookInfor를 생성합니다. 이는 나중에 Class Alex에서 bookInfor의 양식을 받아오기 위해 미리 생성해야 합니다.  이제 Class Alex을 생성하는데 첫줄에 'extends'단어가 있습니다. 이는 오른쪽에 있는 bookInfor class의 양식을 Alex에서도 계승한다는 코드입니다.  순서도를 보면 Class Alex는 2번 bookInfor에서 양식을 받는것을 알수 있습니다.  constructor(명칭 변경가능)  여기서 'super' 키워드가 있는데 이는 constructor의 구조를 파라메트 만큼 갖고와서 사용한다는 뜻입니다. 즉 여기서는 cost만 존재하지 않으니 그것을 제외한 모든 this코드를 갖고오는 것입니다. register(명칭 변경가능)  register는 bookInfor에서 계승을 받지만 Alex에서 변경을 하였습니다. 이렇게 계승을 받지만 중간에 변경을 하면 변경된 register로 실행하게 됩니다. 하지만 만약 Class Alex에 constructor 부분이 통째로 없다해도 동작이 가능할까요? 가능합니다.   다만 constructor를 지우면 cost까지 파라메터로 입력을 할수 있습니다.  이렇듯 부모 Class에 계승을 받지만 자식 Class에서 그대로 받...

Object Oriented - OOP Inheritance

이미지
안녕하세요 알렉스입니다. 이번에는 OOP의 Inheritance에 대해서 설명해 드리겠습니다.   처음에 도서에 대한 정보를 출력할때 책에 대해서 각각 변수를 정의 하고 함수에서 각각의 파라메터값을 입력해서 출력 했습니다. 하지만 이 방법은 전에 이야기 했듯이 너무 많은 작업량과 비효율성을 나타냅니다. 반면 ' Object Oriented - OOP Encapsulation '에서 설명했듯이 Object와 this을 이용하여 각 도서에 대한 Book Object를 생성할수 있습니다. 하지만 이 방법도 도서의 갯수가 늘어남에 따라 Book Object 수가 늘어납니다.  그래서 Class는 틀을 짜놓고 'new'를 선언할때마다 새로운 객체를 생성하는 것입니다. 여기서 constructor는 각 항목에 대한 value를 저장합니다. register은 함수(여기서는 console.log로 도서정보 출력)를 실행합니다.  이렇듯 하나의 Class(클래스)를 이용하여 여러개의 객체를 생성할수 있습니다. 물론 각 객체마다 구조는 같지만 value값은 똑같거나 다를수 있습니다. 이 방법을 이용하면 궂이 Object를 일일이 만들 필요가 없어집니다. 다음 글 이전 글

Object Oriented - OOP Abstraction

이미지
 이번에는 OOP의 다음 특성인 Abstraction입니다. 일명 추상화 과정 입니다.   우리는 이전 글에서 Book Object안의 코드가 어떤 식으로 구성 됬고 동작하는지 알지만 실제로 사용자는 알 필요가 없습니다.  또한 시리즈로 작성한 체스게임 의 코드는 사용자가 신경쓸 필요가 없습니다. 단지 체스의 규칙에 맞춰 게임을 하면 되는 것입니다.  순서도의 구조가 간단하지만 Object Oriented - 생긴이유  에서 알려드렸듯이 순서도도 양파를 까듯이 매우 복잡해 질수 있습니다. 결국 사용자는 정상적으로 쓰기만 하면 됩니다. 위 사진에서는 코드를 순서도와 맞춰서 나타냈지만 이는 프로그래머가 알아야 할 사항입니다. 실제로 사용자는 위 사진의 6가지 책의 정보를 출력하는 방법 아니면 1가지 '책의 모든 정보를 String로 출력'하는 방법만 알면 충분합니다. 이렇게 복잡한 구조와 기능들을 하용자한테 드러내지 않고 쉽게 쓸수 있도록 한 것을 Abstraction이라고 합니다. 다음 글 이전 글

Object Oriented - OOP Encapsulation

이미지
 안녕하세요 이번에는 OOP의 첫번째 내용인 Encapsulation에 대해서 설명해 드리겠습니다.  책을 예로 들이겠습니다. 일단 코드를 작성할때 각각의 변수를 설정하고 함수를 만든 다음 함수에 파라미터 또는 요소(Parameter)를 넣어서 구동합니다. 이후 return값을 받게 코드를 짭니다.   위 두 사진은 책이라는 물체에 대해서 도식화(2번째 사진)했고 다음은 실제 코드를 구동할때의 결과를 나타낸 사진(3번째 사진)입니다.  이렇게 짤수는 있지만 문제는 책이 이세상에 1권만 있는게 아니라 종류, 타입 별로 무한정 있기 때문에 위 처럼 코드로 작성하게 되면 작업량이 엄청나게 늘어납니다.  제목(Title)만 하더라도 각각의 변수를 다르게 지정해 줘야 하기 때문입니다.  여기서 책에 대한 Object를 만듭니다. 이 안에는 기존에 있던 책의 모든 파마메터와 함수가 들어가 있습니다. 그리고 다음에 보실 코드에는 이 함수에 전달할 파라메터가 존재하지 않습니다.  JavaScript Object는 다음 링크를 참고해 주시기 바랍니다.  Book의 객체 안에서 키값으로 각각의 요소가 지정이 됬고 함수는 전달인자 없이 문자열을 return할수 있습니다. 이는 this문을 사용하였기 때문 입니다. this에 관한 링크  따라서 Encapsulation은 하나의 객체(Object)안에서 모든게 이루어 질수 있도록 하는것을 의미한다고 볼수 있습니다. 다음글 이전글

Object Oriented - OOP 개요

이미지
 이제 Structure에서 Object Oriented로 넘어갑니다. 이전 글에서 Structure는 함수를 참조만 했지 변경하거나 정의할수가 없었습니다. 하지만 OOP로 넘어가면서 함수를 내부에서 정의하고 변경까지도 가능하게 됩니다. 일단 Object Oriented를 이해하기 위해서는 2가지 정의를 이해해야 합니다. 1. 클래스(Class)는 객체(Object)를 위한 템플릿 2. 객체(Object)는 클래스(Class)의 인스턴스(instances) 그러면 기존에 체스판을 예로 들겠습니다.  나이트를 Class로 예로 들면 여러가지(위치,색,사망여부,움직임 함수)가 들어있음을 알수 있습니다. 이때 사망여부와 움직임 함수는 모든 나이트의 공통 사항이기 때문에 초기화 합니다. 하지만 위치와 색은 초기화 해서는 안됩니다.  위 그림에서 각각의 나이트들은 시작하는 지점이 서로 다릅니다. 따라서 각각의 나이트의 시작위치는 모두 달라야 합니다.   하지만 모든 나이트의 위치를 초기화해 같은위치에서 시작된다면 체스판에 있는 나이트는 시작할때 이상한 모습을 띄게 될 것입니다.  또한 색을 한가지로 초기화 한다면 누가 누구의 말을 쓸수있는지 모를겁니다.  대신 백과 검정말의 공통점은 움직임 입니다. 그리고 처음 시작할때 살아 있어야 합니다. 이경우는 백과검의 공통된 부분이기 때문에 초기화 할수 있습니다. <나이트 예시> Class(클래스) : 나이트가 갖는 공통된 속성 Object(객체) : 그 나이트가 갖고있는 속성 따라서 클래스는 프로그램 내에서 뒤죽박죽 섞여있는 데이터(Data)와 함수(Function)들을 일목요연하게 정리하고 사용하기 쉽게 해줍니다. 다음 글에서는 여기서 더 나아가 OOP가 갖는 주된 속성 4가지에 대해서 설명해 드리겠습니다. 다음 글 이전 글

Object Oriented - OOP이전 변수,함수, 배열, Structure사용

이미지
 안녕하세요 알렉스 입니다. 저번에는 절차지향언어가 어떤식으로 진행되고 장점과 단점, 그리고 그로인해 스파게티 코드가 되기 쉽다는 것을 설명했습니다.   이제 이번에는 OOP가 나오기 전 어떤식으로 변수(veriable)와 함수(function)를 프로그램에서 이용했는지 설명해 드리겠습니다.  초창기에는 변수들을 이용하여 프로그램을 짰습니다. 지금과 같이 복잡하지 않았기 때문에 변수 여러개를 조합하여 하나의 프로그램을 만들었습니다.   하지만 프로그램의 복잡성이 높아지면서 이 변수들을 그룹짓기 시작했습니다. 더이상 원시타입변수(Primitive Data)만으로는 효율적으로 프로그램을 짤수 없게 되었습니다. 그룹을 짓는다고할때 한가지 예를 들겠습니다. 체스게임의  체스에서 나이트 말에 대해서 예시를 들겠습니다. 체스게임에서 나이트를 원시타입변수로 나타내면 위치,사망여부,색 등으로 그룹을 질수 있습니다. 또한 이것은 1개가 아닌 2개(흰색기준)로 구분지어서 나타내야 합니다.   체스를 둘때 위치를 알아야하며 아군인지 적군인지 구분이 필요하고 동시에 상대방의 말에의해 먹혔는지 안먹혔는지도 판별해야 합니다.  문제는 이런 그룹이 편하긴 하지만 검정말도 똑같이 그룹을 만들어야하고 다른 말들(킹, 퀸, 비숍 등등)의 그룹도 만들어야해서 갯수에따라 그룹이 증가하는것을 알수 있습니다.  이때 Structure가 능장하게 됩니다. Structure는 배열(Array)과 비슷합니다. 하지만 배열은 같은 속성(변수)에 대해서 저장을 할수 있게 합니다.   위 사진에서 배열은 Boolean만 저장 가능하고 다른 변수인 int 혹은 다른 변수를 저장할수 없습니다. 이처럼 배열이 받을수 있는 속성이 정해지면 그것만 받을수가 있습니다.   Structure는 여러가지 변수 뿐만 아니라 같은 Structure 또는 함수(Function)의 참조(referen...