본문 바로가기

전체 글

(143)
[소프트웨어/디자인패턴] 중개자 패턴(Mediator Pattern) 여러 객체간의 협업관계를 중앙화하는 패턴 Context GUI 개발을 하다 보면 여러 컴포넌트 간의 호출 관계를 그릴 수 있습니다. 우리가 많이 개발하는 UI 중 하나인 로그인 폼을 예로 들어보겠습니다. 사용자의 이름과 암호, Guest로 로그인, 로그인 버튼, 취소 버튼이 있다고 생각해봅시다. 그럼 대략 아래와 같은 기획과 요구사항이 나올 수 있습니다. 요구사항 Guest로 로그인이 체크된 경우 Username과 Password는 비활성화 Login 버튼 활성화 Guest로 로그인이 체크가 되지않은 경우 Username은 활성화 Password는 Username에 한 글자라도 텍스트가 입력된 경우 활성화 Username과 Password 모두 내용이 있는 경우에만 Login버튼 활성화 Problem G..
[소프트웨어/디자인패턴] 메멘토 패턴(Memento Pattern) Memento Pattern 캡슐화를 위배하지 않은 채 내부 상태의 스냅샷을 찍는 패턴 Context 어떤 스토리가 있는 RPG게임을 생각해봅시다. 사용자는 모험가를 통해 게임을 플레이할 것이며 각 단계의 스테이지를 깨나가면서 캐릭터는 성장하게 될 것입니다. 몬스터들을 처치하면서 아이템도 오를 것이고 HP와 MP도 사용할 것입니다. 그리고 모험가는 맵을 모험하면서 위치도 계속해서 변경되겠죠. 아마 예상을 하자면 아래와 같은 다이어그램이 나오지 않을까 싶습니다. Problem 하지만 유저는 항상 모든 맵을 처음 모험하다보니 더 어려운 상대를 만나서 다치기도 하고 죽기도할 것입니다. 하지만 RPG게임이 실제 인생과 같이 모든 것을 잃고 다시 시작한다면 게임플레이어는 아마 이 게임에 대해서 욕을 할지도 모릅니..
[소프트웨어/디자인패턴] 방문자 패턴(Visitor Pattern) Visitor Pattern 방문자 패턴은 데이터 구조와 처리를 분리하는 패턴입니다. Context 우선 방문자 패턴이 무엇인지 보다는 어떤 때에 사용하는 것이 좋은지에 대해서 알아봅시다. 흔히 접할 수 있는 구문트리, 아래와 같은 파일시스템, 혹은 계층적 구조로 형성되는 데이터를 처리 할때에는 각각의 노드 클래스에 처리와 관련된 로직을 구현하는 것이 일반적인 방법입니다.위 이미지는 File과 Directory클래스로 파일 시스템을 표현한 다이어그램입니다. 메서드로는 OutputList라는 재귀적으로 파일 리스트를 출력하는 로직을 가지고 있습니다. 이를 호출하게 되면 리눅스의 ls -R처럼 하위에 있는 모든 파일 리스트를 출력하게 됩니다. public abstract class Entry { public..
[C#] 공변성과 반공변성이란? 공변성과 반공변성 공변성과 반공변성 어떤 의미이고 어떻게 쓰는 것이 좋을까? 개요 사실 공변성과 반공변성을 통칭 가변성이라고 한다. 그리고 이와 반대되는 의미로는 불변성이 있다. 가변성(Variance) : 특정 타입의 객체를 다른 타입의 객체로 변환할 수 있는 성격을 말한다. 공변성(Covariant) : X -> Y가 가능할 때 C가 C -> C로 가능하다면 이는 공변이다. 반공변성(Contravariant) : X -> Y가 가능할 때 C가 C -> C로 사용 가능하다면 이는 반공변이다. 불변성(Invariant) : X -> Y가 가능하더라도 C는 C로만 사용할 수 있다. 기본적으로 제네릭은 불변이다. 좀 더 상세히 설명하기 위해서 아래와 같은 다형성을 가진 환경이 있다고 가정해보자. class ..
[개발자] 소프트웨어 장인 - 산드로 만쿠소 나는 아키텍트라는 타이틀이 좋았다. - 26P 이 책을 읽으면서 많은 생각을 했다. 경험했던 많은 실패한 프로젝트들, 그리고 그 프로젝트의 코드품질에 대해서 고민했다. 당시 소프트웨어 아키텍트에게 많은 불만을 가지고 있던 나는 단순히 개발자를 편하게 하는 소프트웨어 아키텍트가 되겠다고 생각했었다. 이는 잘못된 생각이였다. 세상에 개발자를 편하게 하는 아키텍트는 없다. 멍청하고 바보같게 일을 대신해주는 아키텍트만 있을 뿐이였다. 그리고 그런 역할을 하는 내가 뛰어나 보이는 타이틀인 소프트웨어 아키텍트가 좋을 뿐이였다. 산드로 만쿠소는 자신이 경험한 많은 프로젝트를 이야기 하면서 무엇이 장인정신이고 어떤 자세가 프로그래머로써 옳은 것인지 제시해준다. 무엇보다 가장 놀란 점은 외국이나 한국이나 기업 문화나 대..
Git bash 한글 깨짐 문제 git/bin/bash.exe를 IDE(VSC, Webstorm, IDEA 등)에 통합하여 사용하는 경우가 많은데 한글이 깨진다. 특히 디렉토리를 이동하거나 git add 한글파일.확장자와 같은 명령을 사용할 때 깨지면 기분이 좋지 않다. 찾아보니 아래와 같이 ~/.bashrc에 ko_KR.UTF-8와 같이 설정하면 한글이 깨지지 않고 잘 사용할 수 있다. # ~/.bashrc export LC_ALL=ko_KR.UTF-8 export LANG=ko_KR.UTF-8
[Angular2] 컴포넌트에 대해서 Component angular2의 component에 대해서 설명합니다. Introduce angular2는 기본적으로 CBD(Component Based Development)이다, 여기서 Component는 W3C의 Web Component를 의미하며 명세(Spec)에 따른 배포, 조립이 가능한 독립 구성 단위이다. 컴포넌트는 명세(Spec)를 정확히 구현해야한다. 컴포넌트는 배포 및 다른 컴포넌트에서 사용 가능해야한다. Structure 컴포넌트 파일은 크게 3가지 영역으로 구분할 수 있다. import : 관련 라이브러리를 호출한다. @Component : 장식자(Decorator)로서 컴포넌트의 기본적인 메타데이터를 정의한다. Class : 컴포넌트의 상태를 정의할 클래스이다. Import A..
[소프트웨어/디자인패턴] 추상 팩토리 패턴 (Abstract Factory Pattern) Abstract Factory Pattern Context 스마트폰을 조립하는 공장을 생각해보면 아래와 같은 모델이 어느정도 연상될 것이다.기본적으로 AP, Battery는 스마트폰을 구성하는 중요한 요소이며 갤럭시는 SamsungExynos와 SamsungBattery를, 애플의 아이폰은 AppleAX와 LG 배터리를 사용한다. 그리고 이들의 인스턴스는 각각의 팩토리에서 생산된다. 어느 제품에 대한 배터리나 AP를 생산하는지는 Vender Enum를 인자로써 제공한다. 아래는 위 모델의 코드 구현이다. abstract class AP { private Battery battery; public AP(Battery battery) { this.battery = battery; } public void p..