본문 바로가기

Programming310

스테이트 패턴 State Pattern State는 상태라는 의미를 가지고 많이 쓰이는 단어입니다. 이처럼 상태에 따라 객체를 변환할 때 이용하는 패턴이 스테이트 패턴입니다. 1. 스테이트 패턴 스테이트 패턴은 객체 내부의 상태에 따라 동작을 변환할 때 이용하는 패턴입니다. 스테이트 패턴을 이용하면, 객체에 대해 여러 동작을 정의할 때 스테이트 객체만 수정, 추가하면 됩니다. 또한 스테이트 패턴을 사용하지 않을경우 조건문 등을 이용해서 동작을 제어해야하는데 스테이트 객체를 이용함으로써 클래스 코드가 간단해집니다. 단, 상태에 따라서 스테이트 객체가 증가하기 때문에, 동작이 많아질 경우 스테이트 객체가 늘어난다는 단점도 갖고 있습니다. 2. 스테이트 패턴 구현하기 오락실이나 뽑기 기계 근처에 가면 항상 동전 교환기계가 있습니다. 이 기계는 스테.. 2021. 9. 29.
이진 트리의 순회 지난 포스트에서 이진 트리를 구현해 보면서, 트리 삽입 과정에서 문제가 발생했었습니다. 트리의 하위 트리가 존재하는 경우 그 아래 트리의 메모리가 반환되지 않아 메모리 낭비가 일어나는 과정이었는데요. 이 과정을 순회 라는 개념으로 해결할 수 있다고 했었습니다. 1. 순회 순회는 트리의 모든 노드를 중복이나 빠지는 것 없이 처리하는 연산입니다. 그동안 우리가 다뤘던 스택, 큐같은 자료구조들을 자료가 1:1 구성을 가졌기에 따로 순회할 필요가 없었습니다. 그러나 트리는 1:다수의 관계이기 때문에 현재 노드에서 어떤 다음 노드를 처리할지에 대한 연산이 필요하며, 이 연산을 순회라고 합니다. 순회는 루트 노드의 방문 순서를 기준으로 세 가지 종류로 나뉩니다. 전위 순회 중위 순회 후위 순회 전위 순회는 루트 노.. 2021. 9. 27.
이터레이터 패턴 Iterator Pattern 이터레이터(iterator)는 반복자라는 의미를 가지고 있습니다. 그 이름처럼 반복에 대한 문제를 해결해주는 디자인 패턴입니다. 1. 이터레이터 패턴 이터레이터 패턴의 소개는 다음과 같이 합니다. 컬렉션의 구현 방법을 외부에 노출시키지 않으면서, 그 컬렉션 내부의 모든 항목에 대하여 접근할 수 있도록 하는 패턴이다. 조금 더 쉬운 말로 풀어보자면, 동작을 어떻게 하는지는 몰라도 내부의 항목에 대해서 반복 작업이 가능하다라고 할 수도 있습니다. 가장 좋은예는 어떤 코드에 배열과 리스트가 혼합되어 있습니다. 둘 다 인덱스를 이용하고, 여러개의 데이터를 저장한다는 공통점이 있는데 접근방법은 조금 다릅니다. 이때 이터레이터 패턴을 이용하면 동일한 인터페이스를 이용해서 배열이든 리스트이던 모든 데이터에 접근할 수.. 2021. 9. 26.
이진 트리 구현 두개의 포스트에 걸쳐서 이진 트리를 설명했으니 드디어 구현에 들어가볼 차례입니다. 1. 배열로 이진 트리 구현하기? 트리도 배열을 이용해서 구현할 수는 있습니다. 그림처럼 노드에 번호를 부여하고 배열의 인덱스와 노드 번호를 일치시켜 데이터를 저장하죠. 다시 말하자면 배열의 크기를 (노드의 수+1) 만큼 잡고 인덱스 0번을 제외한 나머지 번호를 이용해서 구현합니다. 하지만 크기 가변이 힘들고, 위와 같은 그림의 완전 이진 트리가 아닌경우에, 비는 인덱스가 생긴다는 등의 문제로 인해서 일반적으로 트리를 배열로 구현하지는 않습니다. 물론 이진 트리 마지막에 소개드릴 '히프'라는 자료구조가 있는데, 이 구조에서 배열을 이용하게 됩니다. 2. 연결 리스트로 이진 트리 구현하기 노드 특히 양방향 노드를 이용하면 이.. 2021. 9. 24.
템플릿 메소드 패턴 Template Method Pattern 템플릿(Template)은 형판, 형틀이라는 뜻을 가지고있습니다. 형판이라는 것은 어떤 것을 만들기 위해서 미리 모양을 새겨 놓은 판을 말합니다. 1. 템플릿 메소드 템플릿이 형틀이라는 의미를 갖고 있듯이, 템플릿 메소드 패턴은 특정 기능을 형틀처럼 캡슐화 하여 이용하는 기능입니다. 이때 템플릿을 추상클래스로 정의하여 하위클래스에서 상속하여서 이용하게 됩니다. 이처럼 추상화시키는 메소드들은 공통된 알고리즘이나 구조를 추상화 시키게 됩니다. 2. 템플릿 메소드 구현하기 쿠키 가게가 있습니다. 이 가게에서는 초코 쿠키와 시나몬 쿠키를 판매하는데 다음과 같은 방식으로 제조를 합니다. public class ChocolateCookie { public void orderCookie(){ knead(); baki.. 2021. 9. 23.
[React] 리액트 소개 리액트는 최근들어 수요가 늘어나고 있는 웹 프레임워크 라이브러리 중 하나입니다. 자바스크립트를 이용해서 보통 사용자 인터페이스 제작에 사용되는 기술입니다. 1. 서론 리액트가 사용자 인터페이스에 사용된다고 했었는데 이런 역할을 하는 프레임워크나 라이브러리들은 사실 몇가지가 더 있습니다. 앵귤러(Angular), 뷰.js(Vue.js) 등이 있는데 이것들은 MVC, MVVM, MVW 모델 등을 채택했습니다. 대표적으로 MVC모델이란, Model-View-Controller의 약자로 다음과 같은 구조를 가집니다. 유저로부터, 조작을 받아 컨트롤러가 모델에 전송해 수정이나 조회를 하고, 모델은 뷰에 업데이트를 함으로써, 사용자에게 보여지는 방식이죠. 굉장히 간단한 구조 같지만 규모가 커지면 커질수록 컨트롤러가.. 2021. 9. 21.
300x250