라벨이 OOP인 게시물 표시

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...

Object Oriented - 생긴이유

이미지
 안녕하세요. 알렉스 입니다. 이번에는 OOP(Object Oriented Programming)에 대해서 알아볼려고 합니다. 일단 OOP가 생긴 이유에 대해서 알려드리겠습니다. 초창기 프로그램은 지금처럼 복잡하지 않았기 때문에 주로 절차언어(Procedural Language)로 진행됬었습니다.   위 사진에서 보면 프로그램 시작에서 아래로 절차에 따라 진행되는것을 알수 있습니다. 이 과정은 주로 C언어나 기타 절차지향언어들에서 볼수 있습니다. 절차언어의 장점은 순차적으로 프로그램 코드를 진행하기 때문에 단순하면서 명확합니다. 절차에 따라서 진행이 되면 되니깐요.  하지만 프로그램이 복잡해지면 절차를 지향하는 코드의 복잡성도 기하급수적으로 늘어납니다.  위 사진은 절차지향언어를 사용하여 나타낸 순서도 입니다. 녹삭 사각형은 아까의 단순화한 코드가 아닌 어러가지 함수나 변수들이 들어있습니다. 왼쪽의 순서도에서 1번 처리는 오른쪽의 1번으로 볼수 있습니다. 이게 끝이 아닙니다. 각각의 처리또한 나름의 절차가 있습니다. 또 그안에 존재하는 처리도 마찬가지 입니다.   절차 지향언어를 잘 정리하면 읽기가 쉽지만 복잡성이 증가하면 일명 스파게티 코드라는 것이 나타나게 됩니다. 코드가 뒤죽박죽 섞여있는것이 스파게티같다고해서 붙여진 이름입니다. 이래서 OOP가 나타나게 된 것입니다. 절차지향언어의 단점을 보완하고 복잡성을 줄이기 위해 탄생한 것이 Object Oriented Program입니다. 다음은 OOP가 나오기 전까지 어떻게 변수, 함수를 썼는지 알려드리겠습니다. 다음글 링크